有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java15模块化设置中使用Eclipse中的SWT

我只是尝试使用以下方法运行基本的Hello World(project Trial0)应用程序:

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

根据Developing SWT applications using Eclipse中的(有点古老,是关于JDK1.4和SWT3.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二进制和源代码”并下载zip文件 swt-4.18-gtk-linux-x86_64.zip
  4. 拉链包括“swt”。jar'(其中包括“.so”文件)。启动Eclipse的“File>;Import>;General>;现有项目到工作区”,选择上面的zip文件作为“归档文件”

在使用导入的SWT项目的项目中,我立即遇到了模块化/拼图障碍。编译器显然不允许查看未模块化的SWT类:

"The package org.eclipse.swt.widgets is not accessible"

在此代码中:

package trial;

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

public class MyApp {

}

以下是项目:

The package org.eclipse.swt.widgets is not accessible

注意导入项目上的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 jar拉入模块化领域


共 (1) 个答案

  1. # 1 楼答案

    正如您在输出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;

    Name of automatic module 'swt' is unstable, it is derived from the module's file name.

    没关系

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

    项目org.eclipse.swt位于导入项目的模块路径上,而不是类路径

    The importing project's module path must look like this

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

    Access rule set up in the importing project

    请注意,导入项目的“模块依赖项”中未定义任何特定内容:

    Trial 0 Module Dependencies