【发布时间】:2020-07-21 19:21:12
【问题描述】:
所以我在 jdk 7 下编写了一个游戏,它可以像这样导入和绘制图形:
ImageReader.java:
public static BufferedImage button_quit;
public void fetchGraphics() {
try {
button_quit = ImageIO.read(new File("rsc/client/gui/button_quit.jpeg"));
} catch(Exception e) {
e.printStackTrace();
System.out.println("Exception thrown in ClientVariables.class while importing overlay graphics.");
}
}
DrawClient.java:
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.drawImage(ClientVariables.button_quit, ClientVariables.quitButtonX, ClientVariables.quitButtonY, null);
repaint();
}
问题 - 在 jdk 7 中它工作得很好,但由于我升级到 jdk 14 没有导入单个图形,它只绘制所有硬编码的线条和内容。我如何更改代码才能使其再次工作,我不知道(有关如何在 java 中绘制图像的教程来自多年前,因此也在 jdk 7 或 8 中)
编辑:它是相同的代码,相同的 ide 甚至不是另一个文件夹,其中的东西位于。图形的位置应该是。我之前没有提到的:未加载图形。我反复得到堆栈跟踪和我的错误消息。堆栈跟踪:
javax.imageio.IIOException:无法读取输入文件!
在 java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1308)
在 GUI.ClientVariables.(ClientVariables.java:100)
在 MAIN.CodeEntry.main(CodeEntry.java:70)
我怀疑可能是问题在于较新版本中的代码不希望“rsc/”文件夹与“src/”文件夹位于同一文件夹中,但可能在其他位置。
【问题讨论】:
-
你的旧代码是错误的。你不应该在绘画方法中调用 repaint() 。我怀疑更改 JDK 会导致 Java 方法停止工作。问题可能是您的 IDE 的设置和图像文件的位置。你做了什么调试?您是否确认已读取图像?您是否验证了 paintComponent() 方法已执行?您是否确认 x/y 值正确?发布正确的minimal reproducible example 来证明问题。
-
所以,我的旧代码没有错,只是断章取义。但是你说得对,帖子缺少一些信息,请编辑它。由于游戏有大量代码,因此制作 mre 非常复杂。
-
因为游戏有大量代码。 - minimal reproducible example 与您的应用程序无关。它是代码确实证明了一个问题。您的问题是读取图像。因此,您只需要一个带有 JLabel 的 JFrame,然后读取图像并创建一个 ImageIcon 以添加到 JLabel。整个课程大约有 20 行代码。关键是您需要学习如何阅读图像。如果图像位于同一位置并且您的 IDE 设置正确,那么它应该会找到该图像。也许问题出在类路径上?
-
阅读 Loading Images Using getResource 上的 Swing 教程中的部分,以更好地阅读图像。
标签: java file graphics javax.imageio