1

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

谁能举例说明调用命令的首选方式,比如explorer.exe避免在 Netbeans 上发生这种情况?

编辑:我在程序开始时关闭资源管理器进程(包括任务栏)。当我运行资源管理器时,它不是打开一个 Windows 资源管理器窗口(它与给定的答案完全兼容),而是恢复常规的 Windows UI。

4

2 回答 2

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

于 2013-08-12T23:30:20.217 回答
0

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

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

于 2013-08-12T21:03:27.937 回答