Du willst anscheinend echt alles vorgekaut. Und selbst wenn man dir Code in die Hand gibt, der schon genau das macht, was du möchtest, kommst du wieder und verstehst es nicht, weil du dich nicht damit auseinandergesetzt hast.

Allein schon dein erster Post hätte dich eigentlich verraten sollen:

ich brauche eine SWT Klasse, die nicht blockierend ist
Das heißt eigentlich schon, du möchtest etwas, ohne etwas dafür zu tun.

Ich hab dir aus meinen bisherigen Beispielen aber trotzdem mal schnell eine einzige Klasse, wie dus gern hättest, die genau das macht, was du möchtest, zusammenkopiert. Etwas, das jeder geschafft hätte, wenn er sich ein paar Stunden mit SWT (Java vorausgesetzt) beschäftigt hätte.

Code:
import java.io.OutputStream;
import java.io.PrintStream;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class OutputWindow {

	private static Display display = Display.getDefault();
	private Shell sShell = null;

	private Button button1 = null;
	private Button button2 = null;

	private Text text = null;
	
	public static void main(String[] args) {
		OutputWindow thisClass = new OutputWindow();
		thisClass.createSShell();
		thisClass.sShell.open();

		while (!thisClass.sShell.isDisposed()) {
			if (!display.readAndDispatch())
				display.sleep();
		}
		display.dispose();
	}

	private void createSShell() {
		sShell = new Shell();
		button1 = new Button(sShell, SWT.PUSH);
		button1.setText("Button 1");
		button1.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		button1.addSelectionListener(new SelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				System.out.println("Button 1 pressed.");
			}
	
			public void widgetDefaultSelected(SelectionEvent e) {
			}
		});
		button2 = new Button(sShell, SWT.PUSH);
		button2.setText("Button 2");
		button2.addSelectionListener(new SelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				System.out.println("Button 2 pressed.");
			}
	
			public void widgetDefaultSelected(SelectionEvent e) {
			}
		});
		button2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
		text = new Text(sShell, SWT.MULTI|SWT.WRAP|SWT.V_SCROLL);
		text.setEditable(false);
		text.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
		PrintStream p = new PrintStream( 
				  new OutputStream() { 
				    public void write( int b ) { 
				    	text.append("" + (char)b ); 
				    } 
				  } 
				);
		System.setOut(p);
		GridData gridDataText = new GridData(GridData.FILL_BOTH);
		gridDataText.horizontalSpan = 2;
		text.setLayoutData(gridDataText);
		GridLayout gridLayout = new GridLayout();
		sShell.setLayout(gridLayout);
		gridLayout.numColumns = 2;
	}
}
Es ist ein einfaches Fenster mit 2 Buttons, die das Fenster mit Text füllen, sobald sie gedrückt werden.

Warum ich es trotzdem tue? Keine Ahnung, weil ich nett bin vielleicht. Aber diese Dreistigkeit, regt mich schon etwas auf.

mfg, christian