如何解决getClass().getResourceAsStream() 的问题
我正在制作一个带有图形环境的项目,该项目使用文件中的缓冲图像。我进行了搜索,在导出 jar 后,我使用的方式(Java.IO 文件)不起作用,而使用 getClass().getResourceAsstream()
的方法是,但我在找出文件路径时遇到了麻烦
这是我在 eclipse-IDE 中的文件:
有些人说我应该将我的资源文件夹移动到 src 中 但我仍然不知道 res 中 image1.png 的文本是什么
https://pastebin.com/MChSyWH5 这是我尝试绘制图像的类是如何在没有实现 getClass().getResourceAsstream() 的情况下进行的:
package src;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
public class Menu {
public Rectangle Playbutton = new Rectangle( Game.WIDTH/2-25,60,50,10);
public Rectangle Exitbutton = new Rectangle( Game.WIDTH/2-25,80,10);
public static String desc = null;
private BufferedImage imagePlay;
private BufferedImage players1;
private BufferedImage players2;
private BufferedImage imageExit;
private BufferedImage IMPOSSIBLE;
private BufferedImage Hard;
private BufferedImage Easy;
private BufferedImage normal;
private BufferedImage imageTitle;
private BufferedImage imageResume;
private BufferedImage imageMain;
private BufferedImage OPTIONS;
private BufferedImage BACK;
public static int brightloss = 0;
public static int stibaum = 0;
public static boolean sti = true;
public static boolean showc = false;
public static enum STATE{
MAIN,P1P2,INGAME,DIFICULTY,OPTIONS
};
public static STATE State = STATE.MAIN;
InputStream input = null;
public static STATE Statepre = State;
public static boolean dark = true;
public static Slider slider;
public static void SAVESTATE(){
Statepre = State;
}
public Menu() {
try {
input = new FileInputStream("res/Playbutt.png");
} catch (IOException e) {
e.printstacktrace();
}
String current;
try {
current = new java.io.File( "." ).getCanonicalPath();
System.out.println("Current dir:"+current);
String currentDir = System.getProperty("user.dir");
System.out.println("Current dir using System:" +currentDir);
} catch (IOException e) {
// Todo Auto-generated catch block
e.printstacktrace();
}
slider = new Slider(100,100,false,brightloss);
System.out.println(new File("res/Playbutt.png").getAbsolutePath()+"-arquivo");
System.out.println(new File("/res/Playbutt.png").exists()+"-arquivo2");
try { // ImageIO.read(new File("res/Playbutt.png"));
imagePlay = ImageIO.read(input);
IMPOSSIBLE = ImageIO.read(new File("res/IMPOSSIbutt.png"));
Hard = ImageIO.read(new File("res/Hardbutt.png"));
Easy = ImageIO.read(new File("res/Easybutt.png"));
normal = ImageIO.read(new File("res/normalbutt.png"));
players1 = ImageIO.read(new File("res/1P.png"));
players2 = ImageIO.read(new File("res/2P.png"));
imageExit = ImageIO.read(new File("res/Exitbutt.png"));
imageTitle = ImageIO.read(new File("res/Title.png"));
imageResume = ImageIO.read(new File("res/Resumebutt.png"));
imageMain = ImageIO.read(new File("res/Mainbutt.png"));
OPTIONS = ImageIO.read(new File("res/Optbutt.png"));
BACK = ImageIO.read(new File("res/Backbutt.png"));
} catch (IOException ex) {
// handle exception...
}
}
public void render(Graphics g) {
g.setFont(new Font("DefaultFont",Font.PLAIN,10));
g.setColor(Colors.Trans_GREEN3);
g.fillRect(0,Game.HEIGHT-10,Game.WIDTH,10);
g.fillRect(0,Game.HEIGHT-9,9);
g.fillRect(0,Game.HEIGHT-8,8);
g.fillRect(0,Game.HEIGHT-7,7);
g.fillRect(0,Game.HEIGHT-6,6);
g.fillRect(0,Game.HEIGHT-5,5);
g.setColor(Colors.Trans_GREEN3);
g.fillRect(0,10,Game.HEIGHT);
g.fillRect(0,9,8,7,6,5,Game.HEIGHT);
g.setColor(Colors.Trans_GREEN3);
g.setColor(Colors.Trans_GREEN3);
g.fillRect(Game.WIDTH-10,Game.HEIGHT);
g.fillRect(Game.WIDTH-9,Game.HEIGHT);
g.fillRect(Game.WIDTH-8,Game.HEIGHT);
g.fillRect(Game.WIDTH-7,Game.HEIGHT);
g.fillRect(Game.WIDTH-6,Game.HEIGHT);
g.fillRect(Game.WIDTH-5,Game.HEIGHT);
Graphics2D g2d = (Graphics2D) g;
if(State==STATE.MAIN) {
if(MouseInput.mx>=95 && MouseInput.mx<=145) {
if(MouseInput.my>60&&MouseInput.my<70) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-26,59,54,14);
}
else if(MouseInput.my>80&&MouseInput.my<90) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-26,79,14);
}
else if(MouseInput.my>40&&MouseInput.my<50) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-26,39,14);
desc=("");
g.setColor(Color.green);
g.drawString(desc,45,Game.HEIGHT/2+50);
}
}
g2d.drawImage(this.imageTitle,200,null);
g2d.drawImage(this.OPTIONS,Game.WIDTH/2-25,null);
g2d.drawImage(this.imagePlay,40,null);
g2d.drawImage(this.imageExit,null);
double locationX = imageTitle.getWidth() / 2;
double locationY = imageTitle.getHeight() / 2;
AffineTransform tx = AffineTransform.getRotateInstance((Math.toradians(stibaum)),locationX,locationY);
AffineTransformOp op = new AffineTransformOp(tx,AffineTransformOp.TYPE_BILINEAR);
AffineTransform old = g2d.getTransform();
g2d.drawImage(op.filter(imageTitle,null),Game.WIDTH/2-50,null);
g2d.setTransform(old);
//things you draw after here will not be rotated
}
else if(State==STATE.INGAME) {
if(MouseInput.mx>=95 && MouseInput.mx<=145) {
if(MouseInput.my>70&&MouseInput.my<80) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-26,69,14);
}
else if(MouseInput.my>90&&MouseInput.my<100) {
g.fillRect(Game.WIDTH/2-26,89,14);
}else if(MouseInput.my>50&&MouseInput.my<60) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-26,49,14);
}
}
g2d.drawImage(this.imageResume,70,null);
g2d.drawImage(this.imageMain,null);
g2d.drawImage(this.imageExit,90,null);
g2d.drawImage(this.imageTitle,null);}
else if(State==STATE.P1P2) {
if(MouseInput.mx>=15 && MouseInput.mx<=40) {
if(MouseInput.my>=106&&MouseInput.my<118) {
g.setColor(Colors.outline);
g.fillRect(14,Game.HEIGHT-29,28,15);
desc=("");
g.setColor(Color.green);
g.drawString(desc,Game.HEIGHT/2+50);
}}
if(MouseInput.my>30&&MouseInput.my<90) {
if(MouseInput.mx>=60 && MouseInput.mx<=120) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-61,29,66,66);
}
if(MouseInput.mx>=130 && MouseInput.mx<=190) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2+9,66);
}}
g2d.drawImage(this.players1,Game.WIDTH/2-60,30,null);
g2d.drawImage(this.players2,Game.WIDTH/2+10,null);
g2d.drawImage(this.BACK,15,Game.HEIGHT-28,null);
}
else if(State==STATE.DIFICULTY) {
if(MouseInput.mx>=15 && MouseInput.mx<=40) {
if(MouseInput.my>=106&&MouseInput.my<118) {
g.setColor(Colors.outline);
g.fillRect(14,Game.HEIGHT/2+50);
}}
if(MouseInput.mx>=95 && MouseInput.mx<=145) {
if(MouseInput.my>70&&MouseInput.my<80) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-26,14);
g.setColor(Color.green);
desc=("for those who want challenge");
g.drawString(desc,Game.HEIGHT/2+50);
}
else if(MouseInput.my>90&&MouseInput.my<100) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-26,14);
desc=("for those who want to cry");
g.setColor(Color.green);
g.drawString(desc,Game.HEIGHT/2+50);
}else if(MouseInput.my>50&&MouseInput.my<60) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-26,14);
desc=("for those who want to play casually");
g.setColor(Color.green);
g.drawString(desc,Game.HEIGHT/2+50);
}if(Ball.pmih) {
if(MouseInput.my>33&&MouseInput.my<44) {
g.setColor(Colors.outline);
g.fillRect(Game.WIDTH/2-26,32,14);
desc=("for those who don't really have a life");
g.setColor(Color.green);
g.drawString(desc,Game.HEIGHT/2+50);
}}
}
if(Ball.pmih) {
g2d.drawImage(this.IMPOSSIBLE,33,null);}
g2d.drawImage(this.normal,null);
g2d.drawImage(this.Easy,null);
g2d.drawImage(this.Hard,null);
g2d.drawImage(this.imageTitle,null);
g2d.drawImage(this.BACK,null);
}
else if(State==STATE.OPTIONS) {
if(MouseInput.mx>=15 && MouseInput.mx<=40) {
if(MouseInput.my>=106&&MouseInput.my<118) {
g.setColor(Colors.outline);
g.fillRect(14,Game.HEIGHT/2+50);
}}
slider.render(g);
g2d.drawImage(this.imageTitle,null);
}
}
public void tick() {
slider.tick();
if(stibaum<5&&sti==true) {
stibaum+=1;
}
if(stibaum>=5&&sti==true) {sti=false;}
if(stibaum>-5&&sti==false) {
stibaum-=1;
}
if(stibaum<=-5&&sti==false) {sti=true;}
if(State==STATE.OPTIONS) {
Statepre=STATE.MAIN;
}
else if(State==STATE.P1P2) {
Statepre=STATE.MAIN;
}
else if(State==STATE.DIFICULTY) {
Statepre=STATE.P1P2;
}
}
}
解决方法
input = new FileInputStream("res/Playbutt.png");
这不起作用。您不能使用 FIS,您必须使用 Menu.class.getResource
。不是getClass()
。
ImageIO.read(new File("res/2P.png"));
这里也一样。
} catch (IOException ex) {
// handle exception...
}
这不是你做这些事情的方式。摆脱这一切,并将 throws IOException
添加到构造函数中。 public static void main
可以并且通常应该声明为 throws Exception
。您忽略了错误,因此更难调试此问题。因此,不要这样做。
您的代码均未尝试使用 Main.class.getResource
。
res
未在您的 Eclipse 项目中标记为源目录。你需要解决这个问题。您有 2 个选择:
-
忘记
res
目录。将图像放在与 java 文件完全相同的位置。只需将它们移到那里 - 然后getResource
就可以正常工作。例如,如果img.png
与Main.java
位于同一目录(完全相同的目录!),则Main.class.getResource("img.png")
将正常工作。 -
使用 maven,然后将此项目更改为基于 maven 的项目。然后eclipse会照顾它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。