我正在开发一种(非恶意的)屏幕锁定类型的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用户界面。
答案 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