Java 当我导出为可运行的JAR文件时,如何让ImageIcon显示?
好的。我是初学者。我已经在互联网上查看了多个问题,但我无法解决这个问题。我尝试使用URL来显示图像路径,但没有任何效果。虽然,当我使用图像图标显示路径时,图片没有显示出来;但是当我使用URL时,JAR根本没有打开。然后,当我在命令提示符下运行它时,我得到了-Java 当我导出为可运行的JAR文件时,如何让ImageIcon显示?,java,url,jar,runnable,imageicon,Java,Url,Jar,Runnable,Imageicon,好的。我是初学者。我已经在互联网上查看了多个问题,但我无法解决这个问题。我尝试使用URL来显示图像路径,但没有任何效果。虽然,当我使用图像图标显示路径时,图片没有显示出来;但是当我使用URL时,JAR根本没有打开。然后,当我在命令提示符下运行它时,我得到了- Exception in thread "main" java.lang.NullPointerException at javax.swing.ImageIcon.<init>(Unknown Source)
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at Package.ListenerClass.<init>(ListenerClass.java:47)
at Package.Class.main(Class.java:17)
还有我的听众课:
package Package;
import java.awt.Font;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.URL;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class ListenerClass extends JPanel implements MouseListener {
ImageIcon buttonOriginal;
ImageIcon buttonClick;
ImageIcon button100;
ImageIcon button100Click;
ImageIcon button200;
ImageIcon button200Click;
JButton button;
JButton credits;
JButton reset;
JButton cheats;
JLabel secondLabel;
int clicks = 0;
@SuppressWarnings("static-access")
ListenerClass() {
buttonOriginal = new ImageIcon(getClass().getResource("/button.png"));
buttonClick = new ImageIcon(getClass().getResource("/buttonClick.png"));
button100 = new ImageIcon(getClass().getResource("/button100.png"));
button100Click = new ImageIcon(getClass().getResource("/button100Click.png"));
button200 = new ImageIcon(getClass().getResource("/button200.png"));
button200Click = new ImageIcon(getClass().getResource("/button200Click.png"));
button = new JButton(buttonOriginal);
button.setAlignmentX(button.CENTER_ALIGNMENT);
button.setOpaque(false);
button.setContentAreaFilled(false);
button.setBorderPainted(false);
button.setFocusPainted(false);
credits = new JButton("Credits");
credits.setAlignmentX(credits.CENTER_ALIGNMENT);
reset = new JButton("Reset Score");
reset.setAlignmentX(reset.CENTER_ALIGNMENT);
secondLabel = new JLabel("" + clicks);
secondLabel.setAlignmentX(secondLabel.CENTER_ALIGNMENT);
secondLabel.setFont(new Font("DS-Digital", Font.PLAIN, 85) );
button.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
clicks += 1;
secondLabel.setText("" + clicks);
if(clicks == 100) {
button.setIcon(button100);
}
else if(clicks == 200) {
button.setIcon(button200);
}
}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {
if(clicks <=99) {
button.setIcon(buttonClick);
}
else if(clicks >= 100 && clicks <= 199) {
button.setIcon(button100Click);
}
else if(clicks >= 200 && clicks <= 299) {
button.setIcon(button200Click);
}
}
@Override
public void mouseReleased(MouseEvent arg0) {
if(clicks <=99) {
button.setIcon(buttonOriginal);
}
else if(clicks >= 100 && clicks <= 199) {
button.setIcon(button100);
}
else if(clicks >= 200 && clicks <= 299) {
button.setIcon(button200);
}
}
});
credits.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(button, "Made by: Jonah Bobbitt and Wil Carpenter",
null, JOptionPane.PLAIN_MESSAGE);
}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
});
reset.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
clicks = 0;
secondLabel.setText("" + clicks);
button.setIcon(buttonOriginal);
}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
});
this.add(secondLabel);
this.add(button);
this.add(credits);
this.add(Box.createVerticalStrut(10));
this.add(reset);
}
@Override
public void mouseClicked(MouseEvent arg0) {}
@Override
public void mouseEntered(MouseEvent arg0) {}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
}
帮忙
编辑:现在当我使用URL时,当我在eclipse中编译它时,它不再工作,但它显示相同的错误。此外,图片位于构建路径中的文件夹中
再次编辑:它现在正在工作。请参见peeskillet的评论。编辑:
如果映像在包中,则可以仅使用文件名加载资源,而不使用前导斜杠
buttonOriginal = new ImageIcon(getClass().getResource("button.png"));
虽然将资源分开存放在单独的文件夹中是更好的做法。我会拒绝投票,但现在是圣诞节:-你试过这个吗?URL是正确的方法是的,我自己也尝试过,但是如果能解释一下为什么使用URL更好,我会很感激的。因为一旦图像放在jar中,从文件系统读取就不会这样了。ImageIcon构造函数的字符串参数是从工作目录从文件系统中读取。请用一个可运行的罐子试试。我试过这个,但这就是我所说的。执行此操作时,导出时不会显示ImageIcon。它们位于生成路径中的resources文件夹中。是这样的。看到了,非常感谢!它正在工作。您忘记了/path:-应该是/path/button.png,因为您在资源目录中有一个path目录
buttonOriginal = new ImageIcon(getClass().getResource("button.png"));