我目前正在尝试向我的JPanel
添加一个刽子手图像。我已经标记了图像1-10并在每次用户得到错误答案时递增值(这是有效的)。到目前为止,我还没有能够使图像工作。如何正确插入我的图像?
if(!found){
numError++;
String userError = Integer.toString(numError);
String jpg = userError.concat(".JPG");
try{
BufferedImage myImg = ImageIO.read(new File(jpg));
JLabel hangman = new JLabel(new ImageIcon(myImg));
hangman.setSize(200,100);
hangman.setLocation(300, 20);
add(hangman);
}catch(IOException ex){
ex.printStackTrace();
}
}
javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1301)
at HangmanPanel$1.actionPerformed(HangmanPanel.java:73)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
...
答案 0 :(得分:2)
由于此图像将成为嵌入在Jar文件中的应用程序资源,因此必须通过URL访问图像。有关如何形成该URL的概述,请参阅embedded resource info. page 。剩下的唯一棘手的事情是确切地确定要使用的String
。
我将.jpg文件放在src和bin文件夹的主目录中。
好的,如果图片被调用hungman.JPG
,则String
会找到它"/hungman.JPG"
/
告诉类加载器从'类路径的根'进行搜索。File
实例无关,但它始终与URL有关。注意:只要图片在运行时类上,通过URL访问图片就可以在Jar 或中运行 - 应用程序的路径。因此,即使IDE没有自动Jar类和资源,它仍然可以工作。
答案 1 :(得分:1)
尝试使用jpg.then的url直接创建imageIcon JLabel hangman = new JLabel(new ImageIcon(urlOfImageFile));