本人做了一个简单的图片发送工具,图片从网络传过来并插入到JTextPane进行显示。不过随着JTextPane插入的图片越来越多,尤其是插入了动态的gif图片后,发现占的cpu越来越高,有时一张gif动画就将cpu撑到了100%,不知道大家有没遇到过这种问题呢   急

解决方案 »

  1.   

    看看 代碼先     是不是JTextPane是多個呢?
      

  2.   

    能具体一点儿吗  JTextPane是多個是什么意思?
      

  3.   

    应该不是图片的问题     是不是你的JTextPane  new的太多了   你可以考虑在一个JScrollPane上放多张图片~~   我也做过多张图片显示的 没有这个问题出现啊 ~~
      

  4.   

    都是用的同一个实例啊  对了  我把他放在netBeans中调试的时候  发现每插入一张图片  后台就会多一个叫“image**”什么的线程,把图片清除后线程还存在,另外,不是每张图片插进来都使CPU升高的,有的图片没有影响,有的会提高CPU一点,有的一张便使CPU达到了100%    比如我同事那儿有一张gif图片,一发过来CPU就100%    大家帮我想想办法呀    严重期待中
      

  5.   

    代码如下:
    在接收到对方的图片之前,我首先用本地的一张类似于正在加载的图片先提醒用户,等到对方的图片完全传过来之后,再替换本地的这张图片,
    下面是图片替换的方法replaceImage:
        /**
        * target:在该JTextPane中显示,oldly:显示正在加载的图片,newly:对方传过来的图片
        */
        public static void replaceImage(JTextPane target, ImageIcon oldly, ImageIcon newly) {
            Element[] roots = target.getStyledDocument().getRootElements();
            List elements = getAllElements(roots);
            for (int i = 0; i < elements.size(); i++) {
                Element element = (Element) elements.get(i);
                Icon icon = StyleConstants.getIcon(element.getAttributes());
                if (icon != null && icon == oldly) {
                    int s = element.getStartOffset();
                    int e = element.getEndOffset();
                    target.setEditable(true);   //兼顾jdk1.4版本的使用
                      target.select(s, e);   //选中旧图片
                    target.insertIcon(newly);     //用新的图片替换旧图片
                    target.setCaretPosition(target.getDocument().getLength());
                    target.setEditable(false);  //兼顾jdk1.4版本的使用
                      break;
                }
            }
        }    内部方法getAllElements如下:
         private static List getAllElements(Element[] roots) {
            List elements = new LinkedList();
            for (int i = 0; i < roots.length; i++) {
                if (roots[i] == null) {
                    continue;
                }
                elements.add(roots[i]);
                for (int j = 0; j < roots[i].getElementCount(); j++) {
                    Element element = roots[i].getElement(j);
                    elements.addAll(getAllElements(new Element[]{element}));
                }
            }
            return elements;
        }
      

  6.   

    可能是由于你显示动态gif动画的问题,你看看这个网站吧http://www.kcmultimedia.com/gifcanvas/
      

  7.   

    是不是你的gif图片太大,另外图片文件没有释放
      

  8.   

    请问图片文件该如何释放?
    我另外再描述一个现象,那张占CPU100%的GIF图片被插进来后,其帧的变换速度比在外部用windows图片查看器快了很多,这很不正常