Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要停止用户第二次单击已运行的exe_Java_Exe - Fatal编程技术网

Java 需要停止用户第二次单击已运行的exe

Java 需要停止用户第二次单击已运行的exe,java,exe,Java,Exe,我已经开发了一个Java应用程序的exe,并从thumb驱动器运行它。这将需要一些时间来执行。但我的最终用户认为它没有运行,于是第二次点击。我需要阻止这一切。我需要在exe运行时停止连续单击。我使用shell脚本检查exe是否正在运行。并显示exe已在运行的消息。并停止进一步的过程。我需要在exe第二次运行时发生此情况。我想不出来。是否有任何方法在exe运行时禁止其单击。或者如何使用检查是否正在运行 import java.io.BufferedReader; import java.io.Fi

我已经开发了一个Java应用程序的exe,并从thumb驱动器运行它。这将需要一些时间来执行。但我的最终用户认为它没有运行,于是第二次点击。我需要阻止这一切。我需要在exe运行时停止连续单击。我使用shell脚本检查exe是否正在运行。并显示exe已在运行的消息。并停止进一步的过程。我需要在exe第二次运行时发生此情况。我想不出来。是否有任何方法在exe运行时禁止其单击。或者如何使用检查是否正在运行

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。你的答案有效。。