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

谁能举一个首选方法的示例来调用诸如explorer.exe之类的命令,以避免Netbeans发生这种情况?

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

最佳答案

问题是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解决方案

07-28 02:33
查看更多