如何重新启动java应用程序,记住它的命令行参数

问题描述:

我有一个Java应用程序。它可以用几个命令行标志开始。我想提供用户“重新启动”应用程序的能力。如何重新启动java应用程序,记住它的命令行参数

当前我们将参数保存在控制文件中,在重新启动应用程序时读取它。什么是重新启动应用程序的最佳方式 - 如何保留命令行参数?

使用RuntimeMXBean你可以检索,类路径,BOOTCLASSPATH等

package com; 

import java.lang.management.ManagementFactory; 
import java.lang.management.RuntimeMXBean; 

class JMXTest { 
    public static void main(String args[]) { 
     try { 
      for (int i = 0 ; i < args.length ; i++) 
       System.out.println("args :" + args[i]); 

      RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean(); 
      System.out.println("boot CP:" + mx.getBootClassPath()); 
      System.out.println("  CP:" + mx.getClassPath()); 
      System.out.println("cmd args:" + mx.getInputArguments()); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

谢谢。 RuntimeMXBean.getInputArguments() - 不会获取传递给main方法的命令行参数。我打印传递给命令行的属性等。 – Jayan 2010-10-04 12:28:41

+0

@StackTrace我添加了两行来完成,我认为已经很清楚如何获取它们。 Classpath和VM参数并不是那么容易得到。 – stacker 2010-10-04 12:53:03

+0

用java测试com.JMXTest -arg1 -arg2 = val2 mx.getInputArguments():这将返回空列表。 javadoc说 - *返回传递给Java虚拟机 *的输入参数,该参数不包含主要方法的参数。 – Jayan 2010-10-05 06:29:31

使用调用新

java -jar appname.jar arg1 arg2 

接近当前使用

System.exit(0); 

在这里,你会不会面临留住ARG

Here的问题是,例如,从Java应用程序调用命令

无论如何,你必须坚持命令行参数。如果这组参数相当固定,可以考虑编写一个小批处理或shell脚本文件,该文件除了用这组参数调用java之外什么都不做。

如果你只是想带参数一旦启动它,然后,如果重新启动不带参数的应用,想拥有它使用的参数从以前的号召,做这样的事情:

pubic static void main(String[] args) { 

    if (args.length == 0) 
    args = readArgsFromFile(); 
    else 
    writeArgsToFile(); 

    // .. 

} 

旁注:为了简单起见,我重复使用了args。为了更好的代码,如果需要的话,接收或者储存的参数复制到另一个数据结构,另一个数组,一个Properties实例,...

它根据用户的操作系统而有所不同,如果你真的想做到这一点OS跨平台兼容。那么你应该提供启动脚本:用于Linux的shell,比如OS/bat for windows,这些脚本设置了类路径和参数。

我不认为在应用程序中创建“重新启动”按钮是一个明智的决定,但是如果你想要类似“eclipse restart”的东西,你应该看看RuntimeMXBean,它可以为你启动classpath。

为什么不重新序列化并在磁盘上重新创建对象?

您需要在"CommandLineParams"类中实现Serializable接口来完成此操作。

我认为这是最有条理的方式来完成你正在尝试做的事情。