我正在阅读一本关于java编程的书。如果我不明白它正在加载一些图像或其他东西,那么这就是代码
Toolkit tk = Toolkit.getDefaultToolkit();
image = tk.getImage(getURL("castle.png"));
什么是获取URl我想告诉它实际上是什么形象?
当我运行它时,如何找到图像我得到这个错误 -
Uncaught error fetching image:
java.lang.NullPointerException
这是完整的代码 -
package randomshapes;
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.net.*;
public class RandomShapes extends JFrame{
private Image image;
public static void main(String [] args){
new RandomShapes();
}
public RandomShapes(){
super("DrawImage");
setSize(600,600);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Toolkit tk = Toolkit.getDefaultToolkit();
image = tk.getImage(getURL("castle.png"));
}
private URL getURL(String filename){
URL url = null;
try{
url = this.getClass().getResource(filename);
} catch (Exception e){ }
return url;
}
public void paint(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, getSize().width, getSize().height);
g2d.drawImage(image, 0, 40, this);
}
}
答案 0 :(得分:0)
使用Toolkit加载图像时,假定图像相对于项目根类路径。我个人使用并建议使用ImageIO而不是Toolkit来加载图像。
例如,考虑您具有以下结构:
com
-> example
-> game
-> util
resources
-> images
-> fonts
--> image.png
要使用ImagoIO将您的image.png作为BufferedImage,您只需执行以下操作:
BufferedImage image = ImageIO.read(SomeClass.class.getResource("/resources/images.image.png");
声明该方法抛出IOException,但我将把它留给你。
答案 1 :(得分:0)
我将在答案中非常具体。在这种情况下,“图像加载失败”在这种情况下有点分散注意力。更接近方法getURL()
:
private URL getURL(String filename){
URL url = null;
try{
url = this.getClass().getResource(filename);
} catch (Exception e){ }
return url;
}
如果找不到具有此名称的资源,则JDK方法URL Class<T>.getResource(String)
返回“null”。简单地说:找不到文件castle.png
。详细了解this excellent blog post的资源路径。
在构造函数RandomShapes()
中,此行失败并显示NullPointerException
:
image = tk.getImage(getURL("castle.png"));
方法Image Toolkit.getImage(URL)
不接受null
输入。
假设您的类位于JAR文件中,返回的URL将使用特殊的“jar:”方案,该方案由Sun专门设计,用于在JAR中提供文件的位置。
如果您的图像文件未存储在JAR中,则可以使用此技巧将文件路径转换为URL:URL myImageUrl = new File("/my/images/folder/castle.png").toURI().toURL()
不要试图直接致电File.toURL()
;它被折旧以支持toURI().toURL()
技术。