Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用“Runtime.getRuntime().exec”(“explorer.exe”)时,Netbeans项目仍在运行`_Java_Multithreading_Netbeans_Runtime.exec - Fatal编程技术网

Java 使用“Runtime.getRuntime().exec”(“explorer.exe”)时,Netbeans项目仍在运行`

Java 使用“Runtime.getRuntime().exec”(“explorer.exe”)时,Netbeans项目仍在运行`,java,multithreading,netbeans,runtime.exec,Java,Multithreading,Netbeans,Runtime.exec,我正在开发一个(非恶意的)屏幕锁定类Swing应用程序,我已经改编了Martijn Courtaux在上的回答中的代码来实现这一点。问题是当我使用Runtime.getRuntime().exec(“explorer.exe”)要在程序关闭时重新打开Explorer进程,Netbeans认为我的项目仍在运行,因为生成的Explorer.exe正在运行。CMD提示符和JCreator没有此问题 有人能举一个例子,说明调用像explorer.exe这样的命令以避免Netbeans发生这种情况的首选方

我正在开发一个(非恶意的)屏幕锁定类Swing应用程序,我已经改编了Martijn Courtaux在上的回答中的代码来实现这一点。问题是当我使用
Runtime.getRuntime().exec(“explorer.exe”)
要在程序关闭时重新打开Explorer进程,Netbeans认为我的项目仍在运行,因为生成的Explorer.exe正在运行。CMD提示符和JCreator没有此问题

有人能举一个例子,说明调用像
explorer.exe这样的命令以避免Netbeans发生这种情况的首选方法吗


编辑:我在程序开始时关闭浏览器进程(包括任务栏)。当我运行资源管理器时,它不是打开Windows资源管理器窗口(对于给定的答案,它完全可以正常工作),而是恢复常规的Windows UI。

ProcessBuilder允许您创建和控制进程


下面是一些示例代码,它相当复杂,但我没有时间将其简化(无意冒犯):

ProcessBuilder允许您创建和控制流程


下面是一些示例代码,它相当复杂,但我没有时间将其简化(无意冒犯):

问题在于
Runtime@exec
正在等待子进程退出。这是默认行为

如果要执行无父进程(即使子进程仍在运行,父进程也可以在其中终止的进程),则需要更具创造性

我们使用

"cmd /C start /B /NORMAL " + yourCommand
我建议使用
ProcessBuilder
,因为它使构建和执行外部命令变得更加容易

类似于

ProcessBuilder pb = new ProcessBuilder("cmd", "/C", "start", "/B", "/NORMAL", "explorer.exe");
pb.start();
例如

注意:我运行的是NetBeans,程序在/as explorer打开后退出


有一点退步。这不喜欢长文件名。您需要找到一些方法来生成短文件名/路径,以使其正常工作。我被迫为此使用JNI解决方案

问题是
Runtime@exec
正在等待子进程退出。这是默认行为

如果要执行无父进程(即使子进程仍在运行,父进程也可以在其中终止的进程),则需要更具创造性

我们使用

"cmd /C start /B /NORMAL " + yourCommand
我建议使用
ProcessBuilder
,因为它使构建和执行外部命令变得更加容易

类似于

ProcessBuilder pb = new ProcessBuilder("cmd", "/C", "start", "/B", "/NORMAL", "explorer.exe");
pb.start();
例如

注意:我运行的是NetBeans,程序在/as explorer打开后退出



有一点退步。这不喜欢长文件名。您需要找到一些方法来生成短文件名/路径,以使其正常工作。我被迫为此使用JNI解决方案

问题是
Runtime@exec
正在等待子进程退出。这其实很普遍。创建一个没有孩子的进程是有诀窍的,但是我现在没有代码,问题是
Runtime@exec
正在等待子进程退出。这其实很普遍。创建一个无子进程是有诀窍的,但我现在手头没有代码,但它不会允许JVM退出,直到子进程终止,回到OP遇到的原始问题…他可以在退出时销毁它。第181行。但是;),据我所知,OP希望启动进程,然后退出程序,而另一个进程继续运行。我同意,ProcessBuilder是一个更好的运行时执行解决方案,但我并不是这样理解的。如果是这样的话,他可以运行“cmd/K COMMAND_HERE”。现在加上你的答案!但是,它将不允许JVM退出,直到子进程终止,返回到OP遇到的原始问题…他可以在退出时销毁它。第181行。但是;),据我所知,OP希望启动进程,然后退出程序,而另一个进程继续运行。我同意,ProcessBuilder是一个更好的运行时执行解决方案,但我并不是这样理解的。如果是这样的话,他可以运行“cmd/K COMMAND_HERE”。现在加上你的答案!感谢您提供的深入信息和
ProcessBuilder
建议。现在,我认为
“cmd/C…”“
对我来说很好。不客气。我花了两周的时间才弄明白这一切,我很乐意帮助别人:事实证明,这个答案适用于除
explorer
以外的所有东西(假设explorer尚未运行,在这种情况下,您只需获得一个Windows/File explorer窗口)。答案很好,但在这种情况下不起作用。目前,我正在使用一个带有
os.startfile(“explorer”)
的Python脚本来实现这一点。再次感谢您。您希望在哪里进行探索?我打开Windows资源管理器并多次运行示例代码,每次它打开一个新的Windows资源管理器并退出。我关闭了所有的窗口资源管理器并再次尝试,每次都有相同的结果感谢深入的信息和
ProcessBuilder
建议。现在,我认为
“cmd/C…”“
对我来说很好。不客气。我花了两周的时间才弄明白这一切,我很乐意帮助别人:事实证明,这个答案适用于除
explorer
以外的所有东西(假设explorer尚未运行,在这种情况下,您只需获得一个Windows/File explorer窗口)。答案很好,但在这种情况下不起作用。目前,我正在使用一个带有
os.startfile(“explorer”)
的Python脚本来实现这一点。再次感谢您。您希望在哪里进行探索?我打开Windows资源管理器并多次运行示例代码,每次它打开一个新的Windows资源管理器并退出。我关闭了所有的窗口资源管理器,然后再试一次,每次都有相同的结果