3

Eclipse を使用してアプレットを作成しました。

package gui;
public class MyApplet extends JApplet {

このアプレットには、proj.jar と firebirdsql-full.jar (jdbc) の 2 つの外部 jar が必要です。

したがって、jar と同じフォルダーに、次のような HTML を作成しました。

<APPLET CODE="gui.MyApplet.class" width="650" height="650" ARCHIVE="proj.jar,myApplet.jar,firebirdsql-full.jar">
    <a href="http://java.com/en/download/index.jsp">Java</a>
</APPLET>

ARCHIVEまた、属性の jar の順序を変更しようとしました。

ただし、次のエラーを受け取り続けます(Javaコンソールで):

Exception in thread "thread applet-gui.MyApplet.class-2" java.lang.NoClassDefFoundError: Could not initialize class org.firebirdsql.jdbc.FBDriver
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at db.DAO.getDBConnection(DAO.java:45)
    at db.MyDAO.initPreparedStatements(MyDAO.java:37)
    at db.MyDAO.<init>(MyDAO.java:33)
    at db.MyDAO.getInstance(MyDAO.java:27)
    at model.Controller.<init>(Controller.java:27)
    at gui.MyApplet.getJTabbedPane(MyApplet.java:81)
    at gui.MyApplet.getJContentPane(MyApplet.java:69)
    at gui.MyApplet.init(MyApplet.java:52)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

何か不足していますか?

編集:

どういうわけか、これをデバッグしているときに、別のスタック トレースも受け取りました。

Exception in thread "thread applet-gui.MyApplet.class-1" 
java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at db.DAO.getDBConnection(DAO.java:45)
    at db.MyDAO.initPreparedStatements(MyDAO.java:37)
    at db.MyDAO.<init>(MyDAO.java:33)
    at db.MyDAO.getInstance(MyDAO.java:27)
    at model.Controller.<init>(Controller.java:27)
    at gui.MyApplet.getJTabbedPane(MyApplet.java:81)
    at gui.MyApplet.getJContentPane(MyApplet.java:69)
    at gui.MyApplet.init(MyApplet.java:52)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission FBLog4j 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.checkPropertyAccess(Unknown Source)
    at java.lang.System.getProperty(Unknown Source)
    at org.firebirdsql.logging.LoggerFactory.getLogger(LoggerFactory.java:36)
    at org.firebirdsql.logging.LoggerFactory.getLogger(LoggerFactory.java:72)
    at org.firebirdsql.jdbc.FBDriver.<clinit>(FBDriver.java:63)
    ... 12 more
4

2 に答える 2

4

2 番目のスタック トレースが表示されたので、何が起きているかが明確になりました。JDBC ドライバーはログに Log4J を使用しようとしています。ドライバー クラスの静的イニシャライザーでシステム プロパティからログ パラメーターを取得しようとしていますが、署名されていないアプレットにはシステム プロパティを読み取る権限がないため、失敗しています。

アプレットに署名し、そのプロパティ (java.util.PropertyPermission FBLog4j 読み取り) をアプレットに付与することはできますが、正直なところ、これは良い兆候ではありません。これを修正するとすぐに、他のセキュリティ例外がスローされると思います。このドライバがアプレットから動作するように作成されていない場合、それは無駄な試みになる可能性があります。

于 2012-05-20T12:52:51.690 に答える
2

署名されていないアプレットは、いわば「制限された」サンドボックスで実行されています。詳細については、Oracleのドキュメントを参照してください:http://docs.oracle.com/javase/tutorial/deployment/applet/security.html

私の推測では、例外が言うように、FBDriver.java:63(Firebird内)がJVMで許可されていないことを実行していると思います。

ちなみに、アプレット内にJDBCドライバーをロードするのは少し奇妙ですが、私は逸脱します。

于 2012-05-20T12:15:32.890 に答える