gpt4 book ai didi

java - 无法读取 jar 文件中的图像

转载 作者:行者123 更新时间:2023-12-03 23:14:03 26 4
gpt4 key购买 nike

当我构建一个 jar 文件并运行它时,由于找不到 imageicon,它显示空指针异常

new ImageIcon(getClass().getClassLoader().getResource("icons/exit.png")));

这是我运行jar文件时得到的错误

Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at mediaplayer.MediaPlayer.buildtoolbar(MediaPlayer.java:130)
at mediaplayer.MediaPlayer.<init>(MediaPlayer.java:81)
at mediaplayer.MediaPlayer.main(MediaPlayer.java:464)

但是当我在 NetBeans 中运行该项目时,它运行良好

这是我列出 jar 中所有文件时的输出

META-INF/
META-INF/MANIFEST.MF
helliker/
helliker/id3/
icons/
mediaplayer/
Thumbs.db
exit.png
ff1.png
helliker/id3/BinaryParser.class
helliker/id3/CorruptHeaderException.class
helliker/id3/ID3Exception.class
helliker/id3/ID3FieldDataException.class
helliker/id3/ID3Tag.class
helliker/id3/ID3v1Tag.class
helliker/id3/ID3v2ExtendedHeader.class
helliker/id3/ID3v2Footer.class
helliker/id3/ID3v2FormatException.class
helliker/id3/ID3v2Frame.class
helliker/id3/ID3v2Frames.class
helliker/id3/ID3v2Header.class
helliker/id3/ID3v2Tag.class
helliker/id3/MP3Comparator.class
helliker/id3/MP3File.class
helliker/id3/MP3FileFilter.class
helliker/id3/MPEGAudioFrameHeader.class
helliker/id3/NoMPEGFramesException.class
helliker/id3/NullsoftID3GenreTable.class
helliker/id3/Playlist.class
helliker/id3/PlaylistException.class
helliker/id3/XingVBRHeader.class
icons/Thumbs.db
icons/exit.png
icons/ff1.png
icons/label.jpg
icons/openpl.gif
icons/pause1.png
icons/play1.png
icons/playlist.png
icons/rr.png
icons/rr1.PNG
icons/stop.png
label.jpg
mediaplayer/MediaPlayer$1.class
mediaplayer/MediaPlayer$PlaylistFilter.class
mediaplayer/MediaPlayer.class
mediaplayer/PlaylistManager$1.class
mediaplayer/PlaylistManager$MP3Filter.class
mediaplayer/PlaylistManager$PlaylistFilter.class
mediaplayer/PlaylistManager.class
mediaplayer/Settings.class
mediaplayer/TagEditor.class
mediaplayer/Thumbs.db
openpl.gif
pause1.png
play1.png
playlist.png
rr.png
rr1.PNG

最佳答案

问题中缺少一些信息,jar 文件是如何实际构建的,但具有以下目录布局

├── bin
│   ├── com
│   │   └── example
│   │   └── ImageIconTest.class
│   └── icons
│   └── exit.png
└── src
├── MANIFEST.MF
└── com
└── example
└── ImageIconTest.java

以及 ImageIconTest.java 中的以下代码

package com.example;
import javax.swing.ImageIcon;

public class ImageIconTest {
public void run() {
ImageIcon ii = new ImageIcon(getClass().getClassLoader().getResource("icons/exit.png"));
System.out.println(ii);
}
public static void main(String[] args) {
ImageIconTest app = new ImageIconTest();
app.run();
}
}

您可以使用以下文件系统正确运行示例

$ java -classpath bin com.example.ImageIconTest

使用包含以下内容的 MANIFEST.MF 文件:

Manifest-Version: 1.0
Main-Class: com.example.ImageIconTest

你可以把它打包成一个可执行的jar文件,然后从jar文件中运行:

$ jar cvfm app.jar src/MANIFEST.MF -C bin .
$ java -jar app.jar

这两种方法都工作正常,重要的细节是确保图标目录包含在 jar 文件中的正确位置

列出 jar 文件内容时,它应该如下所示:

  0 Tue Nov 06 12:27:56 CET 2012 META-INF/
107 Tue Nov 06 12:27:56 CET 2012 META-INF/MANIFEST.MF
0 Tue Nov 06 12:27:56 CET 2012 com/
0 Tue Nov 06 12:27:56 CET 2012 com/example/
950 Tue Nov 06 12:27:56 CET 2012 com/example/ImageIconTest.class
0 Tue Nov 06 12:00:36 CET 2012 icons/
873 Tue Nov 06 12:00:36 CET 2012 icons/exit.png

记下图标目录的位置。

关于java - 无法读取 jar 文件中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13249613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com