2013-03-14 62 views
0
I am trying to run java code dynamically in my java application GUI. I have tried the following code: 

      Sring tempfile="java -classpath "+wrkdir+"/bin "+runfile; 
      CommandLine cmdLine = CommandLine.parse(tempfile); 
      DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler(); 
      ExecuteWatchdog watchdog = new ExecuteWatchdog(ExecuteWatchdog.INFINITE_TIMEOUT); 
      DefaultExecutor executor = new DefaultExecutor(); 
      executor.setExitValue(1); 
      executor.setWatchdog(watchdog); 
      try { 
       executor.execute(cmdLine, resultHandler); 
      } catch (ExecuteException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      try { 
       resultHandler.waitFor(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

結果是,當我的輸入文件(tempfile)由打印語句組成時;即,如何使用apache commons-exec運行java程序?

public class Sample2 { 
    public static void main(String[] args) {        
       System.out.println("It Works..!!"); 
    } 
} 

它能夠顯示結果。但是如果輸入文件是類似的,

import java.io.DataInputStream; 
    import java.io.IOException; 
    import java.util.*; 
    public class Count 
    { 
    public static void main(String args[]) throws IOException 
    { 
     int n; 
     System.out.println("Enter the number: "); 
     DataInputStream din=new DataInputStream(System.in); 
     String s=din.readLine(); 
     n=Integer.parseInt(s); 
     System.out.println("#"+n); 
    } 
    } 

NumberFormatException是結果。這是什麼原因?在這種情況下,我怎樣才能通過鍵盤輸入數值?

+0

包括例外的stracktrace是一個好主意。 – 2013-03-14 18:22:25

+0

在我的程序中包含堆棧跟蹤的地方?對不起,我對Java不太熟悉。所以,請幫助。 – Salini 2013-03-15 01:26:38

回答

0

您是否認爲輸入文件中的parseInt實際上可能會引發合法的解析異常?

嘗試更改以下行

n=Integer.parseInt(s); 

try { 
n=Integer.parseInt(s); 
} catch(NumberFormatException e) { 
    System.out.println("Unable to parse string into Integer. String: " + s); 
} 
+0

是的,但發生同樣的異常。 – Salini 2013-03-15 01:33:59

0

DefaultExector()構造並不重視標準輸入,這樣你就不會得到任何輸入,並沒有什麼解析。要附加到標準輸入,創建一個ExecuteStreamHandler並將其添加到您的DefaultExecutor這樣的:

ExecuteStreamHandler streamHandler = new PumpStreamHandler(System.out, System.err, System.in); 
DefaultExecutor executor = new DefaultExecutor(); 
executor.setStreamHandler(streamHandler); 

如果你想從別人的而不是System.in某處讀取你的輸入,通過適當的InputStream對象的PumpStreamHandler構造。

+0

錯誤消息是結果,「構造函數DefaultExecutor(ExecuteStreamHandler)未定義」。我現在會做什麼? – Salini 2013-03-15 15:57:33

+0

對不起,我弄錯了。已更新代碼示例。 – 2013-03-15 16:33:15

+0

你能否提一下,在我的代碼中附加這段代碼的位置? – Salini 2013-03-30 19:04:33