4

我有一个java应用程序。它可以用几个命令行标志启动。我想提供用户“重新启动”应用程序的能力。

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

4

5 回答 5

2

使用 RuntimeMXBean,您可以检索、Classpath、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();
        }
    }
}
于 2010-10-04T12:19:06.033 回答
1

调用新的使用

java -jar appname.jar arg1 arg2  

关闭当前一个使用

System.exit(0);   

在这里你不会遇到保留 arg 的问题

是从 java 应用程序调用命令的示例

于 2010-10-04T12:02:26.690 回答
1

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

如果您只想使用参数启动它一次,然后,如果您在没有参数的情况下重新启动应用程序,希望它使用上一次调用中的参数,请执行以下操作:

public static void main(String[] args) {

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

   // ...

}

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

于 2010-10-04T12:10:38.793 回答
0

它根据用户的操作系统而有所不同,如果你真的想做操作系统跨平台兼容。然后你应该提供启动脚本:Linux 的 shell 像 OS / Windows 的 bat,这些脚本设置类路径和参数。

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

于 2010-10-04T12:21:41.140 回答
0

为什么不重新序列化并在重新启动时从磁盘再次创建对象?

您将需要在一个类中实现Serializable接口来执行此操作。"CommandLineParams"

我认为这是完成您正在尝试做的事情的最结构化的方式。

于 2010-10-04T12:29:50.823 回答