Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取和存储Java图标_Java_Swing_Jlabel_Imageicon - Fatal编程技术网

读取和存储Java图标

读取和存储Java图标,java,swing,jlabel,imageicon,Java,Swing,Jlabel,Imageicon,在我的Java应用程序中,我计划使用大量的ImageIcons,它们将显示在JLabels中。单个.png文件的大小约为8KB。运行期间,图标将显示在JLabels中,但标签中显示的图标将经常更改,请使用.setIcon(icon) 我应该在程序启动时一次加载所有图标并将其存储在数组中(长度大于150),还是应该在每次更改图标时加载图标,如下面的代码所示 请注意,JLabels的数量非常小,因此,在给定时刻,只显示选定的图标 ClassLoader cl = getClass().getClas

在我的Java应用程序中,我计划使用大量的
ImageIcon
s,它们将显示在
JLabel
s中。单个
.png
文件的大小约为8KB。运行期间,图标将显示在
JLabel
s中,但标签中显示的图标将经常更改,请使用
.setIcon(icon)

我应该在程序启动时一次加载所有图标并将其存储在数组中(长度大于150),还是应该在每次更改图标时加载图标,如下面的代码所示

请注意,
JLabel
s的数量非常小,因此,在给定时刻,只显示选定的图标

ClassLoader cl = getClass().getClassLoader();
String path = "somePath";
URL url = cl.getResource(path);
Icon icon = new ImageIcon(url);

应用程序将是一个jar文件,其中包含jar中的资源。

这有点陈词滥调,但“除非需要优化,否则不要优化应用程序”。这会使将来的维护更加困难

因为,每一个程序都会随着时间的推移而发展,并且所需的优化可能不是您目前计划进行的那个种优化。您的JLabel可能会增加,或者您可能的图标可能会增加。或者出现其他新功能,您可能需要同时显示所有图标等等

所以,只要把你的代码写得尽可能干净,当你发现确实需要优化时,在衡量瓶颈在哪里之后再做

PS:我这么说是因为你写了“我正计划使用”,所以你没有真正完成应用程序,看到了这么多图标加载的效果


PS2:操作系统和磁盘缓存每天都在改善,所以目前可能已经足够了。

我会选择“启动时加载它们”,除非
OutOfMemeryError
或visible app。减速发生。视情况而定,有多少个图标?2-3或200+@adhg:正如我上面所写的,数组的长度将大于150,因此至少有那么多图标。:)@安德鲁·汤普森:是的,我还担心可能的内存溢出。到目前为止(在日食中)还没有发生。当我多次创建/加载图标时,除了性能问题之外,还有其他缺点吗?。基本上,每当我的GUI更新时(例如,当服务器接收到一个新状态时),更改就会出现。但它是基于回合的。没有每秒更新一次或类似的事情。我这样说。如果一个应用程序。有几百个图标是从8Kb PNG创建的(始终最好引用图像宽度x高度(KB以上),因为压缩图像的文件大小几乎不包含有关其在内存中的大小的信息)看到了OOME,我首先要看看应用程序的其他方面。作为内存泄漏的实际原因。就内存泄漏而言,关于图像,我能想到的唯一可能导致内存泄漏的原因是使用
Image.getScaledInstance(…)
(拼写?)。谢谢你的回答。事实上,我已经在Eclipse中编写了代码,每当有更改时我都会加载图标。但最近我在Stackoverflow(现在没有链接)上读到另一个帖子,有人建议一般在启动时加载图标。因此,我想我可能需要一些提示,例如,优点或缺点。“这会有点陈词滥调,但是……”。它需要经常大声重复