Java Can';无法为图标加载资源

Java Can';无法为图标加载资源,java,image,icons,jbutton,getresource,Java,Image,Icons,Jbutton,Getresource,我正在设置一个简单的GUI,但我一直在尝试为按钮加载图像 public class Client extends JFrame{ private JTextField field; private JLabel label; private JButton send; private Socket socket; Client(){ super("Messenger"); try { socket

我正在设置一个简单的GUI,但我一直在尝试为按钮加载图像

public class Client extends JFrame{

    private JTextField field;
    private JLabel label;
    private JButton send;
    private Socket socket;

    Client(){
        super("Messenger");
        try {
            socket=new Socket("localhost",65535);
        } catch (IOException e1) {
            System.out.println("can't estabilish connection");
            return;
        }
        setLayout(new FlowLayout());
        label=new JLabel("insert text here");
        add(label);
        field=new JTextField(20);
        add(field);
        ImageIcon ico=new ImageIcon(getClass().getResource("res/richard.png"));
        send=new JButton("send",ico);
        send.setFocusPainted(false);
        add(send);
        send.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new Thread(new Runnable() {
                    public void run() {
                        try {
                            OutputStream out=socket.getOutputStream();
                            String s=field.getText();
                            if (s.equals(".")) {
                                out.write(s.getBytes());
                                socket.close();
                                System.exit(0);
                            }
                            out.write((s+"\n").getBytes());
                            field.setText("");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });
        pack();
        setLocation(500, 400);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new Client();
    }

}
这是一个简单的Messaging应用程序客户端,但我无法在按钮上显示图像。我使用的是
getResource()
而不是ImageIcon构造函数,因为如果我使用它,它不会显示在Jar中。 那么我做错了什么??无论我如何编写URL,它都会给我一个NullPointerException。该图像位于我的项目中的“res”文件夹下

这是堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at Client.<init>(Client.java:27)
    at Client.main(Client.java:58)
线程“main”java.lang.NullPointerException中的异常 位于javax.swing.ImageIcon。(未知源) 在客户端。(Client.java:27) 位于Client.main(Client.java:58) 它在ImageIcon构造函数中启动(如预期)

来自API文档:

绝对资源名称是根据给定的资源名称构造的 使用此算法:

如果名称以“/”(“\u002f”)开头,则的绝对名称 资源是名称中“/”后面的部分否则, 绝对名称的形式如下:modified\u package\u name/name 其中,修改的包名称是此对象的包名称 用“/”代替“.”(“\u002e”)

如果图像位于“res”文件夹下(项目根目录下),则需要斜杠,路径应如下所示:

new ImageIcon(getClass().getResource("/res/richard.png"));

尝试删除
res/
。为了确定映像的位置,可以使用7Zip打开.jar文件。要使用资源,必须使用资源相对于类文件的路径。请告诉我们这件事。我什么都试过了,/res/richard.png,res/richard.png,richard.png。。。该图像位于项目根文件夹的res文件夹中。不知道该做什么,或者我做错了什么根文件夹在这里可能不起作用。移动该文件夹,使其成为类目录的子目录。如果您使用的是Eclipse,请拖放res文件夹,使其成为类路径的分支。@HovercraftFullOfEels耶!太棒了!!但为什么会这样呢?我在错综复杂的文件路径中找不到路。。。