2013-08-28 24 views
1

我正在开发一个Java应用程序,该应用程序在其执行的某个时刻旨在运行包含PowerBuilder指令的文件。从Java应用程序启动PowerScript

第一个想法是用Java重写整个文件,虽然可能有一个更简洁的方法来执行此操作 - 这是关于从Java应用程序执行某些内容来启动PowerBuilder来执行文件的说明。

的问题涉及到是否可以有一些类或类似Java中执行此任务的 - 我已经经历了一些类的名字提出了一个可能的解决方案,如RunnableCallable失败了。

我应该从PowerScript转换到Java吗?

回答

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(); 
    } 
} 
+0

看看来自java运行库的ProcessBuilder和Process类:) –

+0

感谢百万,Lars。 看起来太棒了 - 还有很多新的东西让我学习:-) –

1

另一种替代方法是将Powerscript代码构建到Web服务中并通过常规Web服务调用调用它。