我现在做的java程序在系统中运行一次将会产生一个javaw的进程而现在我要解决的是,怎样让java程序只能运行一个实例javaswing

解决方案 »

  1.   

    up up 自己顶下,大神出来啊
      

  2.   

    你是说只能跑一个程序实例还是程序里的一个类只有一个实例对象? 如果是前者,打包工具如exe则有对应控制,如果是后者,则java类使用单例模式
      

  3.   

    使用socket的方式控制Socket server = new Socket(参数);
      

  4.   

    写错,应该这样private static ServerSocket listenerSocket; public static void main(String[] args) {
    try {
    // 监听2012端口,达到一台终端只运行一个应用程序的目的
    listenerSocket = new ServerSocket(2012);
    } catch (java.net.BindException e) {
    System.exit(1);
    } catch (Exception e) {
    System.exit(1);
    }
    }
      

  5.   

    如果是要求程序运行只能有一个进程,打包的时候,打包工具应该可以设置的吧,或者自己用c写一个启动exe,启动的时候判断一下,如果进程已经存在,则退出。如果指的是某个类只能有一个实例,则使用单例模式。
      

  6.   

    exe4j有一个选项可以保证只允许系统运行一个实例:
    Allow only a single running instance of the application
      

  7.   

    关键是我这边运行java程序的时候没有窗口,只是用processBuilder创建的如下:
     final Class<?> clazz = (Class<?>) JavaCall.class;
    final boolean isWindows = System.getProperty("os.name").contains(
    "Windows");
    final List<String> args1 = new ArrayList<String>();
    args1.add(isWindows ? "javaw" : "java");
    args1.add("-Xmx" + 128 + "M");
    args1.add("-cp");
    args1.add(System.getProperty("java.class.path"));
    args1.add("-Djava.library.path="
    + System.getProperty("java.library.path"));
    args1.add(clazz.getCanonicalName());
    // logger.info("start " + args1.toString());
    final ProcessBuilder pb = new ProcessBuilder(args1);
    pb.redirectErrorStream(true);
    try {
    pb.start();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }我发现没有窗口的java程序用install4j打包后不能保证只运行一个实例