This question has been asked on eclipse.newcomer a couple of times now, so I thought it might be worthwhile to put a response in the blogosphere.
How do I display the System.out console in a view in my Eclipse RCP application?
The answer has two parts. To start, you can redirect console output to an arbitrary PrintStream
using System.setOut(somePrintStream);
. The second part is that you need a useful PrintStream
to write on.
It’s relatively easy to make a plug-in that does exactly what we need. Here’s how you construct the view.
package org.eclipse.console.ui.views; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.part.ViewPart; public class LightweightConsoleView extends ViewPart { private Text text; public void createPartControl(Composite parent) { text = new Text(parent, SWT.READ_ONLY | SWT.MULTI); OutputStream out = new OutputStream() { @Override public void write(int b) throws IOException { if (text.isDisposed()) return; text.append(String.valueOf((char) b)); } }; final PrintStream oldOut = System.out; System.setOut(new PrintStream(out)); text.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { System.setOut(oldOut); } }); } public void setFocus() { text.setFocus(); } }