浏览器的Panel
package com.browser;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Panel;
import javax.swing.JPanel;
import org.eclipse.swt.SWT;
import org.eclipse.swt.awt.SWT_AWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class SWTPanel extends JPanel {
/**
*
*/
private static final long serialVersionUID = -1089789032409665511L;
DisplayThread displayThread;
private Canvas canvas;
public SWTPanel() {
displayThread = new DisplayThread();
displayThread.start();
canvas = new Canvas();
setLayout(new BorderLayout());
add(canvas, BorderLayout.CENTER);
}
public void addNotify() {
super.addNotify();
Display dis = displayThread.getDisplay();
dis.syncExec(new Runnable() {
public void run() {
Shell shell = SWT_AWT.new_Shell(displayThread.getDisplay(),
canvas);
shell.setLayout(new FillLayout());
final BrowserPanel browser = new BrowserPanel(shell, SWT.NONE);
browser.setLayoutData(BorderLayout.CENTER);
browser.setUrl("http://localhost:8080/test2/index2.html");
}
});
}
}
DisplayThread.java
package com.browser;
import org.eclipse.swt.widgets.Display;
public class DisplayThread extends Thread {
private Display display;
Object sem = new Object();
public void run() {
synchronized (sem) {
display = Display.getDefault();
sem.notifyAll();
}
swtEventLoop();
}
private void swtEventLoop() {
while (true) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
public Display getDisplay() {
try {
synchronized (sem) {
while (display == null)
sem.wait();
return display;
}
} catch (Exception e) {
return null;
}
}
}