Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从另一个程序执行jar并在另一个程序中显示结果?_Java_Jar_Return_Executable Jar - Fatal编程技术网

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

Java 如何从另一个程序执行jar并在另一个程序中显示结果?,java,jar,return,executable-jar,Java,Jar,Return,Executable Jar,我有两个java程序。一个是一个可执行jar,它将向控制台返回hello world的值。如下所列 public class MainClass { public static void main(String[] args) { helloWorldSubRoutine(); } public static void helloWorldSubRoutine () { String helloWorld = "Hello the

我有两个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的返回或字符串


最简单的方法是什么?

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


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

你知道什么是真正可怕的,当一个想法第一次奏效的时候……你会感到奇怪,你做错了什么

基本思想是执行一个新的JVM并读取该进程的输出。为此,您可以使用
ProcessBuilder
并直接执行
java

这个例子需要
java
在执行路径中才能工作。此外,Jar正在尝试运行的was位于
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();
        }

    }

}
Main

已执行的“main”类(以及我们正在读取的结果…)


这是一个好主意,但是我需要它与项目完全分开,因为外部源代码可能会在没有源代码的情况下创建一个jar,并且需要我正在编写的这个程序。
public class Main {

    public static void main(String[] args) {
        System.out.println("Hello from the other side!");
    }

}