Как получить вывод любого проекта по событию нажатия кнопки

#java #swing

#java #swing

Вопрос:

Я работаю над формой Jframe в NetBeans. На самом деле моя проблема в том……… У меня есть список, кнопка, текстовое поле и текстовая область. В списке есть много проектов (например, Update, Sum). Когда я выбираю проект из списка, ввод этого списка будет показан в текстовом поле (например Update.jar , Sum.jar ) . Когда я выполняю jar-файл, вывод jar-файла должен отображаться в текстовой области. Как я могу это сделать. Кто-нибудь, пожалуйста, помогите мне. Заранее спасибо.

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

 try{
 String a= String.valueOf(jList1.getSelectedValue());

jTextArea1.setText(String.valueOf(Runtime.getRuntime().exec("java -jar "  a ".jar")));

        } catch (Exception e) {
            System.out.println(e);
    }                                        
}
 

Код Sum.jar

  package sum;

 public class Sum {

 public static void main(String[] args) {

 int a=10,b=90;

 int s=a b;

 System.out.println("Sum of two numbers:" s);    

 }
}
 

Комментарии:

1. что на самом деле означает «вывод этого проекта»? вы говорите о выполнении файлов * .jar?

2. Вы должны попытаться отредактировать свой вопрос, неясно, в чем заключается ваша реальная проблема

3. @eis когда я запускаю jar-файл проекта «sum» в командной строке, я получаю вывод «сумма двух чисел равна 100». Но я хочу, чтобы этот вывод был в JTextArea.

4. Вы пробовали объявлять свою сумму общедоступной в основном классе, чтобы другие проекты могли получить к ней доступ?

5. Кто-то действительно поддержал это? :/

Ответ №1:

Я думаю, это то, что вы хотите сделать. Этот метод запускает файл jar и возвращает его вывод.

 public String getOutputOf(String jarfile) throws IOException{
    ProcessBuilder builder = new ProcessBuilder ("java", "-jar",  jarfile); 
    builder.redirectErrorStream(true); 
    Process process = builder.start();             
    BufferedReader reader = new BufferedReader (new InputStreamReader(process.getInputStream())); 
    StringBuilder sb = new StringBuilder();
    String line = "";
    while ((line = reader.readLine()) != null) {
        sb.append(line   "n");
    }
    return sb.toString();
}
 

Комментарии:

1. Большое Вам спасибо @ArcticLord

Ответ №2:

Я сделаю все возможное, чтобы ответить вам.

Итак, вы хотите выполнить два файла jar, «Sum.jar » и «Update.jar «, и получить их выходные данные и поместить в JTextArea?

Ну, в вашем решении есть две части.

Во-первых, вы можете запускать файлы jar нажатием кнопки с помощью Desktop API.

Например,

 Desktop.getDesktop().open(new File(yourfilename));
 

Это были файлы запуска из кода кнопки.

Для «Sum.jar » и «Update.jar «, вы можете сделать так, чтобы при действии они вычисляли то, что вы хотите, чтобы они вычисляли, и выводили выходные данные в текстовый файл.

Например:

 FileWriter fileWriter;
        try {
            fileWriter = new FileWriter("Output.txt");
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            bufferedWriter.write(yourOutput);
            bufferedWriter.close();

        } catch (IOException ex) {
        }
 

Затем вы можете заставить JTextArea сканировать текстовый файл и выводить его в JTextArea.

Например:

         try {
String content = new Scanner(new File("Output.txt")).useDelimiter("\Z").next();
jTextArea.setText(content);
        } catch (FileNotFoundException ex) 
        }
 

Надеюсь, я помог!

Комментарии:

1. Помогли ли вам мои объяснения и примеры кода решить вашу проблему @abcd

2. Я пытаюсь это сделать. Спасибо

3. Кроме того, не могли бы вы, пожалуйста, поделиться своим кодом для «Sum.jar » и «Update.jar «? Так мне было бы легче помочь тебе.

4. Ошибка: недопустимый или поврежденный jar-файл

5. Тогда, что это проблема вашего файла jar, не могли бы вы поделиться кодом поврежденного файла jar?

Ответ №3:

  private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){                                    
 try{
  String a= String.valueOf(jList1.getSelectedValue());
   ProcessBuilder builder = new ProcessBuilder ("java", "-jar",  a ".jar"); 
   builder.redirectErrorStream(true); 
   Process process = builder.start();         
   BufferedReader reader = new BufferedReader (new InputStreamReader(process.getInputStream())); 
    StringBuilder sb = new StringBuilder();
    String line = "";
    while ((line = reader.readLine()) != null)
    {
      sb.append(line   "n");
    }
    jTextArea1.setText(sb.toString());
    }
   catch (Exception e) {
      System.out.println(e);
   }                                        
  }