我有2个java程序。一个是可执行jar,它将hello world的值返回给控制台。列在下面..
public class MainClass {
public static void main(String[] args) {
helloWorldSubRoutine();
}
public static void helloWorldSubRoutine () {
String helloWorld = "Hello there!";
System.out.println(helloWorld);
}
}
另一个程序是一个带有标签的简单jframe,我希望它能显示另一个jar的返回或字符串。
最简单的方法是什么?
答案 0 :(得分:1)
你知道什么是真正可怕的,当一个想法第一次工作时......你会想知道你做错了什么......
基本思想是执行新的JVM并从该进程读取输出。为此,您可以使用ProcessBuilder
并直接执行java
。
此示例需要java
在执行路径中才能工作。此外,Jar正在尝试运行在dist
目录中,您可能需要更改此内容;)
<强>执行人强>
这将启动Java,执行所需的Jar文件并阅读响应。
public class RunJava {
public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("java", "-jar", "dist/RunJava.jar");
pb.redirectErrorStream();
try {
Process p = pb.start();
InputStreamReader isr = new InputStreamReader(p.getInputStream());
p.waitFor();
isr.join();
System.out.println("Process said [" + isr.getText() + "]");
} catch (Exception exp) {
exp.printStackTrace();
}
}
public static class InputStreamReader extends Thread {
private InputStream is;
private String text;
public InputStreamReader(InputStream is) {
this.is = is;
start();
}
public String getText() {
return text;
}
@Override
public void run() {
StringBuilder sb = new StringBuilder(64);
int value = -1;
try {
while ((value = is.read()) != -1) {
sb.append((char)value);
}
} catch (IOException exp) {
exp.printStackTrace();
sb.append(exp.getMessage());
}
text = sb.toString();
}
}
}
主要强>
已执行的“主”类(以及我们正在阅读的结果......)
public class Main {
public static void main(String[] args) {
System.out.println("Hello from the other side!");
}
}
答案 1 :(得分:0)
您可以将jar添加到项目中,然后调用返回所需内容的方法。通过这种方式,您将jar视为另一个您无法看到实现的类。
请记住,这不会捕获写入控制台的文本。