Andy_zjf 2015-07-16 09:28 采纳率: 0%
浏览 4334

执行到 NativeInterface.runEventPump 页面卡死

最近公司要做一个C/S架构的系统,需要一个swing的浏览器,在网上找到了一段代码,不明白单独运行打开的时候没有问题,但是将浏览器绑定到一个组件上,点击组件打开就页面卡死,不会动了,求指教,代码如下:
Swing浏览器:

import java.awt.BorderLayout;

import javax.swing.JFrame;  
import javax.swing.JPanel;  
import javax.swing.JScrollPane;  
import javax.swing.ScrollPaneConstants;  
import javax.swing.SwingUtilities;  

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

public class ReportPreviewUtil extends JPanel {  

    private static final long serialVersionUID = 1L; 

    private static ReportPreviewUtil reportPreviewUtil ;

    static String name ;

    static String URL ;

    public static ReportPreviewUtil getInstance(String title,String url){
        name = title;
        URL = url ;
        if(null == reportPreviewUtil){
            reportPreviewUtil = new ReportPreviewUtil();
        }
        return reportPreviewUtil ;
    }

    static String url ;

    public ReportPreviewUtil() {  

        super(new BorderLayout());  
        JScrollPane webBrowserPanel = new JScrollPane();  
        webBrowserPanel.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);  
        final JWebBrowser webBrowser = new JWebBrowser();  

        webBrowser.setBarsVisible(false);  
        webBrowser.navigate(URL);  
        add(webBrowser, BorderLayout.CENTER);  
    }  

    public static void get() {  
        UIUtils.setPreferredLookAndFeel();  
        NativeInterface.open();  
        SwingUtilities.invokeLater(new Runnable() {  
            public void run() {  
                JFrame frame = new JFrame(name);  
                frame.setUndecorated(true);// 禁用此窗体的装饰  
                frame.setLocationRelativeTo(null);//居中显示  
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
                frame.getContentPane().add(new ReportPreviewUtil(), BorderLayout.CENTER);  

                frame.setSize(938, 614);  

                frame.setLocationByPlatform(true);  
                frame.setVisible(true);                  
            }  
        });  
        NativeInterface.runEventPump();  
    }  

    public static void main(String[] args) {
        ReportPreviewUtil.getInstance("", "http://www.baidu.com").get();
    }
}  

按钮组件绑定后,调用:

 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
        ReportPreviewUtil.getInstance("", "http://www.baidu.com").get();
    }

在ReportPreviewUtil中的main方法运行正常,通过按钮执行就页面卡死,为什么呢?

  • 写回答

4条回答

  • JonsonJiao 2015-07-16 11:49
    关注

    SWING是单线程的,你还是将get方法中的内容用thread包一下就可以了。如下:

    new Thread(){
                @Override
                public void run() {
     UIUtils.setPreferredLookAndFeel();  
            NativeInterface.open();  
            SwingUtilities.invokeLater(new Runnable() {  
                public void run() {  
                    JFrame frame = new JFrame(name);  
                    frame.setUndecorated(true);// 禁用此窗体的装饰  
                    frame.setLocationRelativeTo(null);//居中显示  
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
                    frame.getContentPane().add(new ReportPreviewUtil(), BorderLayout.CENTER);  
    
                    frame.setSize(938, 614);  
    
                    frame.setLocationByPlatform(true);  
                    frame.setVisible(true);                  
                }  
            });  
            NativeInterface.runEventPump();  
                    }
            }.start();
    
    评论

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多