麻烦jar文件和图像

时间:2015-12-12 11:42:34

标签: java image jar

我已经在Eclipse中编写了一个程序,当我在其中运行时它可以正常工作。

public static void initialize() throws IOException{     

    JTextField tfQrText;
    int size = 250;
    File qrFile;
    BufferedImage qrBufferedImage;

    JFrame gui = new JFrame("qrCode Generator");
    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gui.setSize(250, 340);
    gui.setLayout(new BorderLayout());
    gui.setResizable(false);


    File iconFile = new File(VisualQrCodeGenerator.class.getResource("icon.png").getFile());    
    BufferedImage iconBuffered = ImageIO.read(iconFile);
    gui.setIconImage(iconBuffered);

    JButton generate = new JButton("Generate qrCode");
    gui.add(generate,BorderLayout.SOUTH);

    tfQrText = new JTextField();
    PromptSupport.setPrompt("Enter Your Text ... ", tfQrText);
    gui.add(tfQrText,BorderLayout.NORTH);


    qrFile = new File(VisualQrCodeGenerator.class.getResource("qrCodeImage.png").getFile());
    qrBufferedImage = ImageIO.read(qrFile);
    ImageIcon qrImageIcon = new ImageIcon(qrBufferedImage);

    JLabel image = new JLabel();
    image.setIcon(qrImageIcon);

    image.setHorizontalAlignment(JLabel.CENTER);

    gui.add(image,BorderLayout.CENTER);

    gui.setVisible(true);
    generate.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            if(!(tfQrText.getText().equals(""))){
                //create() Method make the QRcode Image
                create();
            }               
        }
    });

错误发生在线上:

BufferedImage iconBuffered = ImageIO.read(iconFile);

当我制作.jar文件时,它说: Opening file with windows CMD to know why it won't open

我的项目结构是这样的:

+src
+qrCodeGenerator
  -VisualQrCodeGenerator
  -icon.png
  -qrCodeImage.png

代码运行正常,程序中没有任何错误,我可以使用它。但是当我把它变成.jar文件时,它会在我上传图像时出错。

1 个答案:

答案 0 :(得分:1)

这是正常的:您无法将类路径资源作为File对象访问。这是因为它嵌入在JAR中。它在IDE中运行,因为资源通常存储在临时文件夹中(而不是存储在JAR中)。

您需要使用InputStream使用Class.getResourceAsStream访问它,然后使用ImageIO.read(InputStream)

因此,请将您的代码更改为:

qrBufferedImage = ImageIO.read(VisualQrCodeGenerator.class.getResourceAsStream("qrCodeImage.png"));

iconBuffered = ImageIO.read(VisualQrCodeGenerator.class.getResourceAsStream("icon.png"));