Java 使用“Runtime.getRuntime().exec”(“explorer.exe”)时,Netbeans项目仍在运行`
我正在开发一个(非恶意的)屏幕锁定类Swing应用程序,我已经改编了Martijn Courtaux在上的回答中的代码来实现这一点。问题是当我使用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发生这种情况的首选方
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资源管理器并退出。我关闭了所有的窗口资源管理器,然后再试一次,每次都有相同的结果