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

swing app的Graal本机映像:在映像堆中检测到已启动的线程

房时铭
2023-03-14
public class SimpleApp {
    public static void main( String[] args ) {
        JOptionPane.showMessageDialog(null, "Ciao", "Info", JOptionPane.INFORMATION_MESSAGE);
    }
} 

当我尝试用本机映像创建本机映像时--没有回退我得到以下结果:

错误:在映像堆中检测到已启动的线程。映像生成器中运行的线程不再在映像运行时运行。该对象可能是由类初始值设定项创建的,可以从静态字段访问。默认情况下,所有类初始化都在本机映像构建期间完成。您可以使用选项-H:ClassInitialization=,手动将类初始化延迟到映像运行时。或者,您可以编写自己的初始化方法,并从主入口点显式调用它们。

详细信息:Trace:object sun。java2d。opengl。OGLRenderQueue字段sun。java2d。opengl。OGLRenderQueue。存在

共有1个答案

满增
2023-03-14

这都与类应该何时初始化有关——有一篇来自GraalVM团队的关于这个主题的更新文章:https://medium.com/graalvm/updates-on-class-initialization-in-graalvm-native-image-generathtml" target="_blank">ion-c61faca461f7

短版本:使用跟踪(在Graal包的较新版本中添加)查找所谓的问题类,然后将其设置为在运行时初始化。说起来容易,做起来难。值得一提的是,我在19.2(企业版)和一些包含AWT的随机代码中遇到了同样的问题。不过,信息已经发生了变化(为了清晰起见,稍微编辑了一下):

错误:在映像堆中检测到一个已启动的线程。在映像运行时,运行在映像生成器中的线程不再运行。要查看该对象是如何实例化的,请使用-H: TraceClass初始化。该对象可能是由类初始化器创建的,并且可以从静态字段访问。您可以在映像运行时通过使用选项-在构建时初始化=来请求类初始化

我会努力解决这个问题(可能从AWT的“Hello World”开始,如果我成功了,我会用具体的细节更新我的答案。谷歌上到处都是本机图像无法使用Swing/AWT/JavaFX的例子,所以我不确定我会成功。

免责声明:我为Oracle工作,但不是在一个与Graal开发者关系密切的组织中(可能没有共同的管理者)。我说什么都是我的意见。

 类似资料:
  • 问题内容: 我可以使用以下2个docker命令从Kibana开始elasticsearch … 但是如何使用docker的脚本支持来启动es? 通常,这是通过在elasticsearch.yml文件中添加2行来完成的。 如何更改docker映像中的配置文件? 问题答案: 构建包含这些选项的自定义图像。 为您的Docker映像创建目录 创建一个包含所有选项的 创建一个复制配置文件的文件。 构建并标记

  • 我已经成功地用Quarkus/Graal构建了一个本机映像,我可以在终端中运行它(还没有容器)。但是,它会因“分段错误(堆芯转储)”消息而崩溃。如何获得有关错误的更多信息?是否有标志要传递给本机可执行文件或在构建映像时传递? 我使用的是GraalVM版本20.2.0(Java版本11.0.8) 任何帮助都是非常感激的。 谢谢

  • 问题内容: 我有一个泊坞窗映像,我想找出它是从哪个映像创建的。当然有多层,但是我想找出最后一张图像(dockerfile中该图像的FROM语句)? 我尝试使用,但无法在其中找到此信息。 我尝试使用以下命令,但它给我一条错误消息 这是我收到的错误消息 问题答案: 您可以使用此答案中建议的方法:https : //stackoverflow.com/a/53841690/3691891 首先,拉: 获

  • Quarkus-构建本机可执行文件指南讨论了如何构建和测试本机可执行文件,以及如何在docker容器中构建本机可执行文件。 我遵循本指南使用Docker设置了一个通用的本机可执行文件构建,我们正在CI服务器上使用它,并且无论主机操作系统如何,都可以在本地构建它。 但是,生成的本机可执行文件必须在构建器docker映像使用的架构上运行,但Maven和Gradle测试任务尝试直接执行生成的映像。例如,

  • 我正在为一个django应用程序创建一个 docker-compose 配置,Dockerfile 成功构建,但是当我编写它们时,django 返回一个问题 - 无法连接到 posgres。 我运行<code>docker compose运行web bash<code>,发现redis和posgres都无法连接。 我的docker-compose.yml文件: 执行< code>docker-co

  • 我有一个小Java应用程序,它使用Micronaut 2.0.0实现了一个RESTful API。在引擎盖下,它使用Redisson 3.13.1进入Redis。Redisson则使用Netty(4.1.49)。 该应用程序在“经典”java(在HotSpot上,java 8和java 11)中运行良好。 我正在尝试使用GraalVM从这个应用程序构建一个本机映像。 命令大致如下: 以下是我得到的