无法为Icon加载资源

时间:2015-05-26 15:08:20

标签: 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=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();
    }

}

它是一个简单的应用程序的客户端,但我无法在按钮上显示图像。我使用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)

它在ImageIcon构造函数中发起(如预期的那样)。

1 个答案:

答案 0 :(得分:0)

来自java.lang.Class#getResource API文档:

  

从给定的资源名称构造绝对资源名称   使用这个算法:

     

如果名称以'/'('\ u002f')开头,则的绝对名称为   资源是'/'后面的名称部分。 ,否则下,   绝对名称具有以下形式: modified_pa​​ckage_name / name   其中modified_pa​​ckage_name是此对象的包名称   用'/'代替'。' ( '\ u002e')。

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

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