Swing下如何利用SWT调用IE
浏览器的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;}}}
参考http://blog.csdn.net/fafey/article/details/721988