2014-09-12 6 views
0

Я пытаюсь запустить исполняемый файл linux под названием src2srcml в моем графическом интерфейсе JFrame, который берет исходный файл (C, C++, Java) и преобразует его в XML-файл, который будет использоваться позже. Мой графический интерфейс успешно использует JFileChooser для поиска и выбора исходного файла.Запустить исполняемый файл из JFrame (linux) (eclipse)

В настоящее время я пытаюсь использовать функцию Runtime.getRuntime(). Exec() для запуска исполняемого файла, но до сих пор ничего не происходит. Я могу запустить его из командной строки, используя команды «bash-4.1 $ ./src2srcml --position sum_avg.c -o hooray.c.xml», который берет исходный файл sum_avg.c, преобразует его в XML в новом file hooray.c.xml, но когда я пытаюсь выполнить одни и те же команды в Runtime.getRuntime(). exec() ничего не происходит. Я не особенно знаком с классами Runtime.getRuntime(). Exec() или ProcessBuilder. Нужно ли мне перейти к тому, где первый исполняемый файл? Я также попытался включить путь в первом параметре, вызов исполняемого файла сам, но это тоже не сработало.

//--- 'Run Source Code' Button---// 
    JButton btnRunSourceCode = new JButton("Run Source Code"); 
    btnRunSourceCode.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      if(filePath == null){ 
       textArea.setText("Please Load a source file (C, C++, Java)");     
      } 
      try{ 

       textArea.setText("Converting Source Code to XML"); 
       String[] commands = {"./src2srcml", "--position ", selectedFile.getName(), " -o targetFile.xml"}; 
       Process src2XML = Runtime.getRuntime().exec(commands); 
       src2XML.waitFor(); 
       } 
      catch(Exception exc){/*src2srcml Fail*/} 
      } 
    }); 
    btnRunSourceCode.setBounds(612, 39, 156, 25); 
    contentPane.add(btnRunSourceCode); 

В настоящее время исполняемый файл находится в рабочей области моего проекта (Eclipse). когда я получаю все, что угодно, я хотел бы скомпилировать всю программу в один исполняемый файл, чтобы src2srcml был встроен в мой исполняемый файл и не требуется отдельно. Это возможно?

Заранее благодарим за любые идеи!

ответ

1

Я не знаком с Unix, но вам не нужно называть это через оболочку unix, возможно, вызывая bash или другие команды оболочки с вашим массивом команд? Например ответы here

Другие проблемы

  • Threading: вы в настоящее время просят ваш процесс для запуска на потоке Качели событий, которые в случае успеха приведет ваш GUI полностью замерзнуть и быть неиспользуемой пока процесс заканчивается. Вы должны сделать все вызовы, подобные этому фону, в поток графического интерфейса, например, с помощью объекта SwingWorker.
  • Ошибки GUI: вы вызываете setBounds на свой JButton и добавляете в контейнер, который, вероятно, использует пустой макет, который отмечает это как код от новичка Swing, поскольку это означает, что вы делаете негибкий графический интерфейс очень сложными для обновления или улучшения. Используйте менеджеров компоновки для размещения ваших компонентов. Менеджер раскладки Swing поможет вам показать, как это исправить.

Что касается

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

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

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