我试图在我的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。这是什么原因?在这种情况下,如何通过键盘输入值?
答案 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构造函数。