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

时间:2013-08-12 20:52:49

标签: java multithreading netbeans runtime.exec

我正在开发一种(非恶意的)屏幕锁定类型的Swing应用程序,并且我已经在Use Java to lock a screen修改了Martijn Courteaux的答案中的代码来执行此操作。问题是当我在程序关闭时使用Runtime.getRuntime().exec("explorer.exe");重新打开资源管理器进程时,Netbeans认为我的项目仍在运行,因为生成的explorer.exe正在运行。 CMD提示和JCreator没有这个问题。

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

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

2 个答案:

答案 0 :(得分:1)

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

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

我们使用......

"cmd /C start /B /NORMAL " + yourCommand

我强调建议使用ProcessBuilder因为它使构建和执行外部命令变得更加容易。

像...一样的东西。

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

例如......

nb 我运行这是NetBeans,并且在/探险家打开后程序退出。

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

答案 1 :(得分:0)

ProcessBuilder允许您创建和控制流程。

这是一些示例代码,它相当复杂但我没有时间愚蠢(没有冒犯):https://github.com/Xabster/Botster/blob/master/src/commands/ExecCommand.java