我正在使用 JApplet 制作 2D Java 游戏。对于图形,我显然分别使用 Graphics
和 Graphics2D
。我的问题:我想在我的 paintComponent(Graphics g)
方法中显示图像。该图片与 HTML5 文件(其中实现了 Applet)和类文件位于同一目录中。如果没有以下代码片段,小程序可以正常工作(显然,除了没有图像)。但是,一旦我将它添加到类中,Applet 就不会启动(在浏览器中!)。它不会显示任何内容,而且我也没有遇到异常。
代码:
Graphics2D gg = (Graphics2D) g;
Image img = getImage(getDocumentBase(), "img.PNG");
gg.drawImage(img, 70, 50, this);
gg.finalize();
请注意,我安装了 Java 版本 8 Update 51,并且我在 Java 控制面板的白名单上有 HTML5 文件的 URL(因此我不会收到安全错误)。我在 Firefox 和 IE 中尝试了该小程序。
最佳答案
- 切勿从绘画方法中读取图像,例如
paint
或paintComponent
。即使这是成功的(这不是您的情况),它也会不必要地导致多次重新读取图像并减慢程序的感知响应速度 - 这是您最不想做的事情。 - 而是读取一次图像并将其存储在变量中。
- 您的问题一定是您没有在正确的位置(通过正确的路径)寻找图像。我建议您从 URL 或 InputStream 获取图像作为资源并使用
ImageIO.read(...)
读取它。您需要找到图像的正确路径,考虑到您当前的问题,我们很难猜测,但您需要使用相对于类文件位置的路径。 - 这个,
gg.finalize();
, 是危险代码,不应存在;去掉这条线。
关于java - getImage()/drawImage() 使 Java-Applet 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31571525/