1
我在Eclipse中编写了一个程序,当它运行时它工作正常。与jar文件和图像的问题
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);
我的项目结构是这样的:
+src
+qrCodeGenerator
-VisualQrCodeGenerator
-icon.png
-qrCodeImage.png
代码运行正常,没有任何错误在程序中,我可以使用它。但是当我制作.jar文件时,它会让我错误地上传图片。
虽然这是事实,如果资源不存在,你会得到一个NPE。最好的方法是首先'.getResource()',检查结果是否为空,然后是'.openStream()'这个资源(它是一个URL对象)。 – fge
@fge是的,但如果资源不存在,则拥有NPE也可以快速失败。 – Tunaki
当然,但你可以检测到,并抛出一个更好的例外;) – fge