使用swing mysql和配置文件的applet在eclipse中工作但在浏览器中失败

时间:2013-08-23 11:44:04

标签: java mysql io applet

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

这个想法: 对于java培训,我需要创建一个Java applet ,它从(localhost)MySQL数据库读取和写入数据。此数据库中的设置必须来自config.ini文件。

应用程序在Eclipse中作为applet和java应用程序运行良好。 它也可以作为可执行的jar文件运行。

我不能让它作为applet运行但是...... :(。

我得到的第一个错误是关于读取config.ini文件。我希望这是因为安全限制(io)。这是需要解决的问题,但不是我现在主要关注的问题。

为了查看其余部分是否有效,我跳过了我的loadIni类。然后我得到了:驱动程序未找到异常。 我通过在我的applet()中加载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

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

3 个答案:

答案 0 :(得分:1)

小程序不允许执行许多操作,包括文件I / O和各种网络任务;因为您的applet正在尝试做一个。您可能需要在applet上签名。

检查此参考

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

答案 1 :(得分:0)

答案是签署所有罐子。

如何做到这一点仍然是一个任务,但以下帖子让它变得非常简单:

how do i sign a java applet

答案 2 :(得分:0)

  1. 小程序不应该直接访问数据库。这是为了DB的安全性。相反,它应该被迫通过一个Web服务(限制用户可以做的事情)和自己与数据库进行交互。
  2. 与服务于的同一主机上的数据库(或网络服务)进行通信的小程序可以是沙盒。
  3. 如果'读取属性'错误是您无法控制的数据库连接代码的一部分,那么将数据库访问隐藏在Web服务后面就是一个很好的例子。否则,有一些方法可以读取未调用AccessControlException的属性文件(来自原始服务器)。
  4. 说了这么多,它已经进入了无条件代码在加载之前可能被阻止的阶段,所以你应该做的第一件事就是对applet和所有必需的库进行数字签名。


    为什么要编写applet?如果是由于规格。请老师将其转介给Why CS teachers should stop teaching Java applets。使用标准桌面应用程序会更容易。使用Java Web Start启动。安全环境将是相同的,但是一个自由浮动的应用程序。是:

    1. 为最终用户提供更好的体验。
    2. 比嵌入网页的applet更容易编码和维护。