2013-06-18 22 views
5

Mam klasy „jeden”, który kompiluje klasy „dwa” za pomocą poleceńEclipse wywala na wejściu użytkownika

używam tego kodu, aby uruchomić dwa

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

Teraz, gdy „dwa” ma nadruki w jest to główna metoda, działa dobrze i są drukowane w konsoli, ale gdy ma wejście użytkownika, Eclipse ulega awarii. kiedy nawet usunąć pętli while nie pozwala mi pisać w konsoli

tworzę nową konsolę korzystając

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

proszę dodać trochę więcej kodu i wersję Eclipse, więc możemy mieć lepsze wyobrażenie o tym, jak to wszystko jest nazywa – Max

Odpowiedz

1

miałem podobny problem. Rozszerzyłem MessageConsole (tylko po to, aby móc mieć określoną konsolęPageParticipant) iw konstruktorze przekierowałem System.out do nowego MessageConsoleStream. Wraz z pierwszą wersją mojego kodu aplikacja RCP uległa awarii, a druga wersja została zawieszona.

Już nie pamiętam, jak kod, który rozbił się/zawiesił, wygląda, ale okazało się, że nie mogę przekierować wyjścia wcześniej, niż wyświetlana jest MessageConsole. Więc użyłem nowego wątku, aby odczekać jakiś czas (5 sekund - może za dużo?) Przed przekierowaniem.

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$ 

Nadal dobrze byłoby zmienić Thread.sleep (5000); do pewnego poczekaj, aż pojawi konsola ...

0

określić terminal w linii. Proces P2 = Runtime.getRuntime() exec ("gnome-terminal -x java dwa"); lub Proces p2 = Runtime.getRuntime(). Exec ("xterm -x java two");

to sprawia, że ​​program do uruchomienia na pierwszym planie w przeciwnym razie staje się niewidoczny proces ...

Powiązane problemy