所以我尝试从资源加载图像文件,这样当我将应用程序导出到jar文件中时,可以使用它。
现在我已经阅读了这里的文档:http://docs.oracle.com/javase/tutorial/uiswing/components/icon.html
但我仍然没有得到它......我怎样才能在我的代码中实现它?
下载图片,以便您也可以看到我的应用程序树:
我无法将getImage更改为getResources,因为它需要一些东西而且我不知道是什么。
编辑:这就是图像线现在的样子:图片pic = Toolkit.getDefaultToolkit().getImage("src/klassid/Pictures/mario.png");
这将从资源中加载它。
CODE:
package klassid;
import java.awt.Toolkit;
import java.awt.Image;
import java.awt.Graphics;
import java.net.URL;
public class Hero {
static Main main;
java.awt.Image pic = javax.imageio.ImageIO.read(Hero.class.getClassLoader().getResourceAsStream("Pictures/mario.png"));
//Image pic = Toolkit.getDefaultToolkit().getImage(this.getClass().getClassLoader().getResource("klassid/Pictures/mario.png"));
double height = 0, speed = 4;
public static final double gravity = 9.81;
double x = 25;
int y, a;
boolean left = false, right = false, up = false;
public Hero(int x, int y){
this.x = x;
this.y = y;
}
public void render(Graphics g, Main pohiKlass){
g.drawImage(pic, (int) (x), (int) (500-(height*100)), 50, 50, pohiKlass);
}
public void the_jump() {
long previous = 0, start = 0;
while(true){
start = System.nanoTime();
if(previous != 0 && up){
double delta = start - previous;
height = (height + (delta/1000000000) * speed);
speed -= (delta/1000000000) * gravity;
y = (int) (500-(height * 100));
//System.out.println(y);
}
if(left)
x-= 3;
if(right)
x+= 3;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(height < 0){
height = 0;
speed = 4;
up = false;
}
previous = start;
}
}
public void liigu(int i){
if(i == 38 || i == 87)
up=true;
if(i == 37 || i == 65)
left=true;
if(i == 39 || i == 68)
right=true;
}
public void liigu2(int i){
if(i == 37 || i == 65)
left=false;
if(i == 39 || i == 68)
right=false;
}
public void getY(){
a = y;
}
}
答案 0 :(得分:1)
您应该尝试将“图片”文件夹直接放入“项目”文件夹中。
您的文件夹布局应如下所示。
-Kodune-mang
-src
-klassid
-Pictures
-mario.png
您可以使用路径引用'mario.png'图像。
Pictures/mario.png
由于java(或至少eclipse)中的文件路径系统将自动在主项目目录中启动。它将能够查看'src'文件夹及其子组件,以及新的'Pictures'文件夹及其子组件。
答案 1 :(得分:1)
Toolkit.getImage()有2个方法,您应该使用第二个方法,将URL作为参数,并使用ClassLoader获取资源并将其传递
// I am assuming that your picture is in klassid/Pictures folder inside the jar file
Image pic = Toolkit.getDefaultToolkit().getImage(this.getClass().getClassLoader().getResource("klassid/Pictures/mario.png"));
我喜欢一步一步地做事情,所以,首先测试类加载器,看看你是否可以通过以下方式将图像与Toolkit分开:
URL imgUrl = this.getClass().getClassLoader().getResource("klassid/Pictures/mario.png");
并简单地执行System.out.println(this.getClass()。getClassLoader()。getResource(“”))以查看根路径并将其跟随到您的图像/资源。关于getResource(),您应该了解的一点是,它是在运行时相对于类路径获取资源的意思。在eclipse中你可以设置bin或bin / classes。在.jar文件中,它是文件结构的顶部。
答案 2 :(得分:1)
将其作为资源加载,为什么不加载?:
java.awt.Image pic = javax.imageio.ImageIO.read(Hero.class.getClassLoader().getResourceAsStream("klassid/Pictures/mario.png"));