本文介紹了在Java15模塊化設(shè)置中使用Eclipse中的SWT的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我只是嘗試使用以下命令運(yùn)行基本的Hello World(項(xiàng)目Trial0
)應(yīng)用程序:
Eclipse版本:2020-12(4.18.0)
使用SWT 4.18(Linux、GTK)
將Java編譯器設(shè)置為15
按照Developing SWT applications using Eclipse中的描述(有點(diǎn)古老,是關(guān)于JDK 1.4和SWT 3.1),我已經(jīng)將SWT項(xiàng)目導(dǎo)入到Eclipse中:
-
轉(zhuǎn)到https://download.eclipse.org/eclipse/downloads/index.html#Stable_Builds
單擊";4.18";到達(dá)https://download.eclipse.org/eclipse/downloads/drops4/R-4.18-202012021800/
向下滾動(dòng),直到到達(dá)";SWT二進(jìn)制文件和源代碼,然后下載壓縮文件(&QOT;SWT BINARY&SOURCE&QOOT;)
swt-4.18-gtk-linux-x86_64.zip。
壓縮包包含‘swt.jar’(包含‘.so’文件)。啟動(dòng)Eclipse的";File>;Import>;General&>Existing Projects to Workspace";,然后選擇上面的zip作為";Archive File";
我立即在使用導(dǎo)入的SWT項(xiàng)目的項(xiàng)目中遇到模塊化/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 {
}
這里是項(xiàng)目:
注意導(dǎo)入項(xiàng)目上的module-info.java
文件。它包含:
module trial0 {
requires java.desktop;
}
swt.jar
確實(shí)不播發(fā)模塊:
$ 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
個(gè)文件添加到SWT JAR中?有沒有另一種將SWT罐子拉到模塊化區(qū)域的&規(guī)范&方法?
推薦答案
根據(jù)輸出describing the module from the jar文件可以看到。
在module-info.java
文件中,您需要添加以下指令:
requires swt;
這將為您提供對(duì)模塊swt
(自動(dòng)模塊名稱)聲明的包org.eclipse.swt.widgets
的訪問權(quán)限
contains org.eclipse.swt.widgets
其描述本身。
導(dǎo)入項(xiàng)目的文件module-info.java
現(xiàn)在包含:
module trial0 {
requires java.desktop;
requires swt;
}
Eclipse將此警告附加到行requires swt;
:
自動(dòng)模塊”swt”的名稱不穩(wěn)定,它派生自
模塊的文件名。
沒關(guān)系。
以上可能仍不起作用。在這種情況下,請(qǐng)驗(yàn)證以下內(nèi)容:
項(xiàng)目org.eclipse.swt
位于導(dǎo)入項(xiàng)目的Modulepath,而不是Classpath:
導(dǎo)入的模塊上需要有訪問規(guī)則。以下訪問規(guī)則似乎有效:
請(qǐng)注意,在";模塊依賴項(xiàng)";中沒有為導(dǎo)入項(xiàng)目定義任何特定內(nèi)容:
這篇關(guān)于在Java15模塊化設(shè)置中使用Eclipse中的SWT的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,