Java 图标常量 - 静态常量可以吗?

标签 java icons constants

我在整个应用程序中使用了很多图标 - 让我们以确定/取消图标为例。目前它们可能是一个勾号和一个十字(tick.png,cross.png),但我可能想在未来替换它们。另外,我想将资源路径保存在一个地方。

这样可以吗

public class Icons {
    public static Icon OK = new ImageIcon(Icons.class.getResource("/icons/tick.png");
    public static Icon CANCEL = new ImageIcon(Icons.class.getResource("/icons/cross.png");
}

或者我应该用不同的方式来做这件事吗?我不介意在运行时依赖图像文件的存在,因为它们在 .jar 中

解决方案

我使用了 Bent 的初始化思想,并将常量设置为 final:

public final class Icons {
    private static final Logger logger = Logger.getLogger(Icons.class);

    public static final Icon OK = icon("/icons/add.png");
    public static final Icon CANCEL = icon("/icons/cancel.png");

    private static Icon icon(String path) {
        URL resource = Icons.class.getResource(path);
        if(resource==null) {
            logger.error("Resource "+path+" does not exist");
            return new ImageIcon();
        }
        return new ImageIcon(resource);
    }
}

最佳答案

我看到了两个问题,都可以接受:

  1. 如果您的图标找不到或由于某些原因无法加载,将很难调试。在静态初始值设定项中运行的代码可能很棘手,因为很容易“丢失”异常。
  2. 该类可能永远不会被卸载,因此图标使用的资源永远不会被释放。

如果您可以确保图标始终存在并且甚至可以通过将初始化放在静态初始化程序 block 中并添加良好的异常处理和日志记录来解决,那么第 1 条可能是可以接受的。

数字 2 可能是可以接受的,因为图标通常在应用程序的整个运行时使用,并且它们不会在应用程序退出之前很久就被释放。

总而言之,我认为这很好。

关于Java 图标常量 - 静态常量可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/369348/

相关文章:

java - 无法在不同的机器上运行独立的 Java Swing 应用程序

java - 当子对象引用父对象时对象销毁

jquery - 如何使 jQueryUI 图标显示为禁用?

android - Google Play,应用程序图标错误

c++ - const struct 的指针成员

java - 使用 width 和 max-width 在 JOptionPane 中换行文本

java - GSON 解析 JSON 数组

javascript - 如何获取 fancytree 中某个节点的所有子节点?

c++ - 变量分配和文字常量之间的区别?

android - 在 XML 定义的数组中使用 Java 常量