Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我导出为可运行的JAR文件时,如何让ImageIcon显示?_Java_Url_Jar_Runnable_Imageicon - Fatal编程技术网

Java 当我导出为可运行的JAR文件时,如何让ImageIcon显示?

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)

好的。我是初学者。我已经在互联网上查看了多个问题,但我无法解决这个问题。我尝试使用URL来显示图像路径,但没有任何效果。虽然,当我使用图像图标显示路径时,图片没有显示出来;但是当我使用URL时,JAR根本没有打开。然后,当我在命令提示符下运行它时,我得到了-

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"));