【问题标题】:"java.lang.UnsatisfiedLinkError: no awt in java.library.path" in running JWS Swing app运行 JWS Swing 应用程序时出现“java.lang.UnsatisfiedLinkError:java.library.path 中没有 awt”
【发布时间】:2016-02-16 15:58:44
【问题描述】:

我们有时会从客户那里收到这个奇怪的错误(自动地,直到现在还没有填写用户报告),我们都无法理解它。用户在 Win7 机器上启动了我们的 Swing Java-Web-Start “胖客户端”,最终使用了一些应该生成 PDF 文档的操作(使用一个古老的、修改过的 Apache FOP 版本),最终得到了这个错误。到目前为止,它在我们这边是不可重现的。 Google 在这方面也没有提供帮助。

最大的问题是,当需要 awt dll 来激活导致错误的操作时,怎么会丢失 awt dll?

有什么东西正在卸载 awt dll 吗?堆栈跟踪几乎总是相同的,我们没有发现任何证据表明这之前有一些其他错误。这可能是未记录的先前本机错误的结果吗?

编辑:PDF 生成在后台线程中运行,而阻塞的“等待”对话框阻止用户关闭或以其他方式操作 UI。

java.lang.UnsatisfiedLinkError: no awt in java.library.path
    at java.lang.ClassLoader.loadLibrary
    at java.lang.Runtime.loadLibrary0
    at java.lang.System.loadLibrary
    at sun.java2d.cmm.lcms.LCMS$1.run
    at java.security.AccessController.doPrivileged
    at sun.java2d.cmm.lcms.LCMS.getModule
    at sun.java2d.cmm.lcms.LcmsServiceProvider.getModule
    at sun.java2d.cmm.CMMServiceProvider.getColorManagementModule
    at sun.java2d.cmm.CMSManager.getModule
    at java.awt.color.ICC_Profile.getInstance
    at java.awt.color.ICC_Profile.getInstance
    at org.apache.fop.pdf.PDFICCBasedColorSpace.setupsRGBColorProfile
    at org.apache.fop.pdf.PDFICCBasedColorSpace.setupsRGBAsDefaultRGBColorSpace
    at org.apache.fop.render.pdf.PDFRenderingUtil.addsRGBColorSpace
    at org.apache.fop.render.pdf.PDFRenderingUtil.setupPDFDocument
    at org.apache.fop.render.pdf.PDFDocumentHandler.startDocument
    at org.apache.fop.render.intermediate.IFRenderer.startRenderer
    at org.apache.fop.area.RenderPagesModel
    at org.apache.fop.area.AreaTreeHandler.setupModel
    at org.apache.fop.area.AreaTreeHandler
    at org.apache.fop.render.RendererFactory.createFOEventHandler
    at org.apache.fop.fo.FOTreeBuilder
    at org.apache.fop.apps.Fop.createDefaultHandler
    at org.apache.fop.apps.Fop
    at org.apache.fop.apps.FopFactory.newFop
    at org.apache.fop.apps.FopFactory.newFop
    at ...
    at javax.swing.SwingWorker$1.call
    at java.util.concurrent.FutureTask.run
    at javax.swing.SwingWorker.run
    at ...
    at java.util.concurrent.ThreadPoolExecutor.runWorker
    at java.util.concurrent.ThreadPoolExecutor$Worker.run
    at java.lang.Thread.run

编辑:我找到了导致错误的代码(在 grepcode.com 中):

/* the class initializer which loads the CMM */
static {
    java.security.AccessController.doPrivileged(
        new java.security.PrivilegedAction() {
            public Object run() {
                /* We need to load awt here because of usage trace and
                 * disposer frameworks
                 */
                System.loadLibrary("awt"); // HERE!
                System.loadLibrary("lcms");
                return null;
            }
        }
    );
// ...
}

【问题讨论】:

  • 我认为还有一些其他缺失的 dll/lib。你能要求你的客户重新安装jdk吗?
  • 我终于得到了热线的回复。没有客户报告此错误,这基本上意味着他们要么没有看到它,要么通过简单的重新启动应用程序来解决它(我们的客户将无法/不允许自己重新安装 Java...)。
  • 我们从我们的一位用户那里得到了同样的错误报告,但没有任何线索:josm.openstreetmap.de/ticket/13973您当时是否向 Oracle 提交了错误报告?
  • @vip 根据经验,不能“重现”且没有“测试用例”的错误报告几乎没有受到关注(无处不在,不仅仅是在 Oracle),所以我必须承认我没有麻烦向 Oracle 发送报告。

标签: java swing awt apache-fop


【解决方案1】:

这可能不是 OP 错误的原因,但这对于其他因其他原因而出现相同错误的人来说是这样的。

如果 Java 运行时环境的版本在应用程序仍在运行时更新,则可能会发生此错误;例如如果它是通过 Windows 上的 MSI/EXE 安装程序或 yum/apt-get/etc 更新的。在 *nix 上。更新后,正在运行的 Java 应用程序正在寻找的 DLL (Windows) 或 SO (Linux/Unix) 可能在它知道的位置不再可用,因此找不到。

这更可能出现在类 Unix 环境中,文件锁不一定能防止文件删除,而在服务器上,长时间运行的服务只需要偶尔依赖这些 DLL 的特定功能。

在这种情况下,需要重新启动应用程序。

【讨论】:

  • 正如你所说,这可能不是我具体问题的答案,但它仍然是一个非常好的观点。 +1
猜你喜欢
  • 2012-03-05
  • 1970-01-01
  • 2011-08-06
  • 2010-09-06
  • 2019-12-24
  • 1970-01-01
  • 2021-12-13
  • 2011-11-27
  • 1970-01-01
相关资源
最近更新 更多