java - getImage()/drawImage() 使 Java-Applet 停止工作

标签 java swing applet graphics2d japplet

我正在使用 JApplet 制作 2D Java 游戏。对于图形,我显然分别使用 GraphicsGraphics2D。我的问题:我想在我的 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 中尝试了该小程序。

最佳答案

  1. 切勿从绘画方法中读取图像,例如 paintpaintComponent 。即使这是成功的(这不是您的情况),它也会不必要地导致多次重新读取图像并减慢程序的感知响应速度 - 这是您最不想做的事情。
  2. 而是读取一次图像并将其存储在变量中。
  3. 您的问题一定是您没有在正确的位置(通过正确的路径)寻找图像。我建议您从 URL 或 InputStream 获取图像作为资源并使用 ImageIO.read(...)读取它。您需要找到图像的正确路径,考虑到您当前的问题,我们很难猜测,但您需要使用相对于类文件位置的路径。
  4. 这个,gg.finalize(); , 是危险代码,不应存在;去掉这条线。

关于java - getImage()/drawImage() 使 Java-Applet 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31571525/

相关文章:

java - Cassandra - Java 驱动程序 : QueryBuilder, 要求在 where 子句中提供多个复合键

java - GateIn 中的 Portlet session 注销

java - 清洁 Swing 的 window

java - 如何确保您的小程序不会在特定页面 URL 之外使用?

java - 小程序事件编程

java - 让接口(interface)提供实现它的类的实例

java - Spring boot 应用程序可以排除什么?

java - 如何沿y轴旋转图像?

Java:如何将 JLabel 移动到 JPanel 的中心?

java - 如果我们可以使用代码库,小程序中的主机参数是什么?