首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Swing应用程序迁移到Java8会导致java.lang.ClassNotFoundException: org.jdesktop.swingworker.SwingWorker

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

Stack Overflow用户
提问于 2021-09-21 13:11:00
回答 2查看 198关注 0票数 1

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

代码语言:javascript
复制
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配置:

代码语言:javascript
复制
<?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,在JDK6上使用相同的JNLP配置执行相同的构建,它工作得很好,但当我在JDK8上尝试运行时,得到以下错误:

当我在eclipse上运行这个应用程序时,它在Java8上也工作得很好。

EN

回答 2

Stack Overflow用户

发布于 2021-09-21 15:17:42

根据维基百科的说法,org.jdesktop.swingworker.SwingWorker是Java6中引入的javax.swing.SwingWorker类的后端。

SwingWorkerWikipedia page声明:

http://swingworker.java.net/上提供了从Java6 SwingWorker到Java5的后端口。除了包名(org.jdesktop.swingworker)之外,它还与Java6 SwingWorker兼容。

这个包在java.net上的原始主页已经消失了。(但你可能会在使用Wayback Machine archive时走运。)

我在Maven Central上找到了几个条目,但其中一个也是离线的。

因此,看起来有两种选择:

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

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

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

票数 3
EN

Stack Overflow用户

发布于 2021-09-22 21:34:09

herehere所示,org.jdesktop.swingworker是Java5的SwingWorker的后端。代码保留在herehere中。

应该可以删除该依赖项:

代码语言:javascript
复制
<jar href="libs/swing-worker-1.1.jar"/>

并导入标准实现:

代码语言:javascript
复制
import javax.swing.SwingWorker;

作为一个具体示例,PrimeNumbersDemo通过删除package声明并添加import,在Java8和11下独立编译和运行。

代码语言:javascript
复制
 //package org.jdesktop.swingworker;
 import javax.swing.SwingWorker;

顺便说一句,package声明可以让演示在没有显式import的情况下访问SwingWorker类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69269501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档