「Java」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
(同期)
39行目: 39行目:
 
{{App|OpenJDK 8|第8版 Java SE のオープンソース実装。|http://openjdk.java.net/projects/jdk8/|{{Pkg|jre8-openjdk-headless}} {{Pkg|jre8-openjdk}} {{Pkg|jdk8-openjdk}} {{Pkg|openjdk8-doc}} {{Pkg|openjdk8-src}}}}
 
{{App|OpenJDK 8|第8版 Java SE のオープンソース実装。|http://openjdk.java.net/projects/jdk8/|{{Pkg|jre8-openjdk-headless}} {{Pkg|jre8-openjdk}} {{Pkg|jdk8-openjdk}} {{Pkg|openjdk8-doc}} {{Pkg|openjdk8-src}}}}
 
{{App|OpenJDK 7|第7版 Java SE のオープンソース実装。|http://openjdk.java.net/projects/jdk7/|{{Pkg|jre7-openjdk-headless}} {{Pkg|jre7-openjdk}} {{Pkg|jdk7-openjdk}} {{Pkg|openjdk7-doc}} {{Pkg|openjdk7-src}}}}
 
{{App|OpenJDK 7|第7版 Java SE のオープンソース実装。|http://openjdk.java.net/projects/jdk7/|{{Pkg|jre7-openjdk-headless}} {{Pkg|jre7-openjdk}} {{Pkg|jdk7-openjdk}} {{Pkg|openjdk7-doc}} {{Pkg|openjdk7-src}}}}
  +
{{App|IcedTea-Web|Java Web Start と旧式の Java ブラウザプラグイン。|https://icedtea.classpath.org/wiki/IcedTea-Web|{{Pkg|icedtea-web}}}}
 
{{App|OpenJFX 8|JavaFX のオープンソース実装。Oracle による JRE と JDK の実装である Java SE を利用している場合はパッケージをインストールする必要はありません [https://wiki.openjdk.java.net/display/OpenJFX/Repositories+and+Releases]。オープンソースの Java 実装 (OpenJDK プロジェクト) を使っているユーザーのためのパッケージです。|http://openjdk.java.net/projects/openjfx/|{{Pkg|java-openjfx}} {{Pkg|java-openjfx-doc}} {{Pkg|java-openjfx-src}}}}
 
{{App|OpenJFX 8|JavaFX のオープンソース実装。Oracle による JRE と JDK の実装である Java SE を利用している場合はパッケージをインストールする必要はありません [https://wiki.openjdk.java.net/display/OpenJFX/Repositories+and+Releases]。オープンソースの Java 実装 (OpenJDK プロジェクト) を使っているユーザーのためのパッケージです。|http://openjdk.java.net/projects/openjfx/|{{Pkg|java-openjfx}} {{Pkg|java-openjfx-doc}} {{Pkg|java-openjfx-src}}}}
   
 
=== 非公式サポート ===
 
=== 非公式サポート ===
   
{{App|Java SE|Oracle による JRE と JDK の実装。|http://www.oracle.com/technetwork/java/javase/downloads/index.html|{{AUR|jre}} {{AUR|jre6}} {{AUR|jre7}} {{AUR|jre8}} {{AUR|jre-devel}}{{Broken package link|パッケージが存在しません}} {{AUR|jdk}} {{AUR|jdk5}} {{AUR|jdk6}} {{AUR|jdk7}} {{AUR|jdk8}} {{AUR|jdk-devel}}}}
+
{{App|Java SE|Oracle による JRE と JDK の実装。|http://www.oracle.com/technetwork/java/javase/downloads/index.html|{{AUR|jre}} {{AUR|jre9}} {{AUR|jre8}} {{AUR|jre7}} {{AUR|jre6}} {{AUR|jdk}} {{AUR|jdk9}} {{AUR|jdk8}} {{AUR|jdk7}} {{AUR|jdk6}} {{AUR|jdk5}} {{AUR|jdk-devel}}}}
{{App|OpenJ9|IBM から Eclipse に継承された JRE の実装。|https://www.eclipse.org/openj9/|{{AUR|jdk8-openj9-bin}} {{AUR|jdk9-openj9-bin}}}}
+
{{App|OpenJ9|IBM から Eclipse に継承された JRE の実装。|https://www.eclipse.org/openj9/|{{AUR|jdk9-openj9-bin}} {{AUR|jdk8-openj9-bin}}}}
{{App|IBM J9 8|IBM による第8版 JRE の実装。|https://developer.ibm.com/javasdk/downloads/sdk8/|{{AUR|jdk8-j9-bin}}}}
+
{{App|IBM J9|IBM による第7・8版 JRE の実装。|https://developer.ibm.com/javasdk/|{{AUR|jdk8-j9-bin}} {{AUR|jdk7-j9-bin}} {{AUR|jdk7r1-j9-bin}}}}
{{App|IBM J9 7|IBM による第7版 JRE の実装。|https://developer.ibm.com/javasdk/downloads/sdk7/|{{AUR|jdk7-j9-bin}} {{AUR|jdk7r1-j9-bin}}}}
 
 
{{App|Parrot VM|[http://www.parrot.org/ Parrot] は VM であり、異なる2つの方法によって実験的に [http://trac.parrot.org/parrot/wiki/Languages Java をサポート] しています: [https://code.google.com/p/parrot-jvm/ Java VM バイトコード翻訳機] もしくは [https://github.com/chrisdolan/perk Parrot VM のための Java コンパイラ]。|http://www.parrot.org/|{{AUR|parrot}}}}
 
{{App|Parrot VM|[http://www.parrot.org/ Parrot] は VM であり、異なる2つの方法によって実験的に [http://trac.parrot.org/parrot/wiki/Languages Java をサポート] しています: [https://code.google.com/p/parrot-jvm/ Java VM バイトコード翻訳機] もしくは [https://github.com/chrisdolan/perk Parrot VM のための Java コンパイラ]。|http://www.parrot.org/|{{AUR|parrot}}}}
   
 
{{Note|32ビット版の Java SE はパッケージの前に {{ic|bin32-}} が付きます。例: {{AUR|bin32-jre}} や {{AUR|bin32-jdk}}。これらのパッケージは後ろに {{ic|32}} が付く {{Pkg|java-runtime-common}} として機能する {{AUR|java32-runtime-common}} を使用します。例: {{ic|java32}}。}}
 
{{Note|32ビット版の Java SE はパッケージの前に {{ic|bin32-}} が付きます。例: {{AUR|bin32-jre}} や {{AUR|bin32-jdk}}。これらのパッケージは後ろに {{ic|32}} が付く {{Pkg|java-runtime-common}} として機能する {{AUR|java32-runtime-common}} を使用します。例: {{ic|java32}}。}}
 
== パッケージの out-of-date ==
 
Arch Linux のパッケージのリリースにはパッケージがベースとしているプロプライエタリのバージョンへの言及が含まれていることがありますが、オープンソースプロジェクトには独自のバージョン規則があります:
 
 
*{{Pkg|jre7-openjdk}}, {{Pkg|jdk7-openjdk}}, {{Pkg|jre7-openjdk-headless}} は [http://icedtea.wildebeest.org/download/source ''IcedTea'' のバージョン] (例: {{ic|2.4.3}}) にあわせて out-of-date になります。Oracle のバージョン (例: {{ic|7.u45_2.4.3-1}} の {{ic|u45}}) は関係ありません。
 
*{{Pkg|icedtea-web}} は [http://icedtea.wildebeest.org/download/source ''IcedTea Web'' のバージョン] (例: {{ic|1.4.1}}) にあわせて out-of-date になります。''IcedTea'' のバージョンは関係ありません。
 
   
 
== JVM の切り替え ==
 
== JVM の切り替え ==
168行目: 162行目:
   
 
詳しくは http://bugs.java.com/view_bug.do?bug_id=6714678 を参照。
 
詳しくは http://bugs.java.com/view_bug.do?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 のリポジトリに含まれている新しい {{pkg|ffmpeg}} と互換性がないためです。
  +
  +
解決方法は {{AUR|ffmpeg-compat-55}} をインストールすることです。
  +
  +
参照: http://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
198行目: 210行目:
 
頑固な Java プログラムはクロスプラットフォームの Metal ルックアンドフィールを使用し続けることがあります。そのような場合には以下のプロパティを設定することで GTK のルックアンドフィールを使うように強制することが可能です: {{Ic|1=swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}。
 
頑固な Java プログラムはクロスプラットフォームの Metal ルックアンドフィールを使用し続けることがあります。そのような場合には以下のプロパティを設定することで GTK のルックアンドフィールを使うように強制することが可能です: {{Ic|1=swing.crossplatformlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel}}。
   
  +
==== GTK3 のサポート ====
{{Note|Java で強制的に GTK を使うように設定するとアプリケーションが動作しなくなることがあります。最新の JRE/JDK (8u60 現在) は GTK2 にリンクしていますが、GTK3 を使い始めたデスクトップ環境も少なくありません。GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュします。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば Libreoffice 5.0 などがこれに該当します。}}
 
  +
  +
バージョン 9 以前の Java では、GTK のルックアンドフィールが GTK2 に対してリンクされていますが、新しいデスクトップアプリケーションは GTK3 を使用します。GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュします。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば Libreoffice 5.0 などがこれに該当します。
  +
  +
[http://openjdk.java.net/jeps/283 Java 9] から、GTK のルックアンドフィールは GTK のバージョン {{Ic|2}}, {{Ic|2.2}}, {{Ic|3}} で動作するようになっており、デフォルトは GTK2 になっています。以下のプロパティを設定することで上書きすることができます:
  +
  +
jdk.gtk.version=3
   
 
=== 2D のパフォーマンスの向上 ===
 
=== 2D のパフォーマンスの向上 ===

2018年6月10日 (日) 19:12時点における版

関連記事

Wikipedia より:

Java は Sun Microsystems によって開発され1995年に Sun Microsystems の Java プラットフォームのコアコンポーネントとしてリリースされたプログラミング言語です。構文は C および C++ から多くを引き継いでいますが、オブジェクトモデルがシンプルで低水準の機能が削られています。基本的に Java のアプリケーションはコンピュータアーキテクチャに関係なく動く Java 仮想マシン (JVM) で動くバイトコードにコンパイルされます。

Arch Linux は公式でオープンソースの OpenJDK バージョン7・8・9・10をサポートしています。これらの JVM は全てインストールしても衝突せず、ヘルパースクリプト archlinux-java を使って切り替えることが可能です。他の Java 環境は AUR からインストールすることができますが公式のサポートはありません。

インストール

ノート:
  • JDK をインストールすると自動的に依存パッケージとして JRE がインストールされます。
  • インストールした後、Java 環境をシェルに認識させる必要があります ($PATH 変数)。コマンドラインから /etc/profile を source するか、デスクトップ環境ならばログアウトとログインが必要です。

依存パッケージとして自動的にインストールされる java-runtime-commonjava-environment-common という名前の2つの共通パッケージには環境ファイル /etc/profile.d/jre.sh が入っています。このファイルには全ての JVM 環境で共通の変数が含まれています。また、java-runtime-common パッケージにはデフォルトの Java 環境を表示したり変更することができるユーティリティスクリプト archlinux-java も付いています。このスクリプトは衝突しないように /usr/lib/jvm/java-${JAVA_MAJOR_VERSION}-${VENDOR_NAME} にインストールされた Java 環境や Java ランタイムに /usr/lib/jvm/default/usr/lib/jvm/default-runtime からリンクを設定します。さらに Java 環境セットによる全ての実行ファイルのために /usr/bin にリンクを作成・更新します。

警告: ファイル /etc/profile.d/jdk.sh は現在どのパッケージにも入っていません。

ブラウザで Java を使うには (Java アプレットJava Web Start)、icedtea-web をインストールしてください。詳しくは ブラウザプラグイン#Java (IcedTea) を見て下さい。

公式サポート

以下のパッケージがインストールできます:

OpenJDK 10 — 第10版 Java SE のオープンソース・リファレンス実装。

http://openjdk.java.net/projects/jdk/10/ || jre10-openjdk-headless jre10-openjdk jdk10-openjdk openjdk10-doc openjdk10-src

OpenJDK 9 — 第9版 Java SE のオープンソース実装。

http://openjdk.java.net/projects/jdk9/ || jre9-openjdk-headless jre9-openjdk jdk9-openjdk openjdk9-doc openjdk9-src

OpenJDK 8 — 第8版 Java SE のオープンソース実装。

http://openjdk.java.net/projects/jdk8/ || jre8-openjdk-headless jre8-openjdk jdk8-openjdk openjdk8-doc openjdk8-src

OpenJDK 7 — 第7版 Java SE のオープンソース実装。

http://openjdk.java.net/projects/jdk7/ || jre7-openjdk-headless jre7-openjdk jdk7-openjdk openjdk7-doc openjdk7-src

IcedTea-Web — Java Web Start と旧式の Java ブラウザプラグイン。

https://icedtea.classpath.org/wiki/IcedTea-Web || icedtea-web

OpenJFX 8 — JavaFX のオープンソース実装。Oracle による JRE と JDK の実装である Java SE を利用している場合はパッケージをインストールする必要はありません [1]。オープンソースの Java 実装 (OpenJDK プロジェクト) を使っているユーザーのためのパッケージです。

http://openjdk.java.net/projects/openjfx/ || java-openjfx java-openjfx-doc java-openjfx-src

非公式サポート

Java SE — Oracle による JRE と JDK の実装。

http://www.oracle.com/technetwork/java/javase/downloads/index.html || jreAUR jre9AUR jre8AUR jre7AUR jre6AUR jdkAUR jdk9AUR jdk8AUR jdk7AUR jdk6AUR jdk5AUR jdk-develAUR

OpenJ9 — IBM から Eclipse に継承された JRE の実装。

https://www.eclipse.org/openj9/ || jdk9-openj9-binAUR jdk8-openj9-binAUR

IBM J9 — IBM による第7・8版 JRE の実装。

https://developer.ibm.com/javasdk/ || jdk8-j9-binAUR jdk7-j9-binAUR jdk7r1-j9-binAUR

Parrot VMParrot は VM であり、異なる2つの方法によって実験的に Java をサポート しています: Java VM バイトコード翻訳機 もしくは Parrot VM のための Java コンパイラ

http://www.parrot.org/ || parrotAUR
ノート: 32ビット版の Java SE はパッケージの前に bin32- が付きます。例: bin32-jreAURbin32-jdkAUR。これらのパッケージは後ろに 32 が付く java-runtime-common として機能する java32-runtime-commonAUR を使用します。例: java32

JVM の切り替え

ヘルパースクリプト archlinux-java を使って切り替えることができます:

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-7-openjdk (default)
  java-8-openjdk/jre

(default)java-7-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 7" と "OpenJDK 8" がまず初めに使われます。AUR の非公式パッケージはその後です):

# archlinux-java fix

デフォルトでないバージョンの Java を使ってアプリケーションを起動

デフォルトのバージョン以外の Java を使ってアプリケーションを起動したい場合 (例えば jre7 と jre8 の両方がインストールされている場合)、bash スクリプトでアプリケーションをラッピングして Java のデフォルトの PATH を変更することができます。例えば、デフォルトのバージョンが jre7 で、jre8 を使いたい場合:

#!/bin/sh 

export PATH=/usr/lib/jvm/java-8-openjdk/jre/bin/:$PATH
exec /path/to/application "$@"

archlinux-java をサポートするのに必要なパッケージの条件

ノート: 以下の情報は32ビットの Java パッケージである archlinux32-java にも同じく当てはまります。パッケージや実行ファイルの名前には 32 を含めてください。

このセクションは AUR に新しい JVM のパッケージを投稿し、Arch Linux の JVM の扱いかたにあわせて archlinux-java を使用したいパッケージ作成者を対象にしています。パッケージは以下の条件を満たす必要があります:

他の注意事項:

  • Java 環境が必要なパッケージでベンダーを問わない場合は通常通りに java-runtime, java-runtime-headless または java-environment を依存パッケージとして宣言してください
  • 特定の Java ベンダーが必要なパッケージは適当なパッケージを依存パッケージとして宣言してください
  • OpenJDK パッケージは provides="java-runtime-openjdk=${pkgver}" などを宣言しています。このためサードパーティのパッケージはバージョンを指定せずに OpenJDK を依存パッケージとして宣言することができます

トラブルシューティング

MySQL

JDBC ドライバーは URL のポートを使ってデータベースへの接続を確立するため、同じホストで動作していたとしても"リモート"とされます (すなわち MySQL はデフォルト設定のようにポートを開きません)。そのため、JDBC と MySQL を使うには MySQL のリモートアクセスを有効にする必要があります。MySQL の記事の指示に従って下さい。

他のウィンドウマネージャになりすます

suckless.orgwmname を使うことで JVM に他のウィンドウマネージャを動かしていると信じこませることが可能です。これによって Awesome, Dwm, Ratpoison などのウィンドウマネージャで起こる Java の GUI のレンダリング問題が解決する可能性があります。

$ wmname LG3D

(wmname コマンドを実行した後、アプリケーションを再起動してください。)

これが機能するのは JVM にはハードコードされた既知の、ノンリペアレントウィンドウマネージャのリストが含まれているためです。最大の皮肉として、Sun によって Java で書かれたノンリペアレントウィンドウマネージャである LG3D になりすますことを好むユーザーもいます。

フォントが読みにくい

下の #フォントレンダリングを改善する で書かれている方法でも、フォントによっては読みやすくならないことがあります。このようなときは、使用している MS フォントを変えてみて下さい。AUR から ttf-ms-fontsAUR をインストールしてください。

特定のアプリケーションでテキストが表示されない

特定のアプリケーションでテキストが完全に表示されない場合は FS#40871 で提案されているように #ヒントとテクニック のオプションを使うと直るかもしれません。

Too many levels of symbolic links

以下のようなエラーが表示される場合:

/usr/bin/java: line 2: /usr/lib/jvm/default/bin/java: Too many levels of symbolic links
/usr/bin/java: line 2: exec: /usr/lib/jvm/default/bin/java: cannot execute: Too many levels of symbolic links

デフォルトの Java 環境を修正することで問題が解決するはずです。[2] も見て下さい。

JavaFX アプリケーションのデバッグ時にシステムがフリーズする

JavaFX アプリケーションをデバッグする際にシステムがフリーズする場合、JVM のオプション -Dsun.awt.disablegrab=true を使ってみてください。

詳しくは http://bugs.java.com/view_bug.do?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 をインストールすることです。

参照: http://www.reddit.com/r/archlinux/comments/70o8o6/using_a_javafx_mediaplayer_in_arch/

ヒントとテクニック

ノート: このセクションで提案されていることは、インストールされている (外部の) Java ランタイムを明示的に使用する全てのアプリケーションに適用されます。ただし独自の (内部の) ランタイムを持っていたり GUI やフォントレンダリングに独自の手法を使っているアプリケーションも存在するため、下に書かれていることが全て機能するとは保証できません。

Java アプリケーションのほとんどは Java ランタイムの前に変数を設定することで挙動をコントロールすることができます。フォーラムの投稿より、変数を設定するには ~/.bashrc (もしくは全てのユーザーに適用するには /etc/profile.d/jre.sh) に次の行を追加してください:

export _JAVA_OPTIONS="-D<option 1> -D<option 2>..."

例えば、システムのアンチエイリアスがされたフォントを使用して swing に GTK のルックアンドフィールを使わせるには:

export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel'

フォントレンダリングを改善する

クローズドソースとオープンソースの Java 実装のどちらもがフォントのアンチエイリアスを不適当に実装していることが知られています。次のオプションを使うことでこれを修正することが可能です: -Dawt.useSystemAAFontSettings=on, -Dswing.aatext=true

詳しい情報は Java 実行環境のフォントを見てください。

コマンドラインの 'Picked up _JAVA_OPTIONS' メッセージを消す

_JAVA_OPTIONS 環境変数を設定すると java (openjdk) から標準出力に次のようなメッセージが書き出されます: 'Picked up _JAVA_OPTIONS=...'。ターミナルにメッセージを表示しないようにするには、シェルのスタートアップファイルから環境変数を消去して、以下のように java のエイリアスを作成してコマンドライン引数を使ってオプションを指定するようにしてください:

_SILENT_JAVA_OPTIONS="$_JAVA_OPTIONS"
unset _JAVA_OPTIONS
alias java='java "$_SILENT_JAVA_OPTIONS"'

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 を使用します。GTK3 アプリに GUI の Java プラグインが存在すると、Java の GUI を開いたときにアプリがクラッシュします。同じプロセスで GTK2 と GTK3 を混ぜることはできません。例えば Libreoffice 5.0 などがこれに該当します。

Java 9 から、GTK のルックアンドフィールは GTK のバージョン 2, 2.2, 3 で動作するようになっており、デフォルトは GTK2 になっています。以下のプロパティを設定することで上書きすることができます:

jdk.gtk.version=3

2D のパフォーマンスの向上

OpenGL ベースのハードウェアアクセラレーションパイプラインに切り替えることで 2D の性能が改善します:

export _JAVA_OPTIONS='-Dsun.java2d.opengl=true'

リペアレントしないウィンドウマネージャ

リペアレントしないウィンドウマネージャを使用する場合は .xinitrc で以下の環境変数を設定してください:

export _JAVA_AWT_WM_NONREPARENTING=1

上記の設定を行わないと Java プログラムが正しく描画されないことがあります。

参照