You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swing应用从JDK6迁移JDK8出现org.jdesktop.swingworker.SwingWorker类缺失错误

问题根因

你遇到的java.lang.ClassNotFoundException: org.jdesktop.swingworker.SwingWorker异常,本质是JDK8环境下Java Web Start运行时未正确加载你配置的swing-worker-1.1.jar依赖包。
org.jdesktop.swingworker.SwingWorker是SwingWorker正式纳入JDK标准库之前的第三方backport实现,供JDK5及更低版本使用,JDK6及以上版本已内置了API完全兼容的javax.swing.SwingWorker类。
该问题仅在JNLP启动时出现的原因:Eclipse本地运行时会直接把所有依赖加入类路径,不受Web Start的类加载规则约束;JDK6的Web Start类加载逻辑更宽松,能正常识别第三方jar中的org.jdesktop包类,而JDK8对Web Start的加载规则、安全校验做了大量调整,导致旧的JNLP配置无法正常加载swing-worker-1.1.jar。

解决方法
  • 永久修复方案(推荐):批量替换代码中的导入声明,将所有import org.jdesktop.swingworker.SwingWorker改为import javax.swing.SwingWorker,同时从JNLP依赖和构建配置中移除swing-worker-1.1.jar。两类API完全兼容,无需修改业务逻辑即可从根源解决类加载问题。
  • 无需修改代码的临时修复方案:调整JNLP配置,明确告知Web Start加载swing-worker-1.1.jar中的org.jdesktop包类,示例配置如下:
<resources>
  <!-- 原有其他依赖配置保持不变 -->
  <jar href="swing-worker-1.1.jar" download="eager" />
  <package name="org.jdesktop.*" recursive="true" />
</resources>

同时完成以下检查:

  • 确认JNLP配置的codebase路径正确,swing-worker-1.1.jar可以通过该路径正常下载
  • 访问客户端的Java控制面板,将应用部署域名加入安全例外站点列表,避免swing-worker-1.1.jar因签名校验不通过被拦截
  • 执行javaws -uninstall命令清除本地Java Web Start缓存,避免旧的缓存资源干扰
JDK8针对JNLP与Java Web Start的核心调整
  • 类加载规则变更:JDK7及以后的Web Start默认采用父类优先的类加载委托模型,和JDK6的应用类优先逻辑不同,同时对第三方jar的包扫描逻辑更严格,未明确声明归属的包可能不会被加载器识别。
  • 安全校验升级:JDK8大幅提升了Web Start的安全门槛,默认禁止加载未签名、自签名、使用弱签名算法的jar包,未加入例外站点的应用默认会被直接拦截。
  • 资源解析逻辑调整:对JNLP的codebase、资源href的路径校验更严格,JDK6下可以正常解析的相对路径在JDK8下可能出现资源定位失败的问题。
  • 废弃预告:JDK8是最后一个默认内置Java Web Start组件的LTS版本,JDK9及以后Oracle官方已正式移除该组件,后续如需使用需要依赖第三方开源实现。

内容的提问来源于stack exchange,提问作者Atul Rai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:06:03