1

我写了一个签名的小程序,它可以接收文件并将其写入本地机器文件目录。我使用 NetBeans 在 Windows 7 上工作。在 Appletviewer 中一切运行正常。但是当我在 Web 浏览器中的网页上下文中运行小程序时,小程序可以在本地目录中创建一个文件,但我不能copyFile()使用apache common.io. 我可以写入使用创建的文件bufferedWriter(),但不能使用fileWriter. 我需要使用Java 库中的将文件从.wav转码为.mp3Encoder,但它在浏览器中不起作用。(我尝试了用户主文件夹和其他文件夹,但结果是一样的。)

这是我尝试实现文件复制的代码。不会抛出异常,但文件也不会被复制。

 try {
   FileUtils.copyFile(source, target);
 } catch(IOException e){
   jLabel4.setText("Error: " + e.getMessage());    
 }

我可以捕获异常,所以当我按下应该复制的按钮时,这是来自我的 Java 控制台的文本:

 try { FileUtils.copyFile(fl1, fl2); } catch (IOException ex) { ex.printStackTrace(); jLabel4.setText("Error: " + ex.getMessage()); }

这是我的 java 控制台文本:

basic: Told clients applet is started
network: Cache entry not found [url: http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar, version: null]
network: Connecting http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar with proxy=DIRECT
network: Connecting http://localhost:8084/ with proxy=DIRECT
network: Cache entry not found [url: http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar, version: null]
network: Cache entry not found [url: http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar, version: null]
network: Connecting http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar with proxy=DIRECT
network: Connecting http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar with proxy=DIRECT
network: Cache entry not found [url: http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar, version: null]
network: Connecting http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar with proxy=DIRECT
network: Cache entry not found [url: http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar, version: null]
network: Cache entry not found [url: http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar, version: null]
network: Connecting http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar with proxy=DIRECT
network: Connecting http://localhost:8084/Rozhlas_jsf/lib/commons-io-2.4.jar with proxy=DIRECT
network: Cache entry not found [url: http://localhost:8084/Rozhlas_jsf/, version: null]
network: Cache entry not found [url: http://localhost:8084/Rozhlas_jsf/org/apache/commons/io/FileUtils.class, version: null]
network: Connecting http://localhost:8084/Rozhlas_jsf/org/apache/commons/io/FileUtils.class with proxy=DIRECT
Exception in thread "AWT-EventQueue-2" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils
    at SoundApplet.SoundApplet.jButton2ActionPerformed(SoundApplet.java:480)
    at SoundApplet.SoundApplet.access$800(SoundApplet.java:42)
    at SoundApplet.SoundApplet$11.actionPerformed(SoundApplet.java:304)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(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.lang.ClassNotFoundException: org.apache.commons.io.FileUtils
    at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at sun.plugin2.applet.Plugin2ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 38 more

导入库似乎有些不好。我通过右键单击库文件夹添加罐子并添加罐子。我附上了我的项目文件夹的图像,它可以帮助你理解我的问题,但它可以让我接受它,因为我的评论数量已经低于 10 。

4

2 回答 2

0

问题解决了!!

我为像我这样绝望的人准备了一个小教程

  1. 在你的 webproject 的属性/打包选项中添加你的 applet 项目。它会导致您的小程序中的 .jar 文件将在您运行 webproject 时自动编译并复制到您的 webroject 的 build/web 文件夹中。

  2. 如果你想为你的小程序使用外部库,你必须将它们的 .jars 添加到你 webroject 的 build/web 文件夹中。现在,当您单击运行 Webproject 时,您的小程序会自动编译到您的 webroject 的 build/web 文件夹中,您的外部库 .jars 也在哪里。(这里注意清理你的项目,因为它会导致你的整个构建文件夹被删除并重新构建但是没有你的外部库 .jars !!当它发生时你必须再次复制 .jars 在这里)

  3. 现在你必须在 html 页面中告诉加载小程序它需要做什么,所以你使用这个标签

    <applet codebase="http://localhost:8084/<nameOfyourWebProject>" code="<package>.<appletFileName>" archive="Applet.jar, <EXternalLibName1>.jar, <EXternalLibName2>.jar... " width="500" height="500"></applet>

codebase 通常是你的 build/web 文件夹(这里也是 index.html),所以你说 Java 将从这里搜索 jars。代码是您开始的小程序类的路径。存档告诉将加载哪些 jar,因此您还需要加载 applet 的 jar 和外部库 jar。你可以指定你想要多少个 jars... 就是这样,现在你可以运行你的 Web 项目并享受你加载的带有外部 libs jars 的小程序。但是,如果你想做一些未签名的小程序不能做的事情(什么小程序可以和不能),你必须签署你的 applet.jar(这可以通过项目属性),你必须为你的小程序签署所有使用过的 jars(这是为了测试可能通过keytool 和 jarsign 实用程序随 java 一起分发)

我花了很多时间来了解这些信息并成功运行我的项目,所以我希望这个小教程能帮助你停止浪费时间:)

于 2012-11-28T01:38:11.757 回答
0

commons-io jar 不包含在浏览器下载的材料中,因此其中的类不存在。您可以弄清楚如何获取浏览器包含的 jar,或者您可以使用 jarjar 或 shade 构建一个包含所有部分的大 jar。显然,当您将 commons-io 添加到类路径时,netbeans 没有正确设置。

于 2012-11-25T17:32:19.017 回答