据我了解,Eclipse SWT 在 Windows 操作系统中依赖于 Win32 API,在 Linux 操作系统中依赖于 GTK。目前,Windows 中的 Eclipse SWT 支持创建多个 Display 实例(多个 Java 线程可以同时创建自己的 Display 实例),而在 Linux 中则不然。
我知道 GTK 不是线程安全的,因此不允许每个应用程序创建多个 GTK 实例(UI 线程),这反过来又不允许 SWT 在多线程环境中创建多个显示。
我尝试为 SWT Linux 调试 Display.java,其中实例化了 GTK 。我尝试在 Windows 中调试 SWT 代码,但是
CreateDisplay
中的 Display.java
方法在 Windows SWT 实现中为空。
注意:我检查了
CreateThread
API,但未在 SWT 中使用。是 SWT 负责多种 Display 支持,还是底层 win32 API?
我没有从 win32 获得确切的 API。 但我从here得到了一个提示,它说为了提高性能,对图形设备接口(GDI)对象(例如调色板、设备上下文、区域等)的访问不是序列化的。这意味着 Win32 负责允许 SWT 生成多个线程来访问 GDIP 等操作系统资源,并且 SWT 已经实现了处理多个显示概念所需的同步。