2013-06-18 17 views
5

Tôi có một lớp 'một' mà biên dịch lớp 'hai' sử dụng lệnhEclipse treo trên đầu vào người sử dụng

tôi sử dụng mã này để chạy hai

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

Bây giờ khi 'hai' có bản in trong phương pháp chính của nó, nó hoạt động tốt và chúng được in trong giao diện điều khiển nhưng khi nó có một đầu vào người dùng Eclipse bị treo. khi tôi thậm chí loại bỏ các vòng lặp trong khi nó không cho phép tôi viết trong giao diện điều khiển

tôi đang tạo ra một giao diện điều khiển mới sử dụng

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

Vui lòng thêm một số mã hơn, và các phiên bản của nhật thực toàn phần, vì vậy chúng ta có thể có một ý tưởng tốt hơn về cách này là tất cả là gọi là – Max

Trả lời

1

Tôi đã có một vấn đề tương tự. Tôi mở rộng MessageConsole (chỉ để có thể có một consolePageParticipant cụ thể) và trong constructor tôi đã chuyển hướng System.out sang một MessageConsoleStream mới. Với phiên bản đầu tiên của mã của tôi, ứng dụng RCP đã bị lỗi, với phiên bản thứ hai nó bị treo.

Tôi chưa nhớ mã đã bị treo/treo như thế nào, nhưng tôi phát hiện ra rằng tôi không thể chuyển hướng đầu ra sớm hơn, MessageConsole được hiển thị. Vì vậy, tôi đã sử dụng một chuỗi mới để chờ một thời gian (5 giây - có thể quá nhiều?) Trước khi chuyển hướng.

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$ 

Vẫn có thể thay đổi Thread.sleep (5000); chờ đợi cho đến khi bàn điều khiển được hiển thị ...

0

chỉ định Thiết bị đầu cuối trong dòng: Quy trình p2 = Runtime.getRuntime(). exec ("gnome-terminal -x java two"); hoặc Quy trình p2 = Runtime.getRuntime(). Exec ("xterm -x java two");

điều này làm cho chương trình chạy trong foreground nếu không nó sẽ trở thành một quá trình vô hình ...

Các vấn đề liên quan