2013-08-28 129 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服務調用調用它。