Java Jar程序在Windows7机器上运行良好,Windows8不会显示自定义图像

Java Jar程序在Windows7机器上运行良好,Windows8不会显示自定义图像,java,image,jar,windows-8.1,Java,Image,Jar,Windows 8.1,好的,所以我不确定你们需要看什么代码来帮助解决这个问题。让我尽可能完整地解释一下。我有一个程序,把它做成了一个jar(包括Images目录以及我们用于背景和按钮的所有自定义图像)。然后我将jar放入安装程序(它是一个可执行的jar,所以只要双击它就可以在任何有Java的计算机上运行)。使用NSIS。安装程序工作得很好,它安装在我的Windows7机器上,我在那里进行了所有编程,并安装了JRE和JDK(1.7)。一切都像冠军!太激动了!不过,我们的很多客户都有Windows 8、vista Mac

好的,所以我不确定你们需要看什么代码来帮助解决这个问题。让我尽可能完整地解释一下。我有一个程序,把它做成了一个jar(包括Images目录以及我们用于背景和按钮的所有自定义图像)。然后我将jar放入安装程序(它是一个可执行的jar,所以只要双击它就可以在任何有Java的计算机上运行)。使用NSIS。安装程序工作得很好,它安装在我的Windows7机器上,我在那里进行了所有编程,并安装了JRE和JDK(1.7)。一切都像冠军!太激动了!不过,我们的很多客户都有Windows 8、vista Mac等。。所以我需要在其他windows机器上测试它,以确保它正常工作。我首先在我的Windows7机器(妻子的电脑)旁边的Windows8.1机器上测试。我使用安装程序安装了java(耶!),然后像在Windows7机器上一样安装了jar。使用了快捷方式(只有Jar本身),程序就出现了,但是它没有显示我在上面使用的任何自定义图像。IE:背景是一个图像,比如关闭最小化按钮、安装按钮(它是wow插件的自动更新程序)甚至是完成的按钮。这些东西都不显示,我也不知道为什么。我尝试将图像更改为使用BuffereImage和imageIO NoJoy,尝试将lookandfeel设置为System look and feel。没有帮助。确保在第一张卡上显示JProgress栏(使用cardlayout),在登录卡上显示用户名和密码JTextFields,以及AutoLogin复选框,在插件卡上添加表和JTextField(用于显示补丁注释)。但是没有后门,没有按钮,没有别的。它甚至允许我点击更新程序后面的东西,就好像背景和按钮根本不存在一样。但这只发生在Windows8上,之后我在vista机器和XP机器上进行了测试。它在vista、xp和Windows7上运行良好,但在Windows8机器上它不显示任何自定义图像(它同样包含在Jar中,我使用绝对路径访问它们),所以有人知道可能发生了什么吗?您希望看到哪种代码来帮助解决此问题?让我感兴趣的是,它在除Windows8之外的所有windows机器上都能正常工作。啊!! 请帮忙

好的,我做了这个测试,从我的更新程序中剪切和粘贴代码。同样的问题也会发生。虽然我想我可能知道现在的问题是什么。尽管我在jar中包含了图像文件,但这可能是我在代码中使用它们的方式,但我仍然不确定如何修复它

import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import javax.imageio.*;


//public static final String BG_IMAGE_PATH = "F:\\Java Programs\\Updater\\src\\com\\dynastyaddons\\updater\\images\\background.png";
private static JFrame rootFrame;

public TestBackgrounds() {
    rootFrame = new JFrame();
    SpringLayout rootLayout = new SpringLayout();

    // setup root frame
    rootFrame.setUndecorated(true);
    rootFrame.setBackground(new Color(0,0,0,0));
    rootFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    rootFrame.setPreferredSize(new Dimension(800,600));
    rootFrame.setTitle("Dynasty Addons Updater");

    // add the background image
    JLabel bg = new JLabel();
    try {           
        Image myBGPic = ImageIO.read(getClass().getClassLoader().getResourceAsStream("background.png"));
        bg = new JLabel(new ImageIcon(myBGPic));
    } catch (IOException ignore) {
        System.out.println("Error: " + ignore.getMessage());
    }
    bg.setLayout(rootLayout);
    rootFrame.add(bg);
    rootFrame.pack();
    rootFrame.setLocationRelativeTo(null);
    rootFrame.setVisible(true);
}

public static void main(String[] args) {
    // Schedule a job for the event dispatch thread.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            TestBackgrounds tb = new TestBackgrounds();
        }
    });
}

请提供一个“最小的,完整的,可验证的例子”,我当然愿意。你到底希望我怎么做?这就是为什么我在帖子中多次问,为了展示这个问题,我到底需要在这里包括什么。把它放到一个文件中,并用同样的问题进行测试。仍然不知道如何修复它,但是thinkin它与图像的位置有关?好的,这样编译它是可行的,但是jar文件不会运行它。很快我就要开始用脑袋撞墙了。我正在编辑我的测试文件,以显示我在程序中的内容,希望它在我的程序中的工作方式与在测试中的工作方式相同。好的,我刚刚切换到正向斜杠,这就成功了。:)阅读另一篇关于它是一个相对路径之类的文章,然后将图像和类文件(以及java文件)一起移动到文件夹中,这一切都正常工作了。现在只需修复setIcon方法,在他们需要时更改按钮,我就可以自由回家了。:)