0

こんにちは、おそらく私が初心者だからだと思いますが、これを数日間機能させようとしているので、誰かが私を助けてくれることを願っています....

アイデア: Java トレーニングのために、(localhost) MySQL データベースからデータを読み書きする Javaアプレットを作成する必要があります。このデータベースの設定は、config.ini ファイルから取得する必要があります。

このアプリケーションは、Eclipse でアプレットおよび Java アプリケーションとして正常に動作します。また、実行可能な jar ファイルとしても正常に動作します。

しかし、アプレットとして実行することはできません...:(。

最初に発生したエラーは、config.ini ファイルの読み取りに関するものでした。これは、セキュリティの制限 (io) が原因で発生することを期待しています。それは解決する必要があるものですが、今のところ私の主な関心事ではありません.

残りが機能するかどうかを確認するために、loadIni クラスをスキップします。次に、「ドライバーが見つかりません」という例外が発生しました。これを解決するには、mySQL jar をアプレット () のアーカイブとしてロードします。

しかし今、私は道に迷っています...

ブラウザでアプレットを起動すると、コンソールに次のエラーが表示されます。

java.lang.RuntimeException: java.lang.ExceptionInInitializerError
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.instantiateApplet(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager.initAppletAdapter(Unknown Source)
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at Kreta.DBConnection.<init>(DBConnection.java:39)
    at Kreta.AfhaalMenus.<init>(AfhaalMenus.java:21)
    at Kreta.test2.<init>(test2.java:39)
    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.newInstance(Unknown Source)
    at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter$1.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$200(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$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.util.PropertyPermission"          
"file.encoding" "read")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at sun.plugin2.applet.AWTAppletSecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
    at java.lang.System.getProperty(Unknown Source)
    at com.mysql.jdbc.StringUtils.<clinit>(StringUtils.java:70)
    ... 31 more

誰かが私を正しい方向に送ってくれることを心から願っています。

4

3 に答える 3

0
  1. アプレットは DB に直接アクセスできません。これはDBのセキュリティのためです。代わりに、それ自体が DB と対話する (ユーザーができることを制限する) Web サービスを強制的に通過する必要があります。
  2. DB (または Web サービス) と通信するアプレットは、サービスを提供したのと同じホスト上でサンドボックス化できます。
  3. その「プロパティの読み取り」エラーが、制御していない DB 接続コードの一部である場合は、DB アクセスを Web サービスの背後に隠す良いケースです。それ以外の場合は、(元のサーバーから) プロパティ ファイルを読み取る方法がありますが、AccessControlException.

そうは言っても、署名されていないコードがロードされる前にブロックされる可能性が高い段階に達しているため、おそらく最初にすべきことは、アプレットと必要なすべてのライブラリにデジタル署名することです.


アプレットをコーディングする理由 スペックによるものなら CS 教師が Java アプレットの指導をやめるべき理由を参照してください。これは、標準のデスクトップ アプリを使用すると簡単に実行できます。Java Web Startを使用して起動します。セキュリティ環境は同じですが、フリー フローティング アプリです。は:

  1. エンド ユーザーのエクスペリエンスが向上します。
  2. Web ページに埋め込まれたアプレットよりも、コーディングと保守がはるかに簡単です。
于 2013-08-23T16:54:59.563 に答える