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