「Java」の版間の差分
(同期) |
(同期) |
||
14行目: | 14行目: | ||
:Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン ([[Wikipedia:ja:Java仮想マシン|JVM]]) で動くバイトコードにコンパイルされます。 |
:Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン ([[Wikipedia:ja:Java仮想マシン|JVM]]) で動くバイトコードにコンパイルされます。 |
||
− | Arch Linux は、オープンソースの [https://openjdk.java.net/ OpenJDK] バージョン 8、11、17、そして |
+ | Arch Linux は、オープンソースの [https://openjdk.java.net/ OpenJDK] の[[Wikipedia:Java version history#Release_table|バージョン]] 8、11、17、21 (''Long-Term Support'' (LTS) のバージョン群)、そして 22 (最新バージョン) を公式にサポートしています。これらの JVM は全てインストールしても衝突せず、ヘルパースクリプト {{ic|archlinux-java}} ({{Pkg|java-runtime-common}} パッケージによってインストールされます) を使って切り替えることが可能です。他の Java 環境はいくつか [[Arch User Repository]] からインストールすることができますが、公式のサポートはありません。 |
== インストール == |
== インストール == |
||
{{Note| |
{{Note| |
||
− | * Arch Linux が公式にサポートしているのは [[#OpenJDK|OpenJDK]] 実装だけです。 |
+ | * ''Arch Linux'' が公式にサポートしているのは [[#OpenJDK|OpenJDK]] 実装だけです。 |
− | * インストール後、Java 環境をシェルに認識させる必要があります ({{ic|$PATH}} 変数)。コマンドラインから {{ic|/etc/profile}} を source するか、デスクトップ環境から一度ログアウトしてログインし直すか、または再起動することで、シェルに認識させることができます。 |
+ | * インストール後、Java 環境をシェルに認識させる必要があります ({{ic|$PATH}} 変数)。コマンドラインから {{ic|/etc/profile}} を source するか、[[デスクトップ環境]]から一度ログアウトしてログインし直すか、または再起動することで、シェルに認識させることができます。 |
}} |
}} |
||
− | 2つの ''共通'' パッケージがそれぞれ依存パッケージとしてインストールされます: {{Pkg|java-runtime-common}} (全ての Java Runtime Environment に共通のファイルが含まれています) と {{Pkg|java-environment-common}} (全ての Java Development Kit に共通のファイルが含まれています) です。提供される環境ファイル {{ic|/etc/profile.d/jre.sh}} は、シンボリックリンクによって参照されている {{ic|/usr/lib/jvm/default/bin}} を指しており、このシンボリックリンクは {{ic|archlinux-java}} ヘルパースクリプトによって設定されます。 |
+ | 2つの ''共通'' パッケージがそれぞれ依存パッケージとしてインストールされます: {{Pkg|java-runtime-common}} (全ての ''Java Runtime Environment'' に共通のファイルが含まれています) と {{Pkg|java-environment-common}} (全ての ''Java Development Kit'' に共通のファイルが含まれています) です。提供される環境ファイル {{ic|/etc/profile.d/jre.sh}} は、シンボリックリンクによって参照されている {{ic|/usr/lib/jvm/default/bin}} を指しており、このシンボリックリンクは {{ic|archlinux-java}} ヘルパースクリプトによって設定されます。 |
{{Warning|シンボリックリンク である {{ic|/usr/lib/jvm/default}} と {{ic|/usr/lib/jvm/default-runtime}} を変更したい場合は、'''必ず''' {{ic|archlinux-java}} を使う必要があります。}} |
{{Warning|シンボリックリンク である {{ic|/usr/lib/jvm/default}} と {{ic|/usr/lib/jvm/default-runtime}} を変更したい場合は、'''必ず''' {{ic|archlinux-java}} を使う必要があります。}} |
||
− | これは、{{ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}</nowiki>}} 内のデフォルトの作業 Java 環境や、{{ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}/jre</nowiki>}} 内の Java ランタイムを表示したり指定したりするために使用されます。 |
+ | これは、{{ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}</nowiki>}} 内のデフォルトの作業 ''Java'' 環境や、{{ic|<nowiki>/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}/jre</nowiki>}} 内の ''Java'' ランタイムを表示したり指定したりするために使用されます。 |
− | Java 環境のほとんどの実行ファイルは、{{ic|/usr/bin/}} 内のダイレクトリンクによって提供されます。一方、その他は {{ic|$PATH}} でアクセスできます |
+ | Java 環境のほとんどの実行ファイルは、{{ic|/usr/bin/}} 内のダイレクトリンクによって提供されます。一方、その他は {{ic|$PATH}} でアクセスできます。 |
=== OpenJDK === |
=== OpenJDK === |
||
− | [[Wikipedia:ja:OpenJDK|OpenJDK]] は、Java Platform, Standard Edition (Java SE) のオープンソースな実装であり、公式リファレンス実装として指定されています。OpenJDK ビルドには、[https://adoptium.net Adoptium] (以前は AdoptOpenJDK として知られていました) や [https://aws.amazon.com/corretto/ Amazon Corretto] などの複数のディストリビューターが存在しています。Arch Linux |
+ | [[Wikipedia:ja:OpenJDK|OpenJDK]] は、''Java Platform, Standard Edition'' (Java SE) のオープンソースな実装であり、公式リファレンス実装として指定されています。''OpenJDK'' ビルドには、[https://adoptium.net Adoptium] (以前は ''AdoptOpenJDK'' として知られていました) や [https://aws.amazon.com/corretto/ Amazon Corretto] などの複数のディストリビューターが存在しています。''Arch Linux OpenJDK'' パッケージは[https://hg.openjdk.java.net/ 上流の OpenJDK ソースコード]からビルドされています。 |
− | ;ヘッドレス JRE: 最小限の Java 実行環境 - 非 GUI な Java プログラムを実行するために必要。 |
+ | ;ヘッドレス JRE: 最小限の ''Java'' 実行環境 - 非 GUI な ''Java'' プログラムを実行するために必要。 |
− | ;フル JRE: 完全な Java 実行環境 - Java の GUI プログラムを実行するために必要。 |
+ | ;フル JRE: 完全な ''Java'' 実行環境 - ''Java'' の GUI プログラムを実行するために必要。 |
− | ;JDK:[[Wikipedia:ja:Java Development Kit|Java Development Kit]] - Java で開発するために必要。 |
+ | ;JDK:[[Wikipedia:ja:Java Development Kit|Java Development Kit]] - ''Java'' で開発するために必要。 |
− | + | JDK、JRE、そして JRE ヘッドレスは互いに衝突します。これは、より小さいパッケージがより大きいパッケージのサブセットであるためです。つまり、JDK は JRE を提供すると同時に JRE と衝突し、JRE はヘッドレス JRE を提供すると同時にヘッドレス JRE と衝突します。 |
|
{| class="wikitable" |
{| class="wikitable" |
||
! バージョン !! ヘッドレス JRE !! フル JRE !! JDK !! ドキュメント !! ソース |
! バージョン !! ヘッドレス JRE !! フル JRE !! JDK !! ドキュメント !! ソース |
||
|- |
|- |
||
− | | [https://openjdk.java.net/projects/jdk/ |
+ | | [https://openjdk.java.net/projects/jdk/22/ OpenJDK 22] || {{Pkg|jre-openjdk-headless}} || {{Pkg|jre-openjdk}} || {{Pkg|jdk-openjdk}} || {{Pkg|openjdk-doc}} || {{Pkg|openjdk-src}} |
+ | |- |
||
+ | | [https://openjdk.java.net/projects/jdk/21/ OpenJDK 21] || {{Pkg|jre21-openjdk-headless}} || {{Pkg|jre21-openjdk}} || {{Pkg|jdk21-openjdk}} || {{Pkg|openjdk21-doc}} || {{Pkg|openjdk21-src}} |
||
|- |
|- |
||
| [https://openjdk.java.net/projects/jdk/17/ OpenJDK 17] || {{Pkg|jre17-openjdk-headless}} || {{Pkg|jre17-openjdk}} || {{Pkg|jdk17-openjdk}} || {{Pkg|openjdk17-doc}} || {{Pkg|openjdk17-src}} |
| [https://openjdk.java.net/projects/jdk/17/ OpenJDK 17] || {{Pkg|jre17-openjdk-headless}} || {{Pkg|jre17-openjdk}} || {{Pkg|jdk17-openjdk}} || {{Pkg|openjdk17-doc}} || {{Pkg|openjdk17-src}} |
||
55行目: | 57行目: | ||
{{App|OpenJDK GA|Oracle による最新 OpenJDK 一般公開リリースビルド。|https://jdk.java.net|{{AUR|java-openjdk-bin}}}} |
{{App|OpenJDK GA|Oracle による最新 OpenJDK 一般公開リリースビルド。|https://jdk.java.net|{{AUR|java-openjdk-bin}}}} |
||
{{App|OpenJDK EA|Oracle による開発版用の最新 OpenJDK 早期アクセスビルド。|https://jdk.java.net|{{AUR|java-openjdk-ea-bin}}}} |
{{App|OpenJDK EA|Oracle による開発版用の最新 OpenJDK 早期アクセスビルド。|https://jdk.java.net|{{AUR|java-openjdk-ea-bin}}}} |
||
+ | {{App|OpenJDK Wakefield|Linux 版 JDK 用の未完成の Wayland デスクトップサポート。|https://openjdk.org/projects/wakefield/|{{AUR|jdk-openjdk-wakefield}}}} |
||
{{App|IcedTea-Web|Java Web Start と非推奨の Java ブラウザプラグイン。|https://icedtea.classpath.org/download/icedtea-web-docs/1.8/html/en/icedtea-web.html|{{Pkg|icedtea-web}}}} |
{{App|IcedTea-Web|Java Web Start と非推奨の Java ブラウザプラグイン。|https://icedtea.classpath.org/download/icedtea-web-docs/1.8/html/en/icedtea-web.html|{{Pkg|icedtea-web}}}} |
||
=== OpenJFX === |
=== OpenJFX === |
||
− | [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX] は、[[Wikipedia:ja:JavaFX|JavaFX]] のオープンソースな実装です。Oracle JDK を使用している場合は、このパッケージをインストールする[https://wiki.openjdk.java.net/display/OpenJFX/Repositories+and+Releases 必要はありません]。このパッケージは、Java のオープンソース実装 (OpenJDK プロジェクト) やその派生版のユーザのみを対象としています。 |
+ | [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX] は、[[Wikipedia:ja:JavaFX|JavaFX]] のオープンソースな実装です。''Oracle JDK'' を使用している場合は、このパッケージをインストールする[https://wiki.openjdk.java.net/display/OpenJFX/Repositories+and+Releases 必要はありません]。このパッケージは、''Java'' のオープンソース実装 (''OpenJDK'' プロジェクト) やその派生版のユーザのみを対象としています。 |
{| class="wikitable" |
{| class="wikitable" |
||
! バージョン !! 実行環境及び開発環境 !! ドキュメント !! ソース |
! バージョン !! 実行環境及び開発環境 !! ドキュメント !! ソース |
||
|- |
|- |
||
− | | [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX |
+ | | [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 22] || {{AUR|java-openjfx}} || {{AUR|java-openjfx-doc}} || {{AUR|java-openjfx-src}} |
+ | |- |
||
+ | | [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 21] || {{AUR|java21-openjfx}} || {{AUR|java21-openjfx-doc}} || {{AUR|java21-openjfx-src}} |
||
|- |
|- |
||
| [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 17] || {{AUR|java17-openjfx}} || {{AUR|java17-openjfx-doc}} || {{AUR|java17-openjfx-src}} |
| [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 17] || {{AUR|java17-openjfx}} || {{AUR|java17-openjfx-doc}} || {{AUR|java17-openjfx-src}} |
||
+ | |- |
||
+ | | [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 11] || {{AUR|java11-openjfx}} || {{AUR|java11-openjfx-doc}} || {{AUR|java11-openjfx-src}} |
||
+ | |- |
||
+ | | [https://wiki.openjdk.java.net/display/OpenJFX/Main OpenJFX 8] || {{AUR|java8-openjfx}} || {{AUR|java8-openjfx-doc}} || {{AUR|java8-openjfx-src}} |
||
|} |
|} |
||
− | |||
− | {{App|OpenJFX GA|Gluon による最新 OpenJFX 一般公開リリースビルド。|https://openjfx.io/|{{AUR|java-openjfx-bin}}}} |
||
− | {{App|OpenJFX EA|Gluon による開発版用の最新 OpenJFX 早期アクセスビルド。|https://openjfx.io/|{{AUR|java-openjfx-ea-bin}}{{Broken package link|package not found}}}} |
||
=== 他の実装 === |
=== 他の実装 === |
||
79行目: | 85行目: | ||
}} |
}} |
||
* {{App|Eclipse Adoptium/Temurin|Eclipse の JRE/JDK 実装。Hotspot JVM (以前は AdoptOpenJDK) をベースとしています。この JRE は、Eclipse Temurin として知られています。|https://adoptium.net/| {{AUR|jdk-temurin}} {{AUR|jdk17-temurin}} {{AUR|jdk11-temurin}} |
* {{App|Eclipse Adoptium/Temurin|Eclipse の JRE/JDK 実装。Hotspot JVM (以前は AdoptOpenJDK) をベースとしています。この JRE は、Eclipse Temurin として知られています。|https://adoptium.net/| {{AUR|jdk-temurin}} {{AUR|jdk17-temurin}} {{AUR|jdk11-temurin}} |
||
+ | }} |
||
+ | * {{App|AWS Corretto|OpenJDK の Amazon Web Services ディストリビューション。|https://aws.amazon.com/corretto/| {{AUR|amazon-corretto-8}} {{AUR|amazon-corretto-11}} {{AUR|amazon-corretto-17}} {{AUR|amazon-corretto-21-bin}} {{AUR|amazon-corretto-22-bin}} |
||
}} |
}} |
||
* {{App|OpenJ9|IBM によって提供されている、J9 JVM ベースの、Eclipse の JRE/JDK 実装。|https://www.eclipse.org/openj9/| {{AUR|jdk-openj9-bin}} {{AUR|jdk17-openj9-bin}} {{AUR|jdk11-openj9-bin}} {{AUR|jdk8-openj9-bin}} |
* {{App|OpenJ9|IBM によって提供されている、J9 JVM ベースの、Eclipse の JRE/JDK 実装。|https://www.eclipse.org/openj9/| {{AUR|jdk-openj9-bin}} {{AUR|jdk17-openj9-bin}} {{AUR|jdk11-openj9-bin}} {{AUR|jdk8-openj9-bin}} |
||
84行目: | 92行目: | ||
* {{App|IBM Certified|IBM Semeru Runtime Certified Edition。|https://www.ibm.com/semeru-runtimes/downloads|{{AUR|jdk11-j9-bin}}}} |
* {{App|IBM Certified|IBM Semeru Runtime Certified Edition。|https://www.ibm.com/semeru-runtimes/downloads|{{AUR|jdk11-j9-bin}}}} |
||
* {{App|IBM J9|IBM の JRE 実装。OpenJ9 のコードを使用。|https://www.ibm.com/support/pages/java-sdk-downloads|{{AUR|jdk8-j9-bin}} {{AUR|jdk7-j9-bin}} {{AUR|jdk7r1-j9-bin}}}} |
* {{App|IBM J9|IBM の JRE 実装。OpenJ9 のコードを使用。|https://www.ibm.com/support/pages/java-sdk-downloads|{{AUR|jdk8-j9-bin}} {{AUR|jdk7-j9-bin}} {{AUR|jdk7r1-j9-bin}}}} |
||
+ | * {{App|Liberica JDK|BellSoft の Liberica JDK 実装。|https://bell-sw.com/libericajdk/|{{AUR|liberica-jre-8-full-bin}} {{AUR|liberica-jdk-8-full-bin}} {{AUR|liberica-jre-11-bin}} {{AUR|liberica-jre-11-full-bin}} {{AUR|liberica-jdk-11-bin}} {{AUR|liberica-jdk-11-full-bin}} {{AUR|liberica-jdk-17-full-bin}} {{AUR|liberica-jdk-21-full-bin}}}} |
||
+ | * {{App|Microsoft OpenJDK|Microsoft の OpenJDK 実装。|https://www.microsoft.com/openjdk/| {{AUR|microsoft-openjdk-11-bin}} {{AUR|microsoft-openjdk-17-bin}} {{AUR|microsoft-openjdk-21-bin}}}} |
||
* {{App|Azul JDK|Azul の JDK 実装。OpenJDK の Azul Zulu ビルドはオープンソースですが、OpenJDK の Azul Zulu Prime ビルドは開発と評価用では無料の商用製品であることに注意してください。|https://www.azul.com/downloads/| |
* {{App|Azul JDK|Azul の JDK 実装。OpenJDK の Azul Zulu ビルドはオープンソースですが、OpenJDK の Azul Zulu Prime ビルドは開発と評価用では無料の商用製品であることに注意してください。|https://www.azul.com/downloads/| |
||
: Zulu: {{AUR|zulu-8-bin}} {{AUR|zulu-11-bin}} {{AUR|zulu-17-bin}} {{AUR|zulu-21-bin}} |
: Zulu: {{AUR|zulu-8-bin}} {{AUR|zulu-11-bin}} {{AUR|zulu-17-bin}} {{AUR|zulu-21-bin}} |
||
101行目: | 111行目: | ||
* {{App|CFR|Java 9、10、及びそれ以降の最近の機能をサポートしている Java 逆コンパイラ。|https://www.benf.org/other/cfr/|{{Pkg|cfr}}}} |
* {{App|CFR|Java 9、10、及びそれ以降の最近の機能をサポートしている Java 逆コンパイラ。|https://www.benf.org/other/cfr/|{{Pkg|cfr}}}} |
||
* {{App|Fernflower|[[IntelliJ IDEA]] の一部として開発されている Java 解析逆コンパイラ。|https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine|{{AUR|fernflower-git}}}} |
* {{App|Fernflower|[[IntelliJ IDEA]] の一部として開発されている Java 解析逆コンパイラ。|https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine|{{AUR|fernflower-git}}}} |
||
− | * {{App|Vineflower|Fernflower からフォークされた Java 逆コンパイラ。コードの品質を向上させることを目的としています。[[IntelliJ IDEA]] プラグインとしても利用できます。|https://github.com/Vineflower/vineflower}} |
+ | * {{App|Vineflower|Fernflower からフォークされた Java 逆コンパイラ。コードの品質を向上させることを目的としています。[[IntelliJ IDEA]] プラグインとしても利用できます。|https://github.com/Vineflower/vineflower|{{AUR|vineflower}}}} |
* {{App|Krakatau|Java 逆コンパイラ、アセンブラ、逆アセンブラ。|https://github.com/Storyyeller/Krakatau|{{AUR|krakatau-git}}}} |
* {{App|Krakatau|Java 逆コンパイラ、アセンブラ、逆アセンブラ。|https://github.com/Storyyeller/Krakatau|{{AUR|krakatau-git}}}} |
||
* {{App|Procyon decompiler|実験的な Java 逆コンパイラ。ILSpy と Mono.Cecil の影響を受けています。|https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler|{{Pkg|procyon-decompiler}}}} |
* {{App|Procyon decompiler|実験的な Java 逆コンパイラ。ILSpy と Mono.Cecil の影響を受けています。|https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler|{{Pkg|procyon-decompiler}}}} |
||
199行目: | 209行目: | ||
* man ページの末尾に {{ic|-${VENDOR_NAME}${JAVA_MAJOR_VERSION} }} を付けて、衝突しないようにすること ({{pkg|jre8-openjdk}} のファイルリストを見れば {{ic|-openjdk8}} を付ける man ページがわかります) |
* man ページの末尾に {{ic|-${VENDOR_NAME}${JAVA_MAJOR_VERSION} }} を付けて、衝突しないようにすること ({{pkg|jre8-openjdk}} のファイルリストを見れば {{ic|-openjdk8}} を付ける man ページがわかります) |
||
* 他の JDK、{{ic|java-runtime}}、{{ic|java-runtime-headless}}、{{ic|java-environment}} を [[PKGBUILD#conflicts|conflicts]] や [[PKGBUILD#replaces|replaces]] として宣言しないこと。 |
* 他の JDK、{{ic|java-runtime}}、{{ic|java-runtime-headless}}、{{ic|java-environment}} を [[PKGBUILD#conflicts|conflicts]] や [[PKGBUILD#replaces|replaces]] として宣言しないこと。 |
||
− | * ''install 関数''で {{ic|archlinux-java}} スクリプトを使って、'''他の有効な Java 環境が設定されていない場合に''' 自身の Java 環境をデフォルトに設定すること (つまり、パッケージは'''強制的に'''デフォルトとして設定するべきでは'''ありません''')。サンプルは[https:// |
+ | * ''install 関数''で {{ic|archlinux-java}} スクリプトを使って、'''他の有効な Java 環境が設定されていない場合に''' 自身の Java 環境をデフォルトに設定すること (つまり、パッケージは'''強制的に'''デフォルトとして設定するべきでは'''ありません''')。サンプルは[https://gitlab.archlinux.org/archlinux/packaging/packages/java-openjdk 公式にサポートされている Java 環境のパッケージのソース]を参照。 |
他の注意事項: |
他の注意事項: |
||
268行目: | 278行目: | ||
原因は JavaFX が Arch Linux のリポジトリに含まれている新しい {{Pkg|ffmpeg}} と互換性がないためです。 |
原因は JavaFX が Arch Linux のリポジトリに含まれている新しい {{Pkg|ffmpeg}} と互換性がないためです。 |
||
− | 解決方法は {{AUR|ffmpeg-compat-55}} をインストールすることです。または、先のバージョンがビルドに失敗する場合は、{{AUR| |
+ | 解決方法は {{AUR|ffmpeg-compat-55}} をインストールすることです。または、先のバージョンがビルドに失敗する場合は、{{AUR|ffmpeg3.4}} をインストールするとうまく行くかもしれません。 |
参照: https://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/ |
参照: https://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/ |
||
274行目: | 284行目: | ||
=== Java アプリケーションで外部リンクを開けない === |
=== Java アプリケーションで外部リンクを開けない === |
||
− | Java アプリケーションからウェブブラウザなどのリンクを開けない場合、{{Pkg|gvfs}} をインストールしてください。Desktop.Action.BROWSE メソッドが必要とします。[https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1574879/comments/2] を参照。 |
+ | Java アプリケーションからウェブブラウザなどのリンクを開けない場合、{{Pkg|gvfs}} をインストールしてください。{{ic|Desktop.Action.BROWSE}} メソッドがこれを必要とします。[https://bugs.launchpad.net/ubuntu/+source/openjdk-8/+bug/1574879/comments/2] を参照。 |
+ | |||
+ | アプリケーションが次のようなエラーメッセージを表示する場合、この問題が起こっている証拠です: {{ic|java.lang.UnsupportedOperationException: The BROWSE action is not supported on the current platform!}}。 |
||
=== QuantumRenderer の初期化でエラー: no suitable pipeline found === |
=== QuantumRenderer の初期化でエラー: no suitable pipeline found === |
||
359行目: | 371行目: | ||
{{Note|このオプションを有効にすると JetBrains IDE などのソフトウェアの UI がおかしくなって、ウィンドウやポップアップ、ツールバーが一部しか表示されなくなることがあります。}} |
{{Note|このオプションを有効にすると JetBrains IDE などのソフトウェアの UI がおかしくなって、ウィンドウやポップアップ、ツールバーが一部しか表示されなくなることがあります。}} |
||
+ | {{TranslationStatus|Java|2024-09-22|816808}} |
||
− | == 参照 == |
||
− | |||
− | * [https://math.hws.edu/javanotes8/ Introduction to Programming Using Java] |
||
− | * [https://www.w3schools.com/java/default.asp W3Schools による Java チュートリアル] |
||
− | |||
− | {{TranslationStatus|Java|2024-02-22|800003}} |
2024年9月22日 (日) 16:48時点における最新版
Wikipedia より:
- Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン (JVM) で動くバイトコードにコンパイルされます。
Arch Linux は、オープンソースの OpenJDK のバージョン 8、11、17、21 (Long-Term Support (LTS) のバージョン群)、そして 22 (最新バージョン) を公式にサポートしています。これらの JVM は全てインストールしても衝突せず、ヘルパースクリプト archlinux-java
(java-runtime-common パッケージによってインストールされます) を使って切り替えることが可能です。他の Java 環境はいくつか Arch User Repository からインストールすることができますが、公式のサポートはありません。
目次
- 1 インストール
- 2 JVM の切り替え
- 3 archlinux-java をサポートするために必要なパッケージの前提条件
- 4 トラブルシューティング
- 4.1 MySQL
- 4.2 IntelliJ IDEA
- 4.3 他のウィンドウマネージャになりすます
- 4.4 フォントが読みにくい
- 4.5 一部のアプリケーションでテキストが表示されない
- 4.6 灰色のウィンドウ、ウィンドウマネージャでアプリがリサイズされない、メニューがすぐに閉じる
- 4.7 JavaFX アプリケーションのデバッグ時にシステムがフリーズする
- 4.8 JavaFX の MediaPlayer コンストラクタが例外を投げる
- 4.9 Java アプリケーションで外部リンクを開けない
- 4.10 QuantumRenderer の初期化でエラー: no suitable pipeline found
- 5 ヒントとテクニック
インストール
2つの 共通 パッケージがそれぞれ依存パッケージとしてインストールされます: java-runtime-common (全ての Java Runtime Environment に共通のファイルが含まれています) と java-environment-common (全ての Java Development Kit に共通のファイルが含まれています) です。提供される環境ファイル /etc/profile.d/jre.sh
は、シンボリックリンクによって参照されている /usr/lib/jvm/default/bin
を指しており、このシンボリックリンクは archlinux-java
ヘルパースクリプトによって設定されます。
これは、/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}
内のデフォルトの作業 Java 環境や、/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}/jre
内の Java ランタイムを表示したり指定したりするために使用されます。
Java 環境のほとんどの実行ファイルは、/usr/bin/
内のダイレクトリンクによって提供されます。一方、その他は $PATH
でアクセスできます。
OpenJDK
OpenJDK は、Java Platform, Standard Edition (Java SE) のオープンソースな実装であり、公式リファレンス実装として指定されています。OpenJDK ビルドには、Adoptium (以前は AdoptOpenJDK として知られていました) や Amazon Corretto などの複数のディストリビューターが存在しています。Arch Linux OpenJDK パッケージは上流の OpenJDK ソースコードからビルドされています。
- ヘッドレス JRE
- 最小限の Java 実行環境 - 非 GUI な Java プログラムを実行するために必要。
- フル JRE
- 完全な Java 実行環境 - Java の GUI プログラムを実行するために必要。
- JDK
- Java Development Kit - Java で開発するために必要。
JDK、JRE、そして JRE ヘッドレスは互いに衝突します。これは、より小さいパッケージがより大きいパッケージのサブセットであるためです。つまり、JDK は JRE を提供すると同時に JRE と衝突し、JRE はヘッドレス JRE を提供すると同時にヘッドレス JRE と衝突します。
OpenJDK GA — Oracle による最新 OpenJDK 一般公開リリースビルド。
OpenJDK EA — Oracle による開発版用の最新 OpenJDK 早期アクセスビルド。
OpenJDK Wakefield — Linux 版 JDK 用の未完成の Wayland デスクトップサポート。
IcedTea-Web — Java Web Start と非推奨の Java ブラウザプラグイン。
OpenJFX
OpenJFX は、JavaFX のオープンソースな実装です。Oracle JDK を使用している場合は、このパッケージをインストールする必要はありません。このパッケージは、Java のオープンソース実装 (OpenJDK プロジェクト) やその派生版のユーザのみを対象としています。
バージョン | 実行環境及び開発環境 | ドキュメント | ソース |
---|---|---|---|
OpenJFX 22 | java-openjfxAUR | java-openjfx-docAUR | java-openjfx-srcAUR |
OpenJFX 21 | java21-openjfxAUR | java21-openjfx-docAUR | java21-openjfx-srcAUR |
OpenJFX 17 | java17-openjfxAUR | java17-openjfx-docAUR | java17-openjfx-srcAUR |
OpenJFX 11 | java11-openjfxAUR | java11-openjfx-docAUR | java11-openjfx-srcAUR |
OpenJFX 8 | java8-openjfxAUR | java8-openjfx-docAUR | java8-openjfx-srcAUR |
他の実装
- Oracle JDK — Oracle の OpenJDK 商用ライセンスビルド。一部のバージョンは手動ダウンロードでしか利用できないことに注意してください。手動ダウンロードでは、OTN 契約に署名し、Oracle アカウントを作成する必要があります。
- https://www.oracle.com/java/technologies/downloads/ ||
- JRE: jreAUR jre-ltsAUR jre11AUR jre8AUR jre7AUR
- JDK: jdkAUR jdk-ltsAUR jdk11AUR jdk8AUR jdk7AUR
- Eclipse Adoptium/Temurin — Eclipse の JRE/JDK 実装。Hotspot JVM (以前は AdoptOpenJDK) をベースとしています。この JRE は、Eclipse Temurin として知られています。
- https://adoptium.net/ || jdk-temurinAUR jdk17-temurinAUR jdk11-temurinAUR
- AWS Corretto — OpenJDK の Amazon Web Services ディストリビューション。
- https://aws.amazon.com/corretto/ || amazon-corretto-8AUR amazon-corretto-11AUR amazon-corretto-17AUR amazon-corretto-21-binAUR amazon-corretto-22-binAUR
- OpenJ9 — IBM によって提供されている、J9 JVM ベースの、Eclipse の JRE/JDK 実装。
- https://www.eclipse.org/openj9/ || jdk-openj9-binAUR jdk17-openj9-binAUR jdk11-openj9-binAUR jdk8-openj9-binAUR
- IBM Certified — IBM Semeru Runtime Certified Edition。
- IBM J9 — IBM の JRE 実装。OpenJ9 のコードを使用。
- https://www.ibm.com/support/pages/java-sdk-downloads || jdk8-j9-binAUR jdk7-j9-binAUR jdk7r1-j9-binAUR
- Liberica JDK — BellSoft の Liberica JDK 実装。
- https://bell-sw.com/libericajdk/ || liberica-jre-8-full-binAUR liberica-jdk-8-full-binAUR liberica-jre-11-binAUR liberica-jre-11-full-binAUR liberica-jdk-11-binAUR liberica-jdk-11-full-binAUR liberica-jdk-17-full-binAUR liberica-jdk-21-full-binAUR
- Microsoft OpenJDK — Microsoft の OpenJDK 実装。
- https://www.microsoft.com/openjdk/ || microsoft-openjdk-11-binAUR microsoft-openjdk-17-binAUR microsoft-openjdk-21-binAUR
- Azul JDK — Azul の JDK 実装。OpenJDK の Azul Zulu ビルドはオープンソースですが、OpenJDK の Azul Zulu Prime ビルドは開発と評価用では無料の商用製品であることに注意してください。
- https://www.azul.com/downloads/ ||
- Zulu: zulu-8-binAUR zulu-11-binAUR zulu-17-binAUR zulu-21-binAUR
- Zulu Prime: jdk17-zulu-prime-binAUR
開発ツール
統合開発環境については アプリケーション一覧/ユーティリティ#統合開発環境 や Java IDE サブセクションを見てください。
リバースエンジニアリングを困難にするには、proguardAUR などの難読化ツールを使用できます。
逆コンパイラ
- CFR — Java 9、10、及びそれ以降の最近の機能をサポートしている Java 逆コンパイラ。
- Fernflower — IntelliJ IDEA の一部として開発されている Java 解析逆コンパイラ。
- https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine || fernflower-gitAUR
- Vineflower — Fernflower からフォークされた Java 逆コンパイラ。コードの品質を向上させることを目的としています。IntelliJ IDEA プラグインとしても利用できます。
- Krakatau — Java 逆コンパイラ、アセンブラ、逆アセンブラ。
- Procyon decompiler — 実験的な Java 逆コンパイラ。ILSpy と Mono.Cecil の影響を受けています。
- Java Decompiler (JD-Core) — 人気な Java 逆コンパイラ。GUI (JD-GUI を参照) を提供し、Java 1~10 をサポートしています。
- Jadx — Android DEX から Java に逆コンパイルします。オプションの GUI 有り (Jadx-GUI を参照)。
- JAD — メンテナンスされていない Java 逆コンパイラ (最後のリリースは 2006 年です)。
GUI フロントエンド
- Bytecode Viewer — Java のリバースエンジニアリングスイート。逆コンパイラ、エディタ、そしてデバッガを含んでいます。CFR/Fernflower/Procyon のフロントエンドです。
- Recaf — 使いやすいモダンな Java バイトコードエディタ。Java プログラムの複雑さを抽象化します。CFR/Fernflower/Procyon のフロントエンドです。
- Java Decompiler (JD-GUI) — 人気な Java 逆コンパイラ。GUI を提供し、Java 1~10 をサポートしています。JD-Core のフロントエンドです。
- Jadx-GUI — Android APK DEX から Java に逆コンパイルします。オプションの GUI 有り。Jadx のフロントエンドです。
- Luyten — オープンソースの Java 逆コンパイラ GUI。Procyon のフロントエンドです。
JVM の切り替え
ヘルパースクリプト archlinux-java
(java-runtime-common パッケージ) は、以下のような機能を提供します:
archlinux-java <COMMAND> COMMAND: status インストールされている Java 環境と有効になっている環境を表示 get デフォルトに設定されている Java 環境を返す set <JAVA_ENV> <JAVA_ENV> をデフォルトに設定 unset デフォルトの Java 環境の設定を解除 fix 不正な Java 環境の設定を修正
インストールされている Java 互換環境を表示
$ archlinux-java status
例:
$ archlinux-java status
Available Java environments: java-11-openjdk (default) java-8-openjdk/jre
(default) は java-11-openjdk
がデフォルトに設定されていることを示しています。java
やその他のバイナリの呼び出しはこの Java インストールに基づきます。また、上の出力では OpenJDK 8 の JRE しかインストールされていないことに注意してください。
デフォルトの Java 環境を変更
# archlinux-java set <JAVA_ENV_NAME>
例:
# archlinux-java set java-8-openjdk/jre
archlinux-java
は、存在しない Java 環境を設定することはできません。前の例では、jre8-openjdk はインストールされていますが jdk8-openjdk はインストールされていないため、java-8-openjdk
を設定しようとしても失敗します:
# archlinux-java set java-8-openjdk
'/usr/lib/jvm/java-8-openjdk' is not a valid Java environment path
デフォルトの Java 環境の設定を解除
パッケージが設定を管理するため、Java 環境の設定を解除する必要はないはずです。それでも設定を解除したいときは、unset
コマンドを使って下さい:
# archlinux-java unset
デフォルトの Java 環境を修正
存在しない Java 環境のリンクが設定されている場合、archlinux-java fix
コマンドを呼び出すとリンクの修正が行われます。デフォルトの Java 環境が設定されていないときは、インストールされている Java 環境を探して設定を行います (ここでは、公式でサポートされているパッケージ "OpenJDK 8" がまず初めに使われます。他のインストール環境はその後です):
# archlinux-java fix
デフォルトでないバージョンの Java を使ってアプリケーションを起動
デフォルトのバージョン以外の Java を使ってアプリケーションを起動したい場合 (例えばバージョン 18 と 11 の両方がインストールされている場合)、bash スクリプトでアプリケーションをラッピングして Java のデフォルトの PATH を変更することができます。例えば、デフォルトが java 18 で、java 11 を使いたい場合:
#!/bin/sh export PATH="/usr/lib/jvm/java-11-openjdk/bin/:$PATH" exec /path/to/application "$@"
Systemd サービスの場合、ドロップインファイル で JAVA_HOME
を環境変数に追加することで可能です:
/etc/systemd/system/unit.d/override.conf
[Service] Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk
archlinux-java をサポートするために必要なパッケージの前提条件
このセクションでは、代替 JVM 用のパッケージを AUR で提供したいパッケージ製作者が、パッケージを Arch Linux の JVM スキームと統合できる (つまり、archlinux-java
と互換性を持たせる) ようにするための説明を行います。これに関しては、パッケージ制作者は以下のことを行う必要があります:
- 全てのファイルは
/usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME}
以下に配置すること - java-runtime-common と java-environment-common が提供するシンボリックリンクに対応する全ての実行ファイルが、該当するパッケージにおいて利用可能であること。(訳注: 例えば、java-runtime-common は
/usr/bin/java
シンボリックリンクを提供していますが、あなたの作成したパッケージにもこれに対応する実行ファイルが含まれていなければなりません。その他のシンボリックリンクにおいても同様です。) - シンボリックリンクがまだ [java-runtime-common と java-environment-common に存在しない場合にのみ、
/usr/bin
から実行ファイルへのシンボリックリンクを同梱すること。 - man ページの末尾に
-${VENDOR_NAME}${JAVA_MAJOR_VERSION}
を付けて、衝突しないようにすること (jre8-openjdk のファイルリストを見れば-openjdk8
を付ける man ページがわかります) - 他の JDK、
java-runtime
、java-runtime-headless
、java-environment
を conflicts や replaces として宣言しないこと。 - install 関数で
archlinux-java
スクリプトを使って、他の有効な Java 環境が設定されていない場合に 自身の Java 環境をデフォルトに設定すること (つまり、パッケージは強制的にデフォルトとして設定するべきではありません)。サンプルは公式にサポートされている Java 環境のパッケージのソースを参照。
他の注意事項:
- 任意の Java 環境を必要とするパッケージは、通常通り
java-runtime
、java-runtime-headless
、java-environment
のどれかを依存関係として宣言すること。 - 特定の Java ベンダ を必要とするパッケージは、それに対応するパッケージを依存関係として宣言すること。
- OpenJDK パッケージでは、
provides="java-runtime-openjdk=${pkgver}"
などが宣言されるようになっています。これにより、サードパーティのパッケージではバージョンを指定せずに OpenJDK を依存関係として宣言できるようになっています。
トラブルシューティング
MySQL
JDBC ドライバーは URL のポートを使ってデータベースへの接続を確立するため、同じホストで動作していたとしても"リモート"とされます (すなわち MySQL はデフォルト設定のようにポートを開きません)。そのため、JDBC と MySQL を使うには MySQL のリモートアクセスを有効にする必要があります。MariaDB#リモートアクセスを有効にする の指示に従って下さい。
IntelliJ IDEA
IntelliJ IDEA がシステムの JAVA SDK のパスと共に The selected directory is not a valid home for JDK
と出力する場合、他の JDK パッケージをインストールして、そのパッケージを IDEA の JDK として選択する必要があるかもしれません。
他のウィンドウマネージャになりすます
suckless.org の wmname を使うことで、他のウィンドウマネージャを動かしていると JVM に信じ込ませることができます。これによって、Awesome や Dwm、Ratpoison のようなウィンドウマネージャで発生する Java の GUI レンダリング問題を解決できる場合があります。これがうまく行く理由は、JVM にはリペアレンティング型でない既知のウィンドウマネージャのハードコードされたリストが含まれているからです。皮肉なことに、一部のユーザは、Sun によって Java で記述されたリペアレンティング型でないウィンドウマネージャである LG3D
になりすますことを好みます。"compiz" や "Metacity"、"LG3D" に設定してみてください:
$ wmname ウィンドウマネージャ名
wmname コマンドを実行した後、問題が発生しているアプリケーションを再起動する必要があります。
あるいは、javaagent JavaMatePatch を使うこともできます。これは、MATE においてウィンドウマネージャ名を設定し、Java Swing アプリがフルスクリーン時に不適切な挙動を行うバグを解決するために作成されました。使用するには、-javaagent:JavaMatePatch-1.0.0-SNAPSHOT.jar=ウィンドウマネージャ名
を java オプションに追加してください。
フォントが読みにくい
下の #フォントレンダリングを改善する で書かれている方法でも、フォントによっては読みやすくならないことがあります。このようなときは、使用している MS フォントを変えてみて下さい。ttf-ms-fontsAUR パッケージをインストールしてください。
一部のアプリケーションでテキストが表示されない
一部のアプリケーションでテキストが全く表示されない場合は FS#40871 で提案されているように #ヒントとテクニック のオプションを使うと直るかもしれません。
灰色のウィンドウ、ウィンドウマネージャでアプリがリサイズされない、メニューがすぐに閉じる
標準の Java GUI ツールキットには、「リペアレンティング型でない」ウィンドウマネージャのハードコードされたリストがあります。そのリストに無いウィンドウマネージャを使用すると、一部の Java アプリケーションで問題が発生する可能性があります。最も一般的な問題の1つが、Java アプリケーションが GUI をレンダリングせずにのっぺりとした灰色のボックスとして表示される「灰色のウィンドウ」問題です。クリックでメニューを開いてもすぐに閉じてしまう問題も発生することがあります。
解決に役立つ方法がいくつか存在します:
- #他のウィンドウマネージャになりすます を参照してください。
- jre8-openjdk の場合、
_JAVA_AWT_WM_NONREPARENTING=1
環境変数を設定してください。 - その後のバージョンでは、
AWT_TOOLKIT=MToolkit
環境変数を設定してください。 - xmonad の場合、SetWMName を使用してください。ただし、
XMonad.Hooks.EwmhDesktops
を使うと効果がキャンセルされてしまうことがあります。その場合、>> setWMName "LG3D"
をLogHook
に追加すると解決できる場合があります。
詳細は [1] を参照してください。
JavaFX アプリケーションのデバッグ時にシステムがフリーズする
JavaFX アプリケーションをデバッグする際にシステムがフリーズする場合、JVM のオプション -Dsun.awt.disablegrab=true
を使ってみてください。
https://bugs.java.com/bugdatabase/view_bug?bug_id=6714678 を参照。
JavaFX の MediaPlayer コンストラクタが例外を投げる
JavaFX のサウンドモジュールから MediaPlayer クラスのインスタンスを作成しようとしたときに以下の例外が発生することがあります (Oracle JDK と OpenJDK の両方で発生):
... (i.e. FXMLLoader construction exceptions) ... Caused by: MediaException: UNKNOWN : com.sun.media.jfxmedia.MediaException: Could not create player! : com.sun.media.jfxmedia.MediaException: Could not create player! at javafx.scene.media.MediaException.exceptionToMediaException(MediaException.java:146) at javafx.scene.media.MediaPlayer.init(MediaPlayer.java:511) at javafx.scene.media.MediaPlayer.<init>(MediaPlayer.java:414) at <constructor call> ...
原因は JavaFX が Arch Linux のリポジトリに含まれている新しい ffmpeg と互換性がないためです。
解決方法は ffmpeg-compat-55AUR をインストールすることです。または、先のバージョンがビルドに失敗する場合は、ffmpeg3.4AUR をインストールするとうまく行くかもしれません。
参照: https://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/
Java アプリケーションで外部リンクを開けない
Java アプリケーションからウェブブラウザなどのリンクを開けない場合、gvfs をインストールしてください。Desktop.Action.BROWSE
メソッドがこれを必要とします。[2] を参照。
アプリケーションが次のようなエラーメッセージを表示する場合、この問題が起こっている証拠です: java.lang.UnsupportedOperationException: The BROWSE action is not supported on the current platform!
。
QuantumRenderer の初期化でエラー: no suitable pipeline found
考えられる問題と解決策:
- GTK2 が無い。gtk2 をインストールしてください。
- OpenJFX が無い。java-openjfxAUR をインストールしてください。
ヒントとテクニック
Java アプリケーションのほとんどは Java ランタイムの前に変数を設定することで挙動をコントロールすることができます。フォーラムの投稿より、変数を設定するには ~/.bashrc
(もしくは全てのユーザーに適用するには /etc/profile.d/jre.sh
) に次の行を追加してください:
export JDK_JAVA_OPTIONS="-D<option 1> -D<option 2>..."
例えば、システムのアンチエイリアスがされたフォントを使用して swing に GTK のルックアンドフィールを使わせるには:
export JDK_JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'
このような変数は3つ存在しており、以下の表で後に説明されるオプションが優先されます。
JAVA_TOOL_OPTIONS | javac や jshell といったアプリケーションとツールに影響します。 |
JDK_JAVA_OPTIONS | アプリケーション (java コマンドで実行されるアプリケーション全て) に影響します。Java 9 が必要。 |
(コマンドラインオプション) | "クラス名" の引数の前で指定される引数は Java オプションです。 |
_JAVA_OPTIONS | 古い方法。アプリケーションとツールに影響します。 |
フォントレンダリングを改善する
クローズドソースとオープンソースの Java 実装のどちらもがフォントのアンチエイリアスを不適当に実装していることが知られています。次のオプションを使うことでこれを修正することが可能です: -Dawt.useSystemAAFontSettings=on
, -Dswing.aatext=true
詳しい情報は Java 実行環境のフォントを見てください。
コマンドラインの 'Picked up JDK_JAVA_OPTIONS' メッセージを消す
JDK_JAVA_OPTIONS 環境変数を設定すると java (openjdk) から標準エラー出力に次のようなメッセージが書き出されます: 'Picked up JDK_JAVA_OPTIONS=...'。ターミナルにこのメッセージを表示しないようにするには、シェルのスタートアップファイルから環境変数を消去して、以下のように java のエイリアスを作成してコマンドライン引数を使ってオプションを指定するようにしてください:
SILENT_JAVA_OPTIONS="$JDK_JAVA_OPTIONS" unset JDK_JAVA_OPTIONS alias java='java "$SILENT_JAVA_OPTIONS"'
インタラクティブでないシェル (Java プログラムのランチャースクリプトなど) は、(通常) ~/.bashrc
を読み込みません。ですが、export された変数を親プロセスから継承します (~/.bash_profile
を読み込むログインシェルからどこかの時点でその変数を継承します)。
そうした場合、ファイルが読み取られるのを防ぐために、~/.bashrc
の先頭に文を置いているのが一般的です。そのようにして、変数がデスクトップメニューから起動されたプログラムに渡され、メッセージが邪魔をするインタラクティブシェルの場合は alias が代わりに使用されます (スクリプトでは alias は使用できません)。
GTK のルックアンドフィール
Java プログラムの見た目が酷い場合、swing コンポーネントのデフォルトのルックアンドフィールを設定することができます:
swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
頑固な Java プログラムはクロスプラットフォームの Metal ルックアンドフィールを使用し続けることがあります。そのような場合には以下のプロパティを設定することで GTK のルックアンドフィールを使うように強制することが可能です:
swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
GTK3 のサポート
バージョン 9 より前の Java では、GTK のルックアンドフィールが GTK2 に対してリンクされていますが、新しいデスクトップアプリケーションは GTK3 を使用します。GTK バージョン間の非互換性のせいで、GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュする場合があります。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば LibreOffice 5.0 などがこれに該当します。
GTK ルックアンドフィールは GTK バージョン 2
、2.2
、そして 3
に対して実行でき、デフォルトは GTK3 です。これは、次のプロパティを設定することで上書きできます:
jdk.gtk.version=2.2
HiDPI
GUI フレームワークによっては、他の方法を使うことで HiDPI#Java アプリケーション を利用可能にできます。
2D のパフォーマンスの向上
OpenGL ベースのハードウェアアクセラレーションパイプラインに切り替えることで 2D の性能が改善します:
export JDK_JAVA_OPTIONS='-Dsun.java2d.opengl=true'