gpt4 book ai didi

java - 是否可以使用调用 Java 方法(回调)的 JNI native 线程来更新 Swing UI 组件?

转载 作者:行者123 更新时间:2023-11-30 11:44:39 26 4
gpt4 key购买 nike

<分区>

我正在开发一个使用 GStreamer 和 OpenCV 进行视频处理的应用程序。任务是从 OpenCV 源获取图像,将它们推送/拉入 GStreamer 管道(进行转换和解码,我必须稍后流式传输视频数据)并在 Java 语言环境中处理图像。

所以我用 C 构建了一个本地框架来管理这个任务。现在,我使用 JNI 访问我的 C-Library,并将正在执行的 GStreamer 主循环附加到 JVM。有一些线程与我使用 SDL 库的图像处理无关,但没有调用任何 Java 方法。显然它到目前为止有效。我将原始图像导入 Java,我还可以使用 ByteBuffer(在 native 端创建)get 方法和 System.err 显示其字节数据。 println.

问题是以某种方式在 GUI 中显示这些图像。我将 Swing 框架用于我的图形环境。

因此,我像往常一样通过扩展 JPanel 制作了一个快速而肮脏的 ImageView ,这通常在我仅使用 Java 时有效。

我覆盖了 paint 方法以使用 Graphics.drawImage 方法绘制图像。图像是通过将原始数据复制到整数数组中生成的,原始数据由 native 回调传递,然后将此整数数组分配给 MemoryImageSource。我使用(JFrame 的)createImage 方法来获取 Image 对象。一切都返回明显有效的引用。没有抛出任何异常。至少我看不到。

尝试了几种方法以及只为 MemoryImageSource 使用字节数组,到目前为止还没有生成图像。但是数据就在那里,我可以读取它!

我可以复制数据、显示字节数据,但无法在我的自定义 JPanel View 区域中显示可显示的图像。就好像图像是全黑或透明之类的。

这个问题真的打败了我,我不知道如何说服这个东西工作。我假设这里的线程有几个问题。但我没有针对此特定场景的更多资源。

我做错了什么,或者如何以正确的方式做更好。

附加:如果我改变窗口的大小,应用程序有时也会崩溃或 GUI 卡住,所以我暂时避免这样做。所以原生线程有问题。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com