Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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 如何防止在可执行jar上多次单击_Java - Fatal编程技术网

Java 如何防止在可执行jar上多次单击

Java 如何防止在可执行jar上多次单击,java,Java,我有一个可执行jar,它运行一个带有内部SqlLite db的JavaSwing应用程序。 用户(错误地)只需点击jar,就会导致db锁。 我想阻止这种行为。 我能做什么? 非常感谢访问数据库的第一个实例应该在数据库上获得某种类型的锁,所有其他实例应该首先检查是否已经有这样的锁。如果有->“我不是第一个,显示警告/错误,退出。”,如果没有“我是第一个,获取一个锁,继续。”第一个访问数据库的实例应该在数据库上获取某种类型的锁,所有其他实例应该首先检查是否已经有这样的锁。如果有->“我不是第一个,显

我有一个可执行jar,它运行一个带有内部SqlLite db的JavaSwing应用程序。 用户(错误地)只需点击jar,就会导致db锁。 我想阻止这种行为。 我能做什么?
非常感谢

访问数据库的第一个实例应该在数据库上获得某种类型的锁,所有其他实例应该首先检查是否已经有这样的锁。如果有->“我不是第一个,显示警告/错误,退出。”,如果没有“我是第一个,获取一个锁,继续。”

第一个访问数据库的实例应该在数据库上获取某种类型的锁,所有其他实例应该首先检查是否已经有这样的锁。如果有->“我不是第一个,显示警告/错误,退出”。如果没有“我是第一个,获取锁,继续”。您需要某种同步机制

您需要自己编写代码,或者可以为应用程序创建一个JavaWebStart配置,JavaWebStart可以通过单实例服务(必须在代码中显式调用)处理“仅一次调用”


请参阅以获取示例。

您需要某种同步机制

您需要自己编写代码,或者可以为应用程序创建一个JavaWebStart配置,JavaWebStart可以通过单实例服务(必须在代码中显式调用)处理“仅一次调用”

请参阅以获取示例。

您可以使用JPS或JNI(需要在不同的平台上实现)。附件是检查Java应用程序实例的JPS代码。您可以将其修改为更多OO

使用文件、套接字或注册表作为锁并不完美,因为错误操作很可能会使应用程序无法再启动(例如,另一个程序占用同一端口)

您可以使用JPS或JNI(需要在不同的平台上实现)。附件是检查Java应用程序实例的JPS代码。您可以将其修改为更多OO

使用文件、套接字或注册表作为锁并不完美,因为错误操作很可能会使应用程序无法再启动(例如,另一个程序占用同一端口)


选中此项:它将为您提供所需的代码。@StefanBe,此问题中的源代码并不重要选中此项:它将为您提供所需的代码。@StefanBe,此问题中的源代码并不重要

import java.io.*;

public class TestRun {

      public TestRun() {}



      public static void main(String args[]) {



            String jpsApp = "jps -mlvV";
            int count = 0;
            try {

                  Process p = Runtime.getRuntime().exec(jpsApp);
                  //parser the result to check if TestAPP is running

                  InputStream is = p.getInputStream();

                  BufferedReader reader = new BufferedReader(new InputStreamReader(is));

                  String line = null;

                  while ((line = reader.readLine()) != null) {

                        System.out.println();

                        System.out.println(line);

                        String[] pair = line.split(" ");

                        if (pair.length >= 2) {

                              System.out.println("name is " + pair[1]);

                              if (pair[1].trim().indexOf("TestRun") > -1) {

                                    count++;

                                    System.out.println("count is " + count);

                              }

                        }

                  }
                  //it is running, just exit the second instance

                  if(count>1){


                        System.out.println("Has run a application!");
                        return;

                  } 

            } catch (Exception ex) {

                  ex.printStackTrace();

            }


      }

}