从 maven 项目运行 jar 时无法加载图像



我看到这个问题已经被问了很多次,但我没有找到任何适合我的解决方案。

我正在尝试加载一个图像并将其显示在JDialog上。当我从Eclipse运行应用程序时,这是有效的,但当我生成可执行JAR(使用Maven(并运行JAR时,JDialog将显示为没有任何图像。

我把我所有的类都放在/src/main/java中,我的图像放在/src/main/resources中。当我打开Maven生成的JAR时,我可以找到我的映像,所以我想问题不在于Maven。

以下是我用来加载图像的代码(我在这里找到它:Eclipse导出的Runnable JAR不显示图像(:

URL url = myclass.class.getResource("/pic.gif");
ImageIcon icon = new ImageIcon(url);

如果有帮助的话,这就是类的全部代码:

public class LoadingWindow {
private JDialog dialog;

public LoadingWindow() {
this.dialog = new JDialog();
this.dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
this.dialog.setTitle("Veuillez patienter");
this.dialog.setSize(300, 200);
URL url = LoadingWindow.class.getResource("/wait.gif");
ImageIcon icon = new ImageIcon(url);
JLabel imageLabel = new JLabel();
imageLabel.setIcon(icon);
imageLabel.setHorizontalAlignment(JLabel.CENTER);
imageLabel.setVerticalAlignment(JLabel.CENTER);
this.dialog.getContentPane().add(imageLabel);
this.dialog.setLocationRelativeTo(null);
this.dialog.setVisible(true);
}
}

谢谢!

您的jar是可执行的jar吗?通过maven生成的jar被称为瘦jar,而不是可执行jar。当你想通过jar运行你的应用程序时,它必须是一个可执行的jar。如果它不是可执行的jar,那么将下面的插件添加到pom.xml中并构建项目。在您的目标文件夹中,将生成2个jar。使用";带有依赖项的jar。jar";。

<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass><Your fully qualified main class name></mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin> 
</plugins>

如果它能帮助任何人,这个解决方案对我来说很有效:

我在/src/main/resources(称为images(中创建了一个新的存储库,将我的图像放在其中。

然后,我就这样加载图像:

URL url = LoadingWindow.class.getResource("/DirInResources/YourPic.png");
ImageIcon icon = new ImageIcon(url);

最新更新