Java 我的Jar文件赢了';t打开我的.png文件或.wav文件

Java 我的Jar文件赢了';t打开我的.png文件或.wav文件,java,jar,Java,Jar,我知道有几个类似的问题,但大部分答案似乎非常具体。无论如何,我的问题(正如标题所暗示的那样)是我的.jar文件无法打开.png文件或.wav文件(我使用的仅有两种文件类型)。然而,Netbeans可以很好地运行它们。我正在使用导入PNG作为图像图标 ImageIcon sun = new ImageIcon("Files\\Digital_Sun.png"); “文件”在我的项目文件夹中。我试图将这些文件加载到我的.jar中,当我用7zip打开它时,我可以看到它们在那里,但是我似乎无法找到.j

我知道有几个类似的问题,但大部分答案似乎非常具体。无论如何,我的问题(正如标题所暗示的那样)是我的.jar文件无法打开.png文件或.wav文件(我使用的仅有两种文件类型)。然而,Netbeans可以很好地运行它们。我正在使用导入PNG作为图像图标

ImageIcon sun = new ImageIcon("Files\\Digital_Sun.png");
“文件”在我的项目文件夹中。我试图将这些文件加载到我的.jar中,当我用7zip打开它时,我可以看到它们在那里,但是我似乎无法找到.jar中文件的正确url。我已经尝试过像其他人建议的那样使用.getResourceAsStream(),但这对我也不起作用。也许我用错了,但是其他的答案和文档并没有多大帮助。任何帮助都将不胜感激,谢谢

编辑:下面是我使用InputStreams的尝试,也没有任何帮助。有人能告诉我从zip/jar文件读取的正确格式吗

InputStream sunIS = new BufferedInputStream( new FileInputStream("Files\\Digital_Sun.png"));
InputStream overIS = new BufferedInputStream( new FileInputStream("Files\\overcast_digital.png"));
InputStream rainIS = new BufferedInputStream( new FileInputStream("Files\\rain_digital.png"));
InputStream snowIS = new BufferedInputStream( new FileInputStream("Files\\snow_digital.png"));
InputStream fairIS = new BufferedInputStream( new FileInputStream("Files\\digital_fair.png"));
InputStream clearIS = new BufferedInputStream( new FileInputStream("Files\\clear_digital.png"));
InputStream windyIS = new BufferedInputStream( new FileInputStream("Files\\windy_digital.png"));
InputStream nullIS = new BufferedInputStream( new FileInputStream("Files\\weather_unknown.png"));

ImageIcon sun;
ImageIcon overcast;
ImageIcon rain; 
ImageIcon snow;
ImageIcon fair;
ImageIcon clear;
ImageIcon windy;
ImageIcon nullWeather;

public DigitalClock() throws IOException, LineUnavailableException, URISyntaxException { //clock constructor
    super();
    sun = new ImageIcon(ImageIO.read(sunIS));
    overcast = new ImageIcon(ImageIO.read(overIS));
    rain = new ImageIcon(ImageIO.read(rainIS));
    snow = new ImageIcon(ImageIO.read(snowIS));
    fair = new ImageIcon(ImageIO.read(fairIS));
    clear = new ImageIcon(ImageIO.read(clearIS));
    windy = new ImageIcon(ImageIO.read(windyIS));
    nullWeather = new ImageIcon(ImageIO.read(nullIS));

我解决了这个问题,下面的网站对使用.getResourceAsStream()给出了很好的解释


使用完整路径,使用/而不是\\我认为您应该返回使用getResourceAsStream,并向我们展示您用于该路径的代码。很可能您当前的工作目录与您认为的不一样。使用相对路径创建一个文件对象,您可以将其用于ImageIcon,并使用getAbsolutePath()查看它所指的文件。@thorbjornRavnAndersen我刚刚尝试过,但也没有帮助:/您是否检查了getAbsolutePath()的输出以确保其正确?