从Java应用程序启动PowerScript

从Java应用程序启动PowerScript,java,powerbuilder,interaction,Java,Powerbuilder,Interaction,我正在开发一个Java应用程序,该应用程序在执行过程中的某个时刻打算运行一个包含PowerBuilder指令的文件 第一个想法是用Java重写整个文件,尽管可能有更干净的方法——这是从Java应用程序中执行一些东西来启动PowerBuilder来执行文件的指令 问题是Java中是否有一些类或类似的类来执行此任务-我已经浏览了一些类,这些类的名称建议了一种可能的解决方案,例如or,但没有成功 我应该开始从PowerScript转换为Java吗?公共最终类PowerBuilderProcessRun

我正在开发一个Java应用程序,该应用程序在执行过程中的某个时刻打算运行一个包含PowerBuilder指令的文件

第一个想法是用Java重写整个文件,尽管可能有更干净的方法——这是从Java应用程序中执行一些东西来启动PowerBuilder来执行文件的指令

问题是Java中是否有一些类或类似的类来执行此任务-我已经浏览了一些类,这些类的名称建议了一种可能的解决方案,例如or,但没有成功

我应该开始从PowerScript转换为Java吗?

公共最终类PowerBuilderProcessRunner{
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();
    }
}
专用PowerBuilderProcessRunner(){} 私有静态类StreamHandler实现可调用{ 专用缓冲读卡器; 私有输出流输出流; 私人版画作家; 公共StreamHandler(InputStream InputStream、OutputStream OutputStream){ this.reader=新的BufferedReader(新的InputStreamReader(inputStream)); this.outputStream=outputStream; this.writer=新的PrintWriter(this.outputStream); } @凌驾 public Void call()引发异常{ 弦线; 而((line=reader.readLine())!=null){ writer.println(“POWERBUILDER的输出:“+line”); writer.flush(); 螺纹屈服强度(); } 返回null; } } //调用此方法以启动powerbuilder 公共静态void spawnProcess(/*参数转到此处*/)引发异常{ ProcessBuilder=新的ProcessBuilder( “powerbuilder.exe”、//或类似文件 “arg1”,//取自参数->必须是字符串 “arg2”,//取自参数->必须是字符串 ); Process=builder.start(); ExecutorService线程池=Executors.newFixedThreadPool(2); submit(新的StreamHandler(process.getInputStream(),System.out)); submit(新的StreamHandler(process.getErrorStream(),System.err)); process.waitFor(); } }
另一种选择是将Powerscript代码构建到web服务中,并通过常规web服务调用调用它。

查看java运行时中的ProcessBuilder和Process类:)非常感谢,Lars。看起来棒极了,还有很多新东西需要我学习:-)