在java中,如何从jar文件中检索图像?

Mor*_*cai 2 java jar reference

我在将java项目导出到jar(来自Eclipse)时遇到了问题.有一个文件,我已经包含在名为jar的jar中images.它包含我的项目使用的所有图像文件.问题是,我对这些图像的引用仅在项目不是 jar形式时才有效.我无法弄清楚为什么,我想知道是否需要更改图像引用的措辞.这是我正在做的参考图像:

    URL treeURL = null;
    Image tree = null;
    File pathToTheTree = new File("images/tree.png");
    try {
        treeURL = pathToTheTree.toURL();
    } catch (MalformedURLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    try {
        tree = ImageIO.read(treeURL);
    } catch(IOException e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

很可能这是一个简单的问题,因为我是编码的初学者.当这些引用都在jar中时,我需要更改以使这些引用有效吗?

Ern*_*ill 5

这确实很简单:你getResource()java.lang.Class和中使用各种方法java.lang.ClassLoader.例如,在您的应用中,您可以写

treeURL = getClass().getResource("/images/tree.png");
Run Code Online (Sandbox Code Playgroud)

这将images在jar文件根目录的目录中找到该文件.关于这些getResource()方法的好处是,无论文件是否在jar中,它们都可以工作 - 如果images目录是磁盘上的真实目录,这仍然可以工作(只要父images类是类路径的一部分.)