我正在开发一种(非恶意的)屏幕锁定的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解决方案