所以我们在一门基本的Java编程课程中得到了这个作业,我们应该实现一种卡片组。为了帮助我们解决这个问题,他们为我们提供了将在屏幕上显示 GUI 的资源,但是在运行我的程序时,我得到一个 IOException,它说它无法读取输入文件,很可能是因为路径名是错误的。而且我不知道如何解决它,我们甚至不应该干涉这段代码。此方法中会引发错误:
private Image getImg(Card aCard) {
File pathToFile = null;
if (aCard == null) {
pathToFile = new File("cardset-oxymoron/shade.gif");
} else {
String suits = "cdhs";
char c = suits.charAt(aCard.getSuit());
String fileName = String.format("%s/%02d%c.gif", "cardset-oxymoron", aCard.getRank(), c);
pathToFile = new File(fileName);
}
Image img = null;
try {
img = ImageIO.read(pathToFile);
} catch (IOException ex) {
System.err.println("Failed to create image");
ex.printStackTrace();
}
return img;
}
根据错误堆栈(?(,它位于第 99 行,即
img = ImageIO.read(pathToFile);
线
卡所在的文件夹位于项目文件夹内,就在 bin 和 src 之间。 使用 IntelliJ 调试器,我可以看到 pathToFile 是"cardset-oxymoron\02d.gif"。文件名正确,因为所有卡都是"[01-13][c/d/h/s].gif"。当我右键单击并复制 IntelliJ 中文件的路径时,它使用的是正斜杠而不是反斜杠。但后来我检查了资源管理器,情况正好相反......我不知道这是哪里出了问题,任何输入将不胜感激!
根据您的代码,您的文件位于相对于 JVM 运行目录的目录cardset-oxymoron
中。我不确定IntelliJ(我一直在使用Eclipse和Maven(,但它可能是bin
目录。
您可以通过放置这 2 行来检查它以查看它实际上是什么(在您的实际代码之前的某个地方(
File currentDir = new File("./");
System.out.println(currentDir.getAbsolutePath());
然后,您的cardset-oxymoron
必须位于该目录中。或者,您可以相应地更改文件路径。
例如,如果当前目录bin
则pathToFile
pathToFile = new File("../cardset-oxymoron/shade.gif");
以及其他情况的fileName
。