0

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

4

2 回答 2

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);
}
于 2013-03-14T18:10:50.720 回答
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 构造函数。

于 2013-03-15T14:43:56.823 回答