javaersummer 2015-01-27 06:01 采纳率: 50%
浏览 1759

在使用JWebBrower 生成图片时,一次生成很多个,线程问题!

在使用JWebBrower 生成图片时,一次生成很多个,非常耗时,同时第一次根据前台调用生成图片,一直没有返回消息,debug一次发现方法一直停留在NativeInterface.runEventPump();处。求大神给解答下,不胜感激!

 public static void takeSnapshot2(final List<Map<String,String>> xllist,final List<Map<String,String>> llist) {
        if(!NativeInterface.isOpen()){
            NativeInterface.open();         
        }
        SwingUtilities.invokeLater(new Runnable()
        { 
            @SuppressWarnings("unchecked")
            public void run()
            {
                Iterator it = xllist.iterator();
                while(it.hasNext()){
                    Map<String,String> map = (Map<String,String>) it.next();
                    new ZpToImage(map.get("url"),map.get("fileName"),0,0, 0,50);
                }
                xllist.clear();
            }
        });
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                Iterator it = llist.iterator();
                while(it.hasNext()){
                    Map<String,String> map = (Map<String,String>) it.next();
                    new ZpToImage(map.get("url"),map.get("fileName"),16,0, 16, 65);
                }
                llist.clear();
            }
        });
        //NativeInterface.runEventPump();
        if (!NativeInterface.isEventPumpRunning()) {
            try{
                //NativeInterface.close() ;
                             //第一次调用时,最后程序的进度一直在此处。debug跳不过去了,也没有异常。
                NativeInterface.runEventPump();
            }catch(Exception e){
                e.printStackTrace() ;
            }
        }
    }   

图片说明

 public ZpToImage(String url,final String fileName, final int x, final int y,final int adjustWidth, final int adjustHeight)
    {
        final StringBuffer jsDimension = new StringBuffer();
        //......
        JPanel mainPanel = new JPanel(new BorderLayout());
        JPanel webBrowserPanel = new JPanel(new BorderLayout());
//      final String fileName = "E:/upload/"+System.currentTimeMillis() + ".jpg";
        final JWebBrowser webBrowser = new JWebBrowser(null);
        webBrowser.setBarsVisible(false);
        webBrowser.navigate(url);
        webBrowserPanel.add(webBrowser, BorderLayout.CENTER);
        mainPanel.add(webBrowserPanel, BorderLayout.CENTER);
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 4, 4));
        webBrowser.addWebBrowserListener(new WebBrowserAdapter()
        {
            // 监听加载进度
            public void loadingProgressChanged(WebBrowserEvent e)
            {
                // 当加载完毕时
                if (e.getWebBrowser().getLoadingProgress() == 100)
                {
/*                  String c = webBrowser.getHTMLContent();
                    System.out.println("========"+webBrowser.getHTMLContent());*/
                    String result = (String) webBrowser.executeJavascriptWithResult(jsDimension.toString());
                    System.out.println(result);
                    int index = result == null ? -1 : result.indexOf(":");
                    NativeComponent nativeComponent = webBrowser.getNativeComponent();
                    Dimension originalSize = nativeComponent.getSize();
                    Dimension imageSize = null;
                    if(result == null){
                        imageSize = new Dimension(800,640);
                    }else{
                         imageSize = new Dimension(Integer.parseInt(result.substring(0, index)), Integer
                                    .parseInt(result.substring(index + 1)));
                    }
                    //Dimension imageSize = new Dimension(1250,1250);
                    imageSize.width = Math.max(originalSize.width, imageSize.width + 50);
                    imageSize.height = Math.max(originalSize.height, imageSize.height + 50);
                    nativeComponent.setSize(imageSize);
                    BufferedImage image = new BufferedImage(imageSize.width, imageSize.height,
                            BufferedImage.TYPE_INT_RGB);
                    nativeComponent.paintComponent(image);
                    nativeComponent.setSize(originalSize);
                    System.out.println(imageSize.width+"==="+imageSize.height);
                    // 当网页超出目标大小时
                    image = image.getSubimage(x, y, imageSize.width-adjustWidth-x, imageSize.height-adjustHeight-y);
                    try
                    {
                        File file = new File(fileName);
                        System.out.println("======"+file.getPath());
                        // 输出图像
                        ImageIO.write(image, "jpg", file);
                    } catch (IOException ex)
                    {
                        ex.printStackTrace();
                    }
                    //System.exit(0);  
                    // 退出操作
                    dispose();
                }
            }
        });
        mainPanel.add(panel, BorderLayout.SOUTH);
        getContentPane().add(mainPanel, BorderLayout.CENTER);
        setSize(800, 600);
        invalidate();
        pack();
        setVisible(false);
    }
  • 写回答

1条回答 默认 最新

  • canhuoqi1401 2017-08-18 02:23
    关注

    NativeInterface.runEventPump();我也是一直卡在这里,题主最后怎么解决的,求搭救

    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题