java - 将 Swing 应用程序迁移到 Java 8 会导致 java.lang.ClassNotFoundException : org. jdesktop.swingworker.SwingWorker

标签 java swing java-8 weblogic12c jnlp

将 JDK 6 上开发的 Swing 应用程序迁移到 JDK 8 时遇到问题,导致出现以下问题:

java.lang.NoClassDefFoundError: org/jdesktop/swingworker/SwingWorker
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
    at java.lang.Class.getMethod0(Class.java:3018)
    at java.lang.Class.getMethod(Class.java:1784)
    at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
    at com.sun.javaws.Launcher.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.jdesktop.swingworker.SwingWorker
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at com.sun.jnlp.JNLPClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 8 more

应用程序正在使用 JNLP 作为依赖项。

JNLP配置:

<?xml version="1.0" encoding="utf-8"?>
<jnlp       spec="1.6+"     codebase="http://SERVER_NAME:8080/jnlp/" href="test.jnlp">
    <information>
        <title>Test</title>
        <vendor>ABC</vendor>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <update check="always" policy="always" />
    <resources>
        <j2se version="1.6*" max-heap-size="512M" initial-heap-size="256m" href="http://java.sun.com/products/autodl/j2se" />
        <property name="weblogic.MaxMessageSize" value="2000000000"/>
        <!-- Environment -->
        <property name="env" value="test"/>
        <!-- SSO authentication parameters for DEBUGGING -->
        <property name="abc.xyx.debug" value="true"/>
        <property name="aaaa.rrrr.debug" value="true"/>
        <property name="tttt.rrrr.eee.enable" value="true"/>
        <jar href="libs/test-SNAPSHOT.jar" main="true"/>
        ..........SOME OTHER JAR's
        <jar href="libs/swingx-0.9.5.jar"/>
        <jar href="libs/swing-worker-1.1.jar"/>
       
    </resources>
    <resources os="Windows" arch="x86">
        <nativelib href="libs/XYZ-1.0.jar"/>
    </resources>
    <application-desc main-class="com.example.Login" />
</jnlp>

任何人都可以对此提供帮助,或者建议 JDK 8 中有关 JNLP 和 Java Web Start 的更改/改进。

使用的技术堆栈:Java 8、Web Logic 12c

提前致谢:)

更新1:

仅对于 RnD,在 JDK 6 上使用相同的 JNLP 配置执行相同的构建,它工作正常,但当我尝试在 JDK 8 上运行时,出现以下错误: enter image description here

当我从 eclipse 运行该应用程序时,它在 JAVA 8 上也运行良好。

最佳答案

根据 Wikipedia,org.jdesktop.swingworker.SwingWorker 是 Java 6 中引入的 javax.swing.SwingWorker 类的向后移植。

Wikipedia page SwingWorker 指出:

A backport of the Java 6 SwingWorker to Java 5 is available at http://swingworker.java.net/[permanent dead link]. Apart from the package name (org.jdesktop.swingworker), it is compatible with the Java 6 SwingWorker.

这个包在 java.net 上的原始主页已经消失了。 (但是您可能会在 Wayback Machine archive 上有一些运气。)

我在 Maven Central 上找到了几个条目,但其中一个也处于离线状态。


所以,看起来有两个选择:

  1. 到目前为止,最好的选择是修改您的项目以使用官方 javax.swing.SwingWorker。这应该是一个简单的改变。只需更改 import 语句即可。一旦完成此操作,您就可以永远忘记这个问题。

  2. 如果您仍然需要在 Java 5 及更早版本上支持您的应用程序,那么您需要找到此依赖项的 JAR 文件并将其添加到您的项目中。尝试 Maven Central。


有关其他 org.jdesktop.* 依赖项的信息,请参阅 Eclipse does not recognize org.jdesktop.* 的答案.

关于java - 将 Swing 应用程序迁移到 Java 8 会导致 java.lang.ClassNotFoundException : org. jdesktop.swingworker.SwingWorker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69269501/

相关文章:

java - 在 AsyncTask 中运行 CountDownTimer 会抛出 java.lang.RuntimeException - Looper.prepare()

java - 为什么即使使用 setSelected(true) 也没有选择 JRadioButton

java - JTable 的 ScrollPane 行为异常

java - 为什么可以在没有 getter 的情况下访问字段?

java - 如何将python表达式转换为java表达式?

java - 无论java应用程序的类路径指定执行返回: "Error: Could not find or load main class"

java - BiFunction 引用可以传递给需要功能接口(interface)的方法吗?

Java Streams – 如何按值分组并找到每组的最小值和最大值?

java - 有没有一种可移植的方法来找出 JVM 从 VM 内部打开了多少文件?

java - 按特殊按钮退出