0

嗨,这可能是因为我是一个菜鸟,但我正在努力让这个工作好几天,所以希望有人能帮助我....

想法:对于 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

我真的希望有人能把我送到正确的方向。

4

3 回答 3

1

Applet 不允许做很多事情,包括文件 I/O 和各种网络任务;正如您的小程序正在尝试做的那样。您可能需要签署您的小程序。

检查此参考

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

于 2013-08-23T11:48:30.030 回答
0

答案是签署所有罐子。

如何做到这一点仍然是一个任务,但下面的帖子让它变得非常容易:

我如何签署一个Java小程序

于 2013-08-23T13:59:36.240 回答
0
  1. 小程序不应直接访问数据库。这是为了数据库的安全。相反,它应该被迫通过一个 Web 服务(限制用户可以做的事情和)本身与数据库交互。
  2. 与服务于它的同一主机上的数据库(或 Web 服务)通信的小程序可以被沙盒化。
  3. 如果“读取属性”错误是您无法控制的数据库连接代码的一部分,那么这是将数据库访问隐藏在 Web 服务后面的一个好例子。否则,有一些方法可以读取不调用AccessControlException.

说了这么多,它已经到了未签名代码可能在加载之前被阻止的阶段,所以也许你应该做的第一件事就是对小程序和所有必需的库进行数字签名。


为什么要编写小程序?如果是由于规范。老师,请参考为什么 CS 老师应该停止教授 Java 小程序。使用标准桌面应用程序会更容易做到这一点。使用Java Web Start 启动。安全环境将是相同的,但是是一个自由浮动的应用程序。是:

  1. 为最终用户提供更好的体验。
  2. 比嵌入网页的小程序更容易编码和维护。
于 2013-08-23T16:54:59.563 回答