Java 需要停止用户第二次单击已运行的exe
我已经开发了一个Java应用程序的exe,并从thumb驱动器运行它。这将需要一些时间来执行。但我的最终用户认为它没有运行,于是第二次点击。我需要阻止这一切。我需要在exe运行时停止连续单击。我使用shell脚本检查exe是否正在运行。并显示exe已在运行的消息。并停止进一步的过程。我需要在exe第二次运行时发生此情况。我想不出来。是否有任何方法在exe运行时禁止其单击。或者如何使用检查是否正在运行Java 需要停止用户第二次单击已运行的exe,java,exe,Java,Exe,我已经开发了一个Java应用程序的exe,并从thumb驱动器运行它。这将需要一些时间来执行。但我的最终用户认为它没有运行,于是第二次点击。我需要阻止这一切。我需要在exe运行时停止连续单击。我使用shell脚本检查exe是否正在运行。并显示exe已在运行的消息。并停止进一步的过程。我需要在exe第二次运行时发生此情况。我想不出来。是否有任何方法在exe运行时禁止其单击。或者如何使用检查是否正在运行 import java.io.BufferedReader; import java.io.Fi
import java.io.BufferedReader;
import java.io.File;
import java.io.FileWriter;
import java.io.InputStreamReader;
public class VBSUtils {
private VBSUtils() { }
public static boolean isRunning(String process) {
boolean found = false;
try {
File file = File.createTempFile("realhowto",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs = "Set WshShell = WScript.CreateObject(\"WScript.Shell\")\n"
+ "Set locator = CreateObject(\"WbemScripting.SWbemLocator\")\n"
+ "Set service = locator.ConnectServer()\n"
+ "Set processes = service.ExecQuery _\n"
+ " (\"select * from Win32_Process where name='" + process +"'\")\n"
+ "For Each process in processes\n"
+ "wscript.echo process.Name \n"
+ "Next\n"
+ "Set WSHShell = Nothing\n";
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
line = input.readLine();
if (line != null) {
if (line.equals(process)) {
found = true;
}
}
input.close();
}
catch(Exception e){
e.printStackTrace();
}
return found;
}
}
在我的主课上,我叫VBUtils
boolean result = VBSUtils.isRunning("myexe.exe");
if(result)
{
msgBox("myexe is running. Please wait");
}
else
{
// my part of execution.
}
如果我这样调用,exe就会被终止。第一次和第二次执行 最简单的方法是向用户提供某种视觉反馈,让用户知道应用程序正在运行。(例如,带有消息的控制台窗口、等待对话框等)您需要使用某种标志来指示您的应用程序正在运行。许多应用程序使用temp.pid文件。当你的应用程序启动时,它会检查一个.pid文件,如果有,它会退出并显示一条错误消息。如果没有.pid文件,它将创建一个并正常运行。首先,java提供了一个非常早期的启动屏幕:
此外,根据RMI,您可以在启动时连接到任何可能正在运行的实例,停止并传输命令行(“打开文件…”)。RMI允许您玩远程服务器。这是一种常见的方法,但我认为他确实应该这样做,并添加某种初始屏幕。如果您使用Pid文件方法,请确保文件存在,并让用户知道它似乎已经在运行,您真的要启动吗。您可以检查此链接以了解单实例限制:另一种方法是使用Launch4J,它可以创建一个Java launcher EXE,使其成为一个单实例OnlyTanks eee。你的答案有效。。