eclipse中添加图片URL,提示空指针

以下是学习过程中,书上的实例代码,博主对着敲了一遍却无法运行。

import java.awt.*;
import java.net.URL;
import javax.swing.*;
public class SwingAndThread extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel jl = new JLabel(); // 声明JLabel对象
	private static Thread t; // 声明线程对象
	private int count = 0; // 声明计数变量
	private Container container = getContentPane(); // 声明容器
	
	public SwingAndThread() {
		setBounds(300, 200, 250, 100); // 绝对定位窗体大小与位置
		container.setLayout(null); // 使窗体不使用任何布局管理器
		URL url = SwingAndThread.class.getResource("/1.gif"); // 获取图片的URL
		Icon icon = new ImageIcon(url); // 实例化一个Icon
		jl.setIcon(icon); // 将图标放置在标签中
		 // 设置图片在标签的最左方
		jl.setHorizontalAlignment(SwingConstants.LEFT);
		jl.setBounds(10, 10, 200, 50); // 设置标签的位置与大小
		jl.setOpaque(true);
		t = new Thread(new Runnable() { // 定义匿名内部类,该类实现Runnable接口
					public void run() { // 重写run()方法
						while (count <= 200) { // 设置循环条件
							 // 将标签的横坐标用变量表示
							jl.setBounds(count, 10, 200, 50);
							try {
								Thread.sleep(1000); // 使线程休眠1000毫秒
							} catch (Exception e) {
								e.printStackTrace();
							}
							count += 4; // 使横坐标每次增加4
							if (count == 200) {
								// 当图标到达标签的最右边,使其回到标签最左边
								count = 10;
							}
						}
					}
				});
		t.start(); // 启动线程
		container.add(jl); // 将标签添加到容器中
		setVisible(true); // 使窗体可视
		// 设置窗体的关闭方式
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new SwingAndThread(); // 实例化一个SwingAndThread对象
	}
}


报错信息如下:

Exception in thread "main" java.lang.NullPointerException
	at java.desktop/javax.swing.ImageIcon.(ImageIcon.java:217)
	at SwingAndThread.(SwingAndThread.java:19)
	at SwingAndThread.main(SwingAndThread.java:51)

但是却可以通过命令行成功运行:

eclipse中添加图片URL,提示空指针_第1张图片

原因在于:

URL url = SwingAndThread.class.getResource("/1.gif"); // 获取图片的URL

eclipse中添加图片URL,提示空指针_第2张图片

观察项目文件夹的目录如上图,有一个src目录,这是JAVA源文件的目录,有一个bin目录,这是JAVA编译后文件(.class文件等)的存放目录。

解决方案如下图 :

eclipse中添加图片URL,提示空指针_第3张图片

即在bin文件夹中添加该图片文件。

你想添加图片的URL,你得从最终生成的.class文件为着手点,不要以.java文件的路径为出发点,因为真正使用的就是.class,不会拿个.java文件就使用,因为java是编译型语言。

 所以当我们想要使用getResource()方法时,就只好把文件放在.class文件相同目录下或者它的父目录中了。

或者,直接用绝对路径,不用getResource()方法,但是使用绝对路径,有违java一次编译,处处运行的精神



你可能感兴趣的:(java,swing,eclipse,添加图片URL)