#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);
}
}