2015-02-18 6 views
0

Я создаю много специальных java-программ для использования «бизнес-пользователями». Эти программы часто вводят в качестве параметров командной строки.работает java-программа - без особых технических знаний

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

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

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

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

Спасибо.

+0

Что относительно сценария оболочки? Сложно ли это? './batchManager.sh [входные параметры]' – Albert

+0

как насчет командного файла, если вы находитесь в окнах? или если вы хотите общий, затем perl scipt и другие? – SMA

+0

Какой-то GUI-программа, которая позволяет просматривать и редактировать файл, содержащий текст? Я думаю, что такие вещи существуют. – khelwood

ответ

0

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

public static String[] usage(){ 
    return new String[]{ 
     "name", "\\w+", 
     "number", "\\d+" }; 
} 

эта обертка класс может обеспечить общую подсказку для вызова программы с (более или менее) правильные аргументы:

public class Wrapper { 
    public static void main(String[] args) throws Exception { 
     System.out.println(args.getClass()); 
     Class<?> prog = Class.forName(args[0]); 
     Method mu = prog.getMethod("usage"); 
     String[] nps = (String[])mu.invoke(null); 
     Scanner scan = new Scanner(System.in); 
     List<String> pars = new ArrayList<>(); 
     for(int i = 0; i < nps.length; i += 2){ 
      boolean ok = false; 
      while(! ok){ 
       System.out.print(nps[i] + ": "); 
       String line = scan.nextLine().trim(); 
       if(line.matches(nps[i+1])){ 
        ok = true; 
        pars.add(line); 
       } else { 
        System.err.println("input error - please retry"); 
       } 
      } 
     } 
     String[] params = pars.toArray(new String[pars.size()]); 
     Method mm = prog.getMethod("main", args.getClass()); 
     mm.invoke(null, (Object)(params)); 
    } 
} 

обертка должна быть вызвана с именем класса, содержащего (доселе) первичный основной метод. За исключением добавления использования, существующий код не нужно изменять.

NB: Некоторая обработка исключений должна быть добавлена, например. когда Class.forName генерирует исключение ClassNotFoundException.

 Смежные вопросы

  • Нет связанных вопросов^_^