как перезапустить Java-приложение, запомнив его аргументы командной строки

У меня есть Java-приложение. Это можно запустить с помощью пары флагов командной строки. Я хочу предоставить возможность «перезапустить» приложение пользователем.

В настоящее время мы сохраняем аргументы в контрольном файле, читаем его при перезапуске приложения. Каков наилучший способ перезапустить приложение - как я могу сохранить аргументы командной строки?

Ответы на вопрос(5)

набор аргументов довольно фиксированный, подумайте над написанием небольшого пакетного или командного файла сценария, который ничего не делает, кроме вызова java с этим набором аргументов.

Если вы просто хотите запустить его один раз с аргументами, а затем, если вы перезапустите приложение без аргументов, хотите, чтобы оно использовало аргументы из предыдущего вызова, сделайте что-то вроде этого:

public static void main(String[] args) {

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

   // ...

}

Sidenote: для простоты я использовал повторноargs, Для лучшего кода, если необходимо, скопируйте полученные или сохраненные параметры в другую структуру данных, другой массив, экземпляр Properties, ...

если вы действительно хотите сделать это кроссплатформенной ОС. Затем вы должны предоставить стартовые скрипты: оболочку для Linux, например OS / bat для Windows, эти скрипты устанавливают путь к классам и аргументы.

Я не думаю, что создание кнопки «перезапустить» в приложении является мудрым решением, но если вы хотите что-то вроде «перезапуска затмения», вам следует взглянуть на RuntimeMXBean, который может получить загрузку classpath для вас.

пуска?

Вам нужно будет реализоватьSerializable интерфейс в"CommandLineParams" класс, чтобы сделать это.

Я думаю, что это самый структурированный способ выполнить то, что вы пытаетесь сделать.

Решение Вопроса

вы можете получить 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();
        }
    }
}
 Jayan05 окт. 2010 г., 08:29
Протестировано с использованием Java com.JMXTest -arg1 -arg2 = val2 mx.getInputArguments (): возвращает пустой список. Javadoc говорит - * Возвращает входные аргументы, переданные виртуальной машине Java *, которая не включает аргументы метода <tt> main </ tt>.
 stacker04 окт. 2010 г., 14:53
@StackTrace Я добавил две строки для завершения, я думал, что уже понятно, как их получить. Аргументы Classpath и VM не так легко получить.
 stacker05 окт. 2010 г., 09:02
for (int i = 0; i <args.length; i ++) System.out.println ("args:" + args [i]); // возвращает аргументы в метод main.
 Jayan04 окт. 2010 г., 14:28
Благодарю. RuntimeMXBean.getInputArguments () - не получает аргументы командной строки, переданные методу main. Я печатаю свойства и т.д., переданные в командную строку.

вызвать новое использование

java -jar appname.jar arg1 arg2  

закрыть текущий используя

System.exit(0);   

Здесь вы не столкнетесь с проблемой сохранения арг

Вот пример для вызова команд из Java-приложения

Ваш ответ на вопрос