如何从另一个程序执行jar并在另一个中显示结果



我有两个java程序。一个是可执行jar,它将向控制台返回helloworld的值。下面列出。。

public class MainClass {

    public static void main(String[] args) {
        helloWorldSubRoutine();
    }
    public static void helloWorldSubRoutine () {
        String helloWorld = "Hello there!";
          System.out.println(helloWorld);
    }
}

另一个程序是一个简单的jframe,它有一个标签,我希望它显示另一个jar的返回或字符串。

最简单的方法是什么?

当一个想法第一次奏效时,你知道什么是真正可怕的。。。你在想你做错了什么。。。

其基本思想是执行一个新的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!");
    }
}

您可以将jar添加到项目中,然后调用返回所需内容的方法。通过这种方式,您将jar视为另一个看不到其实现的类。

请记住,这不会捕获写入控制台的文本。

相关内容

最新更新