我想将浏览器嵌入到Frame.I中写道
public class MyBrowser{
public static void main(String[] args)
{
final Display display = Display.getDefault();
Frame frm = new Frame("MyBrowser");
Canvas embedded = new Canvas();
frm.add(embedded, BorderLayout.CENTER);
frm.pack();
final Shell composite = SWT_AWT.new_Shell(display, embedded);
composite.setLayout(new FillLayout(SWT.VERTICAL));
final Browser browser = installBrowser(composite, "http://www.baidu.com");
frm.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
e.getWindow().dispose();
//composite.dispose();
// display.dispose();
}
});
JTextField addr = new JTextField(80);
addr.addActionListener(new ActionListener()
{
public void actionPerformed(final ActionEvent e)
{
display.syncExec(new Runnable()
{
public void run()
{
browser.setUrl(((JTextComponent) e.getSource()).getText());
}
});
}
});
frm.add(addr, BorderLayout.NORTH);
frm.setSize(800, 600);
frm.setVisible(true);
while (frm.isDisplayable())
if (!display.readAndDispatch())
display.sleep();
// display.dispose();
}
public static Browser installBrowser(Composite parent, String homeURL)
{
Browser browser = new Browser(parent, SWT.EMBEDDED);
browser.setUrl(homeURL);
return browser;
}
}
答案 0 :(得分:3)
将sun.awt.xembedserver设置为true https://bugs.eclipse.org/bugs/show_bug.cgi?id=161911
答案 1 :(得分:0)
SWT在很大程度上取决于本地库。仔细检查您是否为这两个操作系统使用了不同且正确的版本。
仔细检查Linux系统上是否安装了Mozilla(Firefox)。 SWT.Browser
绑定到本机HTML呈现引擎(Windows上的Explorer,Linux系统上的Mozilla)。
最后:查看SWT常见问题解答:What do I need to run the SWT Browser inside Eclipse on Linux?
答案 2 :(得分:0)
如果我只是运行swt brower并且不将它嵌入画布中。它可以在linux中显示网页。所以我虽然问题出在SWT_AWT桥上。 我的代码附在下面:
public class BrowserClass {
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("Browser Example");
shell.setSize(620, 500);
ToolBar toolbar = new ToolBar(shell, SWT.NONE);
toolbar.setBounds(5, 5, 200, 30);
ToolItem goButton = new ToolItem(toolbar, SWT.PUSH);
goButton.setText("Go");
ToolItem backButton = new ToolItem(toolbar, SWT.PUSH);
backButton.setText("Back");
ToolItem stopButton = new ToolItem(toolbar, SWT.PUSH);
stopButton.setText("Stop");
final Text text = new Text(shell, SWT.BORDER);
text.setBounds(5, 35, 400, 25);
final Browser browser = new Browser(shell, SWT.NONE);
browser.setBounds(5, 75, 600, 400);
Listener listener = new Listener() {
public void handleEvent(Event event) {
ToolItem item = (ToolItem) event.widget;
String string = item.getText();
if (string.equals("Back"))
browser.back();
else if (string.equals("Stop"))
browser.stop();
else if (string.equals("Go"))
browser.setUrl(text.getText());
}
};
goButton.addListener(SWT.Selection, listener);
backButton.addListener(SWT.Selection, listener);
stopButton.addListener(SWT.Selection, listener);
text.addListener(SWT.DefaultSelection, new Listener() {
public void handleEvent(Event e) {
browser.setUrl(text.getText());
}
});
shell.open();
browser.setUrl("http://www.google.com");
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
它可以打开谷歌网站。但是,如果我使用SWT_AWT.new_Shell方法。不行。 我不能在其中嵌入一个swt按钮。
我的环境是:mozilla 1.7.7
gtk:gtk2-2.2.4-19
linux:Red Hat Enterprise Linux ES版本3(Taroon Update 8)
uname -a
2.4.21-47.ELsmp#1 SMP Wed Jul 5 20:38:41 EDT 2006 i686 i686 i386 GNU / Linux