簡體   English   中英

帶有擺動mysql和配置文件的applet在eclipse中有效,但在瀏覽器中失敗

[英]applet with swing mysql and a config file works in eclipse but fails in browser

嗨,這可能是因為我是菜鳥,但我現在想讓它工作幾天,所以希望有人能幫助我...。

想法:對於Java培訓,我需要制作一個Java 小程序 ,該程序可以從(本地)MySQL數據庫讀取和寫入數據。 該數據庫中的設置必須來自config.ini文件。

該應用程序可以在Eclipse中作為applet和Java應用程序正常運行。 它也可以作為可執行jar文件正常運行。

我不能讓它作為小程序運行... :(。

我遇到的第一個錯誤是有關讀取config.ini文件的。 我預計會由於安全限制(io)而發生這種情況。 這是需要解決的問題,但不是我目前主要關注的問題。

為了查看其余部分是否有效,我跳過了loadIni類。 然后我得到了:未找到驅動程序異常。 我通過將mySQL jar作為檔案加載到applet()中解決了這一問題。

但是現在我迷路了...

當我在瀏覽器中啟動小程序時,在控制台中出現以下錯誤:

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

我真的希望有人可以向正確的方向發送我。

Applet不允許做很多事情,包括文件I / O和各種聯網任務。 當您的小程序試圖做一個。 您可能需要在小程序上簽名。

檢查此參考

http://www.coderanch.com/how-to/java/HowCanAnAppletReadFilesOnTheLocalFileSystem

答案是在所有罐子上簽名。

如何做到這一點仍然是一個探索,但以下文章使這變得非常容易:

我如何簽署一個Java小程序

  1. 小程序不應直接訪問數據庫。 這是為了保證數據庫的安全。 相反,應該強制它通過一個Web服務,該Web服務(限制用戶可以執行的操作&)本身與DB交互。
  2. 可以對與服務該服務器的主機上的數據庫(或Web服務)進行通信的小程序進行沙盒處理。
  3. 如果該“讀取屬性”錯誤是您無法控制的數據庫連接代碼的一部分,那么這是將數據庫訪問隱藏在Web服務之后的一個好案例。 否則,有一些方法(不從原始服務器)讀取屬性文件,而不會調用AccessControlException

綜上所述,未簽名的代碼可能要在加載之前就被阻塞,所以您應該做的第一件事就是對小程序和所有必需的庫進行數字簽名。


為什么要編寫小程序? 如果是由於規格。 請向老師介紹為什么CS老師應該停止教Java小程序 使用標准的桌面應用程序會更容易做到。 使用Java Web Start啟動 安全環境將相同,但是是自由浮動的應用程序。 是:

  1. 最終用戶的更好體驗。
  2. 與嵌入在網頁中的小程序相比,它更易於編碼和維護。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM