为什么我的java swing操作在src / main / resources中找不到我的图像?

时间:2017-08-31 17:01:21

标签: java eclipse swing maven

我有一张我为浏览按钮下载的图片。我把它放在我的maven项目的src / main / resources文件夹中。在我的浏览操作中,这是我的类代码:

package net.draconia.testcopier.ui.actions;

import java.awt.event.ActionEvent;
import java.net.URL;

import javax.swing.AbstractAction;
import javax.swing.ImageIcon;

import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;

import net.draconia.testcopier.TestCopierController;

@Component
public class Browse extends AbstractAction
{
    private static final long serialVersionUID = 6237458116383473511L;

    private TestCopierController mObjController;

    public Browse(final TestCopierController objController)
    {
        super();

        URL objURL = Browse.class.getResource("./if_8_27829.png");

        putValue(SMALL_ICON, new ImageIcon(objURL));

        setController(objController);

    }

    public void actionPerformed(final ActionEvent objActionEvent)
    {
        getController().browseForBackupFolder();
    }

    protected TestCopierController getController()
    {
        return(mObjController);
    }

    protected void setController(final TestCopierController objController)
    {
        mObjController = objController;
    }
}

问题是当我尝试通过Browse.class.getResource(...)访问图像时,我在构造函数中得到null。我试过" ./"在文件名之前,没有它 - 只是裸文件名,我得到相同的结果。这是我的pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.draconia</groupId>
    <artifactId>reedelseviertestcopier</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Reed Elsevier Test Copier</name>

    <properties>
        spring.version>4.3.2.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
    </build>
</project>

我不知道错误是否在我的pom文件中,为什么在日食中我无法看到图像。我正打算尝试实现我的项目来生成一个可执行的jar,所以我可以尝试在命令行中运行它来生成输出窗口,但是想到它应该至少在eclipse中工作,你知道吗?有什么想法吗?

1 个答案:

答案 0 :(得分:3)

Class.getResource()搜索CLASSPATH。在此之前,它将根据您传入的值构造要使用的绝对资源名称:

  
      
  • 如果名称以'/'('\ u002f')开头,则资源的绝对名称是'/'后面的名称部分。
  •   
  • 否则,绝对名称的格式如下:

         

    modified_pa​​ckage_name / name

         

    其中modified_pa​​ckage_name是此对象的包名称,其中'/'替换为'。' ( '\ u002e')。

  •   

因此,当您调用Browse.class.getResource("if_8_27829.png")时,将搜索CLASSPATH /net/draconia/testcopier/ui/actions/if_8_27829.png,该Browse.class.getResource("/if_8_27829.png")不存在。

运行程序时,需要调用src/main/resources并确保UPDATE在CLASSPATH中。 (我不熟悉maven,所以我不知道它是如何管理的)