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

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 に答える
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 に答える