在Java15模块化设置中使用Eclipse中的SWT [英] Use SWT in Eclipse in a Java 15 modular setup

查看:43
本文介绍了在Java15模块化设置中使用Eclipse中的SWT的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是尝试使用以下命令运行基本的Hello World(项目Trial0)应用程序:

  • Eclipse版本:2020-12(4.18.0)
  • 使用SWT 4.18(Linux、GTK)
  • 将Java编译器设置为15

按照Developing SWT applications using Eclipse中的描述(有点古老,是关于JDK 1.4和SWT 3.1),我已经将SWT项目导入到Eclipse中:

  1. 转到https://download.eclipse.org/eclipse/downloads/index.html#Stable_Builds
  2. 单击";4.18";到达https://download.eclipse.org/eclipse/downloads/drops4/R-4.18-202012021800/
  3. 向下滚动,直到到达";SWT二进制文件和源代码,然后下载压缩文件(&QOT;SWT BINARY&SOURCE&QOOT;) swt-4.18-gtk-linux-x86_64.zip
  4. 压缩包包含‘swt.jar’(包含‘.so’文件)。启动Eclipse的";File>;Import>;General&>Existing Projects to Workspace";,然后选择上面的zip作为";Archive File";

我立即在使用导入的SWT项目的项目中遇到模块化/Jigsaw问题。编译器显然不允许查看未模块化的SWT类:

&q;无法访问org.eclipse.swt.widgets包

在此代码中:

package trial;

import org.eclipse.swt.widgets.*;   // "The package org.eclipse.swt.widgets is not accessible"

public class MyApp {

}

这里是项目:

注意导入项目上的module-info.java文件。它包含:

module trial0 {
    requires java.desktop;
}

swt.jar确实不播发模块:

$ jar --file=swt.jar --describe-module
No module descriptor found. Derived automatic module.

swt automatic
requires java.base mandated
contains org.eclipse.swt
contains org.eclipse.swt.accessibility
contains org.eclipse.swt.awt
contains org.eclipse.swt.browser
contains org.eclipse.swt.custom
contains org.eclipse.swt.dnd
contains org.eclipse.swt.events
contains org.eclipse.swt.graphics
contains org.eclipse.swt.internal
contains org.eclipse.swt.internal.accessibility.gtk
contains org.eclipse.swt.internal.cairo
contains org.eclipse.swt.internal.dnd.gtk
contains org.eclipse.swt.internal.gtk
contains org.eclipse.swt.internal.image
contains org.eclipse.swt.internal.opengl.glx
contains org.eclipse.swt.internal.webkit
contains org.eclipse.swt.layout
contains org.eclipse.swt.opengl
contains org.eclipse.swt.printing
contains org.eclipse.swt.program
contains org.eclipse.swt.widgets
是否需要将module-info.java个文件添加到SWT JAR中?有没有另一种将SWT罐子拉到模块化区域的&规范&方法?

推荐答案

根据输出describing the module from the jar文件可以看到。

module-info.java文件中,您需要添加以下指令:

requires swt;

这将为您提供对模块swt(自动模块名称)声明的包org.eclipse.swt.widgets的访问权限

contains org.eclipse.swt.widgets

其描述本身。

导入项目的文件module-info.java现在包含:

module trial0 {
    requires java.desktop;
    requires swt;
}

Eclipse将此警告附加到行requires swt;

自动模块"swt"的名称不稳定,它派生自 模块的文件名。

没关系。

以上可能仍不起作用。在这种情况下,请验证以下内容:

项目org.eclipse.swt位于导入项目的Modulepath,而不是Classpath

导入的模块上需要有访问规则。以下访问规则似乎有效:

请注意,在";模块依赖项";中没有为导入项目定义任何特定内容:

这篇关于在Java15模块化设置中使用Eclipse中的SWT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆