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

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();

}

The result is, when my input file (tempfile) consisting of printing statements; that is,

public class Sample2 {

public static void main(String[] args) {

System.out.println("It Works..!!");

}

}

it is able to display the results. But if the input file is something like,

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);

}

}

a NumberFormatException is the result. What is the reason for this? How can I input values through keyboard in this case?

解决方案

The DefaultExector() constructor doesn't attach to standard input, so you are not getting any input, and there is nothing to parse. To attach to standard input, create an ExecuteStreamHandler and add it to your DefaultExecutor like this:

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

DefaultExecutor executor = new DefaultExecutor();

executor.setStreamHandler(streamHandler);

If you want to read your input from somewhere else instead of System.in, pass a suitable InputStream object to the PumpStreamHandler constructor.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值