0

私は2つのJavaプログラムを持っています。1つは、helloworldの値をコンソールに返す実行可能jarです。以下通り..

public class MainClass {


    public static void main(String[] args) {
        helloWorldSubRoutine();

    }

    public static void helloWorldSubRoutine () {

        String helloWorld = "Hello there!";
          System.out.println(helloWorld);

    }

}

もう1つのプログラムは、別のjarからの戻り値または文字列を表示するラベルが付いた単純なjframeです。

これを行う最も簡単な方法は何ですか?

4

2 に答える 2

1

アイデアが最初に機能するとき、何が本当に怖いか知っています...あなたは自分が何を間違えたのか疑問に思っています...

基本的な考え方は、新しい JVM を実行し、そのプロセスからの出力を読み取ることです。これを行うには、 a を使用して直接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!");
    }

}
于 2013-02-27T04:46:24.907 に答える
0

jar をプロジェクトに追加してから、探しているものを返すメソッドを呼び出すことができます。このようにして、jar を実装が見えない別のクラスとして扱っています。

これは、コンソールに書き込まれたテキストをキャプチャしないことに注意してください。

于 2013-02-26T23:22:45.557 に答える