class.getSource

class.getResource()

今天在使用java的getSource方法时遇见了空指针异常

如下图:

在这里插入图片描述

在网上参考了很多文章
主要的意思还是getSource方法是根据class文件来定位的而不是java文件位置,于是我将图片放在class文件所在目录下

在这里插入图片描述
观测结果仍然还是null
后面看见一篇博客(getResource方法具体可见该文章)
发现是自己对于getSource方法的用法还不清楚
类名.class.getResource("")查询的是class文件所在的目录
如下

在这里插入图片描述
而类名.class.getResoure("/")查询的则是根目录也就是bin目录

在这里插入图片描述
所以后面我也就将图片改放在bin目录下
在这里插入图片描述
结果运行出来
如下:

在这里插入图片描述
总结:

遇见图片加载不出来的问题,就考虑下路径是否正确,如果找不出来路径出错,就把路径打印出来,验证其正确性,然后再考虑其他问题

源代码(仅供参考)

package test;
import java.awt.Container;
import java.awt.Image;
import java.net.URL;
import javax.swing.*;
public class SwingAndThread extends JFrame{
	private JLabel jl=new 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.png");
		//URL url=getClass().getResource("/2.jpg");
		System.out.println(url);
		Icon icon=new ImageIcon(url);
		jl.setIcon(icon);//将图标放置在标签中
		//设置图片在标签的左上方
		jl.setHorizontalAlignment(SwingConstants.LEFT);
		jl.setBounds(10,10,200,50);//设置标签位置与大小
		jl.setOpaque(true);
		t=new Thread(new Runnable(){
			public void run() {
				while(count<=200)
				{
					//将标签的横坐标用变量表示
					jl.setBounds(count,10,200,50);
					//((ImageIcon) icon).setImage(((ImageIcon) icon).getImage().getScaledInstance(count,10,Image.SCALE_DEFAULT));
					try {
						Thread.sleep(1000);
					}catch(Exception e)
					{
						e.printStackTrace();
					}
					count+=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();
	}
}

版权声明:本文为qq_43626599原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。