首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JWebBrowser DJ本机Swing freeze图形用户界面

JWebBrowser DJ本机Swing freeze图形用户界面
EN

Stack Overflow用户
提问于 2016-10-22 19:40:34
回答 1查看 804关注 0票数 0

这是我从http://djproject.sourceforge.net/ns/documentation/Snippets.html得到的示例,只做了一点修改。

代码语言:javascript
复制
package View;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BorderFactory;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import chrriis.common.UIUtils;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;

/**
 * @author Christopher Deckers
 */
public class GoogleMaps extends JPanel {

  public GoogleMaps() {
    JPanel webBrowserPanel = new JPanel(new BorderLayout());
    webBrowserPanel.setBorder(BorderFactory.createTitledBorder("Native Web Browser component"));
    final JWebBrowser webBrowser = new JWebBrowser();
    webBrowser.navigate("http://www.google.com");
    webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
    add(webBrowserPanel, BorderLayout.CENTER);
    // Create an additional bar allowing to show/hide the menu bar of the web browser.
    JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));
    JCheckBox menuBarCheckBox = new JCheckBox("Menu Bar", webBrowser.isMenuBarVisible());
    menuBarCheckBox.addItemListener(new ItemListener() {
      public void itemStateChanged(ItemEvent e) {
        webBrowser.setMenuBarVisible(e.getStateChange() == ItemEvent.SELECTED);
      }
    });
    buttonPanel.add(menuBarCheckBox);
    add(buttonPanel, BorderLayout.SOUTH);
  }
}

然后在另一个JFrame中,我尝试通过单击按钮打开此浏览器:

代码语言:javascript
复制
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        GoogleMaps maps = new GoogleMaps();
        UIUtils.setPreferredLookAndFeel();
        NativeInterface.open();
        JFrame frame = new JFrame("DJ Native Swing Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(maps, BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

        NativeInterface.runEventPump();
    }

但是它冻结了我的图形用户界面。在这种情况下我应该怎么做?

任何指点都会有帮助

EN

回答 1

Stack Overflow用户

发布于 2018-04-20 18:37:20

NativeInterface.runEventPump()函数是一个阻塞函数。它应该在另一个线程中运行。

在您的情况下,它可以像这样解决:

代码语言:javascript
复制
new Thread(new Runnable() {
        @Override
        public void run() {
            if (!NativeInterface.isEventPumpRunning())
                NativeInterface.runEventPump();
        }
    }).start();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40191708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档