2013-06-18 16 views
5

Ho una classe 'uno' che compila classe 'due' utilizzando i comandiEclipse si blocca sull'input dell'utente

io uso questo codice per eseguire due

Process p2 = Runtime.getRuntime().exec("java two"); 
      BufferedReader in = new BufferedReader(
        new InputStreamReader(p2.getInputStream())); 
      while ((line = in.readLine()) != null) { 
      System.out.println(line); 
      } 
      in.close(); 

ora quando 'due' ha stampe in il suo metodo principale, funziona bene e vengono stampati nella console, ma quando ha un input utente, Eclipse si blocca. quando ho persino rimuovere il loop mentre non mi permette di scrivere nella console

Sto creando una nuova console utilizzando

MessageConsole console = new MessageConsole("", null); 
    console.activate(); 
    ConsolePlugin.getDefault().getConsoleManager() 
      .addConsoles(new IConsole[] { console }); 
    MessageConsoleStream stream = console.newMessageStream(); 
    System.setOut(new PrintStream(stream, true)); 
+2

Si prega di aggiungere un po 'di codice e la versione di Eclipse, in modo che possiamo avere una migliore idea di come questo è tutto l'essere chiamato – Max

risposta

1

Ho avuto un problema simile. Ho esteso MessageConsole (solo per poter avere uno specifico consolePageParticipant) e nel costruttore ho reindirizzato il System.out a un nuovo MessageConsoleStream. Con la prima versione del mio codice l'applicazione RCP si è bloccata, con la seconda versione impiccata.

Già non ricordo come è apparso il codice che si è schiantato/impiccato, ma ho scoperto che non posso reindirizzare l'output prima, che viene visualizzato MessageConsole. Quindi ho usato un nuovo thread per aspettare un po 'di tempo (5 secondi - forse troppo?) Prima del reindirizzamento.

messageConsoleStream = myConsole.newMessageStream(); 

new Thread(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
     } 
     OutputStream out = new OutputStream() { 
      @Override 
      public void write(int b) throws IOException { 
       messageConsoleStream.write(b); 
       oldOut.write(b); 
      } 
     }; 
     System.setOut(new PrintStream(out)); 
     LOGGER.debug("'System.out' is redirected to the console."); //$NON-NLS-1$ 
    } 
}, "Redirect system out to console...").start(); //$NON-NLS-1$ 

Ancora sarebbe bello cambiare Thread.sleep (5000); ad alcuni di attesa fino a quando viene visualizzata la console ...

0

specificare il terminale della linea:. processo p2 = Runtime.getRuntime() exec ("gnome-terminal -x java due"); o Processo p2 = Runtime.getRuntime(). Exec ("xterm -x java two");

questo rende il programma da eseguire in primo piano altrimenti diventa un processo invisibile ...