如何使用apache commons-exec运行java程序?

时间:2013-03-14 17:57:50

标签: java exec apache-commons-exec

我试图在我的java应用程序GUI中动态运行java代码。我尝试了以下代码:

            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)由打印语句组成时;就是这样,

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。这是什么原因?在这种情况下,如何通过键盘输入值?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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构造函数。