0

我正在编写一个 Java 国际象棋 gui。它作为 Eclipse 的小程序运行良好,但我正在努力让它从 HTML 页面在我的本地机器上工作。我正在使用包含在 JAR 中的图像。使用 Eclipse 调试可以正确访问图像。我错过了什么:(?

HTML 看起来像:

<html>
<applet code="Ginsie" 
        height="300px" width="300px" archive="chess.jar">
</applet>
</html>

Java 控制台的输出(从浏览器打开):

java.lang.RuntimeException: java.lang.ExceptionInInitializerError
    at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError
    at BoardPanel.loadSquares(BoardPanel.java:105)
    at BoardPanel.<init>(BoardPanel.java:34)
    at Ginsie.<init>(Ginsie.java:60)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission ..\img\squares\Wood\BSQUARE.jpg read)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkRead(Unknown Source)
    at java.io.File.canRead(Unknown Source)
    at javax.imageio.ImageIO.read(Unknown Source)
    at Square.<clinit>(Square.java:47)
    ... 24 more
Exception : java.lang.RuntimeException: java.lang.ExceptionInInitializerError
4

1 回答 1

4

从堆栈跟踪来看,您似乎正在调用 javax.imageio.ImageIO.read(File)。在 Eclipse 中,它可能会起作用,因为它正在访问本地文件系统来读取图像。尝试使用 Class.getResourceAsStream() 从类路径中读取文件(即从 jar 中),然后将 InputStream 传递给 javax.imageio.ImageIO.read(InputStream)。

于 2012-05-22T18:03:11.223 回答