1

実行のある時点で、PowerBuilder 命令を含むファイルを実行することを目的とした Java アプリケーションを開発しています。

最初のアイデアは、Java でファイル全体を書き直すことでしたが、よりクリーンな方法があるかもしれません。これは、Java アプリから何かを実行して PowerBuilder を起動し、ファイルの命令を実行することです。

問題は、Java にこのタスクを実行するためのクラスなどがあるかどうかということになります。名前がRunnableCallableなどの可能な解決策を示唆するいくつかのクラスに失敗しました。

PowerScript から Java への翻訳を開始する必要がありますか?

4

2 に答える 2

1
public final class PowerBuilderProcessRunner {

    private PowerBuilderProcessRunner() {}

    private static class StreamHandler implements Callable<Void> {

        private BufferedReader reader;
        private OutputStream outputStream;
        private PrintWriter writer;

        public StreamHandler(InputStream inputStream, OutputStream outputStream) {
            this.reader = new BufferedReader(new InputStreamReader(inputStream));
            this.outputStream = outputStream;
            this.writer = new PrintWriter(this.outputStream);
        }

        @Override
        public Void call() throws Exception {

            String line;
            while ((line = reader.readLine()) != null) {
                writer.println("OUTPUT FROM POWERBUILDER: " + line);
                writer.flush();
                Thread.yield();
            }

            return null;
        }

    }

    // Call this method to start powerbuilder
    public static void spawnProcess(/* arguments go here */) throws Exception {

        ProcessBuilder builder = new ProcessBuilder(
                "powerbuilder.exe", // or similar
                "arg1", // taken from arguments -> must be string
                "arg2", // taken from arguments -> must be string
        );

        Process process = builder.start();

        ExecutorService threadPool = Executors.newFixedThreadPool(2);
        threadPool.submit(new StreamHandler(process.getInputStream(), System.out));
        threadPool.submit(new StreamHandler(process.getErrorStream(), System.err));

        process.waitFor();
    }
}
于 2013-08-28T08:11:15.753 に答える