Seb*_*iot 5 java swing awt apache-fop
我们有时会从客户那里收到这个奇怪的错误(自动地,直到现在还没有填写用户报告),我们没有人能理解它。用户在 Win7 机器上启动我们的 Swing Java-Web-Start“胖客户端”,最终使用一些应该生成 PDF 文档的操作(使用古老的、修改过的 Apache FOP 版本),最终得到这个错误。到目前为止,它在我们这边是不可复制的。谷歌也没有帮助解决这个问题。
最大的问题是,当需要 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
Run Code Online (Sandbox Code Playgroud)
编辑:我找到了导致错误的代码(在 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;
}
}
);
// ...
}
Run Code Online (Sandbox Code Playgroud)
这可能不是OP错误的原因,但这对于其他因其他原因而出现相同错误的人来说是这样的。
如果在应用程序仍在运行时 Java 运行时环境的版本更新,则可能会发生此错误;例如,如果它是通过 Windows 上的 MSI/EXE 安装程序或 yum/apt-get/etc 进行更新的。在 *nix 上。更新后,正在运行的 Java 应用程序正在查找的 DLL (Windows) 或 SO (Linux/Unix) 可能在它所知道的位置不再可用,因此找不到它。
在类 Unix 环境中,文件锁不一定能防止文件删除,而在服务器上,长时间运行的服务只需要偶尔依赖这些 DLL 的特定功能,这种情况更有可能发生。
在这种情况下,需要重新启动应用程序。