当前位置: 首页 > 知识库问答 >
问题:

NoSuchMethodError:在com中。太阳玻璃用户界面。赢WinApplication。staticScreen\u获取屏幕

蓟和煦
2023-03-14

自从升级到install4j 7.0.5和Java 10以来,在Windows上运行我们的应用程序的用户越来越多地报告应用程序抛出

java.lang.NoSuchMethodError: <init>
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
    at javafx.graphics/com.sun.glass.ui.Screen.initScreens(Unknown Source)
    at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Unknown Source)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
    at java.base/java.lang.Thread.run(Unknown Source)


UiLauncher (WAITING)
    at java.base@10.0.1/jdk.internal.misc.Unsafe.park(Native Method)
    at java.base@10.0.1/java.util.concurrent.locks.LockSupport.park(Unknown Source)
    at java.base@10.0.1/java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(Unknown Source)
    at java.base@10.0.1/java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(Unknown Source)
    at java.base@10.0.1/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(Unknown Source)
    at java.base@10.0.1/java.util.concurrent.CountDownLatch.await(Unknown Source)
    at platform/javafx.graphics@10.0.1/com.sun.javafx.tk.quantum.QuantumToolkit.startup(Unknown Source)
    at platform/javafx.graphics@10.0.1/com.sun.javafx.application.PlatformImpl.startup(Unknown Source)
    at platform/javafx.graphics@10.0.1/com.sun.javafx.application.PlatformImpl.startup(Unknown Source)
    at platform/javafx.swing@10.0.1/javafx.embed.swing.JFXPanel.initFx(Unknown Source)
    at platform/javafx.swing@10.0.1/javafx.embed.swing.JFXPanel.<init>(Unknown Source)
    at java.base@10.0.1/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base@10.0.1/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base@10.0.1/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.base@10.0.1/java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.base@10.0.1/java.lang.Class.newInstance(Unknown Source)
    at app//...

通过install4j创建的exe文件启动应用程序时。该错误是通过创建javafx实例触发的。嵌入摆动JFXPanel穿透反射:

Class.forName("javafx.embed.swing.JFXPanel").newInstance();

我们目前怀疑由于某种原因加载了不兼容的DLL(glass.DLL似乎包含stacktrace中提到的本机方法)。

有人知道如何防止此错误吗?例如,有没有办法将通过install 4j生成的exe执行应用程序时使用的java.library.path限制在嵌入安装程序并与应用程序一起在本地安装的Java运行时环境中?根据一位用户的说法,如果使用

java -jar app.jar

命令因此,问题似乎在于install4j创建的可执行文件。

共有1个答案

商同化
2023-03-14

解决此问题的方法似乎是从系统%PATH%中删除所有出现的“glass.dll”。

不过,我认为必须在其他地方实现修复;无论是在Java运行时还是在Install4j代码中,但不能在实际应用程序的Java代码中实现:

出于某种原因,Install4j中的Java运行时版本在定位库时最后检查捆绑的JRE。在这种情况下,有问题的本机库是glass.dll,它应该包含请求的

这不是应用程序代码(java代码)的问题,也不是捆绑的JDK的问题,这是安装4j生成的exe文件(或者可能Java内部)如何尝试解析本机dlls的问题。它应该首先检查捆绑的JRE目录,而不是首先检查所有路径元素。

使用Procmon,您可以看到它加载任意放置的玻璃。路径中的dll文件,首先:我将JDK 1.8中的一个添加到我的路径元素中,得到了这个(加上崩溃):

 类似资料:
  • 我有一个在github上的项目。我有两台不同的计算机使用该项目。我提到github的原因是因为这两台计算机有完全相同的项目。但是在其中一台计算机上,我得到一个包不存在错误。那个包com.sun.glass 下面我试着用 我的netbeans autocomplete显示包sun存在于com中,但包glass不存在于sun中。我在网上找不到关于这个错误的任何信息,已经搜索了几天了。正如我所说,最奇怪

  • 我试图在JavaFX项目中使用未装饰的阶段,。这是一个模块化的Gradle项目。它也是一个多项目构建,尽管因为我正在IntelliJ中处理它,所以将其称为多模块构建可能更合适。 我希望能够为这个未装饰的阶段添加常规功能。我已经能够添加常用的最小化、还原和关闭按钮,但如果用户单击Windows任务栏中的程序图标,我希望它也能最小化和还原。 我在这个较旧的StackOverflow帖子中找到了可能执行

  • 我已经完成了在glassfish v4中添加SSL证书的步骤。我已经通过浏览器和java swing客户端验证了它的有效性(我在客户端使用apache的http客户端库) 什么不工作是管理控制台!由于成功导入SSL,我不能再连接到管理控制台,http://www.myhost.com:4848,我仍然得到登录屏幕,总是工作的管理员用户名/密码组合已停止工作。我也注意到当尝试部署一个网络应用程序从n

  • 问题内容: 我正在下载Java EE,似乎有许多不同的下载选项。我不确定应该选择哪一个。Java EE似乎与GlassFish打包在一起。谁能告诉我这是什么,它对我有什么好处? 其次,如果我只是想玩转并了解Java EE,那么对我来说下载的是什么?列出选项的链接在下面… Java EE下载选项 问题答案: 首先,将近五年前它被称为Java EE。首字母缩略词J2EE仍指5.0之前的旧Java EE

  • 我将mysql驱动程序放入glassfish/admin1/lib,我在尝试与GlassFish 3.1.2建立连接时收到此错误 为SimpleCRUD_ConnectionPool Ping连接池失败。类名错误或未为:com设置类路径。mysql。jdbc。jdbc2。可选择的MysqlDataSource请检查服务器。记录更多细节。 野兔配置: 池名称:SimpleCRUD_Connectio

  • 我编写了一个maven应用程序,应该在Glassfish 4上运行。 标准应用程序配置如下所示: 现在的问题是,生成Json的资源应该使用jackson 2.3注释。但我的玻璃鱼用了一些鳕鱼。。。提供json的包。科德豪斯是杰克逊的旧版本。我想使用fasterxml中的新注释,它提供了@JsonIdentityInfo注释。 我想我可以通过写以下内容来解决我的问题: 但是没有效果。现在Glassf