关于向JTextPane插入gif图片的问题 本人做了一个简单的图片发送工具,图片从网络传过来并插入到JTextPane进行显示。不过随着JTextPane插入的图片越来越多,尤其是插入了动态的gif图片后,发现占的cpu越来越高,有时一张gif动画就将cpu撑到了100%,不知道大家有没遇到过这种问题呢 急 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 看看 代碼先 是不是JTextPane是多個呢? 能具体一点儿吗 JTextPane是多個是什么意思? 应该不是图片的问题 是不是你的JTextPane new的太多了 你可以考虑在一个JScrollPane上放多张图片~~ 我也做过多张图片显示的 没有这个问题出现啊 ~~ 都是用的同一个实例啊 对了 我把他放在netBeans中调试的时候 发现每插入一张图片 后台就会多一个叫“image**”什么的线程,把图片清除后线程还存在,另外,不是每张图片插进来都使CPU升高的,有的图片没有影响,有的会提高CPU一点,有的一张便使CPU达到了100% 比如我同事那儿有一张gif图片,一发过来CPU就100% 大家帮我想想办法呀 严重期待中 代码如下:在接收到对方的图片之前,我首先用本地的一张类似于正在加载的图片先提醒用户,等到对方的图片完全传过来之后,再替换本地的这张图片,下面是图片替换的方法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; } 可能是由于你显示动态gif动画的问题,你看看这个网站吧http://www.kcmultimedia.com/gifcanvas/ 是不是你的gif图片太大,另外图片文件没有释放 请问图片文件该如何释放?我另外再描述一个现象,那张占CPU100%的GIF图片被插进来后,其帧的变换速度比在外部用windows图片查看器快了很多,这很不正常 高手请看这一题怎么做 小问题 关于文件操作的问题 有什麽简单方法可以复制一颗树? 最近由C++转JAVA,问一些小问题,希望前辈们指点... 文件流和字符串的问题,帮帮忙.谢谢了. 大家能否帮小弟啊,急死了没有办法,谁有认识上海电信内部的人啊? 求教 我写的播放声音的代码,但是可以读到文件 不能播放,请高手帮忙调试 在html中 <input type="text" name="create_user" maxlength="12" size="12"> 不能限制中文字符个数??? JAVA对象问题? 关于只覆盖了equals方法,没有覆盖hashCode方法的疑问
在接收到对方的图片之前,我首先用本地的一张类似于正在加载的图片先提醒用户,等到对方的图片完全传过来之后,再替换本地的这张图片,
下面是图片替换的方法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;
}
我另外再描述一个现象,那张占CPU100%的GIF图片被插进来后,其帧的变换速度比在外部用windows图片查看器快了很多,这很不正常