我有以下片段加载图片:
String imgName = "/assets/" + name;
URL imgURL = Groovy.class.getResource(imgName);
System.out.println(imgURL.getPath());
Toolkit tk = Toolkit.getDefaultToolkit();
Image image = tk.getImage(imgURL);
return image;
绘制图像的位置:
Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0,0,screenWidth,screenHeight);
g.drawImage(background, 0, 0, null);
System.out.println(background.getWidth(null));
if (background.getWidth(null) < 0)
System.exit(1);
但是imgURL总是返回null。我正在使用Eclipse(并且很新鲜,使用blegh),并使用run或debug选项运行类。如果我改变路径,它会给出一个未找到文件的异常。
文件结构如下:
项目 - &gt; src和资产 - &gt; src有Groovy,资产有图像 - &gt; Groovy有Groovy.class
编辑:我转回Netbeans。 imgURL现在加载正常,getPath返回正确的路径。但是图像宽度/高度返回-1。这是现在的实际问题。
编辑:-1表示宽度尚不清楚,但显示图像显示白屏。
答案 0 :(得分:1)
Javadoc救援:
在委托之前,从中构造绝对资源名称 使用此算法给定资源名称:
如果名称以'/'('\ u002f')开头,则资源的绝对名称是'/'后面的名称部分。 否则,绝对名称的格式如下:
modified_package_name/name
其中modified_package_name是此对象的包名称,其中'/'替换为&gt;为'。' ( '\ u002e')。
简而言之:相对路径无法使用..
升级。使用绝对名称(从类路径的根开始以/
开头)。
此外,getResource从类路径加载资源。如果图像不在类路径中,则不起作用。您的文件树根本不清楚,但似乎您还没有理解类路径是什么。如果要从文件系统加载文件,请使用文件IO,而不是资源。
答案 1 :(得分:0)
问题在于使用工具包来获取图像,可能是因为我正在使用OpenJDK?无论如何,使用ImageIO.read(imgURL)修复此问题。