2013-03-14 1 views
0
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(); 
      } 

В результате мой входной файл (tempfile) состоит из заявлений на печать; то естьКак запустить программу java с помощью apache commons-exec?

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

a Ошибка NumberFormatException. Что является причиной этого? Как я могу вводить значения через клавиатуру в этом случае?

+0

в том числе stracktrace исключения является хорошей идеей. –

+0

Где включить этот стек в моей программе? Извините, я не очень хорошо знаком с java. Так что, пожалуйста, помогите. – Salini

ответ

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); 
} 
+0

Да, но возникает одно и то же исключение. – Salini

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 ,

+0

Сообщение об ошибке является результатом: «конструктор DefaultExecutor (ExecuteStreamHandler) не определен». Что мне теперь делать? – Salini

+0

Извините, я получил это неправильно. Обновите образец кода. –

+0

Не могли бы вы упомянуть, где можно прикрепить этот фрагмент кода в моем коде? – Salini