Мост SWT_AWT - SWT в задаче Swing - PullRequest
       4

Мост SWT_AWT - SWT в задаче Swing

2 голосов
/ 20 сентября 2010

Я хотел встроить браузер в 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; 
   } 
} 
  1. В Windows это работает,
  2. В Linux мост работает, но ничего не видно. Поэтому я хочу знать, как заставить его работать на Linux.

Ответы [ 3 ]

3 голосов
/ 28 сентября 2010

установите для sun.awt.xembedserver значение true https://bugs.eclipse.org/bugs/show_bug.cgi?id=161911

0 голосов
/ 20 сентября 2010

Если я просто запускаю swt brower и не встраиваю его в canvas. Он может показать веб-страницу в 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();
  }

Он может открыть сайт Google. Но если я использую метод SWT_AWT.new_Shell. Это не хорошо. Я не могу вставить в нее кнопку SWT.

Моя среда: mozilla 1.7.7
gtk: gtk2-2.2.4-19
Linux: Red Hat Enterprise Linux ES выпуск 3 (обновление Taroon 8)
uname -a
2.4.21-47.ELsmp # 1 SMP Ср 5 июля 20:38:41 EDT 2006 i686 i686 i386 GNU / Linux

0 голосов
/ 20 сентября 2010

SWT сильно зависит от нативных библиотек. Дважды проверьте, что вы используете разные и правильные сборки для обеих операционных систем.

И еще раз проверьте, установлен ли Mozilla (Firefox) в системе Linux. SWT.Browser привязывается к собственному механизму рендеринга HTML (Explorer в Windows, Mozilla в системе Linux).

И наконец: проверьте FAQ по SWT: Что мне нужно для запуска браузера SWT в Eclipse в Linux?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...