web-dev-qa-db-ja.com

SwingレンダリングはJDK 1.8では壊れているように見えますが、JDK 1.7では正しいようです。

IntelliJ IDEA(13.1.1#IC-135.480)およびJDK 1.8.0(x64)をインストールし、GUIフォームデザイナでGUIを生成しました。

それから私はコードを実行し、何かが大丈夫ではないことに気付きました。

これが私のGUIのスクリーンショットです。 Buggy Rendering JDK 1.8.0

フォントのレンダリングはうまくいかないようです。さらに、ボタンの上にマウスを移動すると、ボタンがテキストを失います。

そこで、JDK 1.7.0_40(x64)をインストールし、プロジェクトを再コンパイルして、再度実行しました。

JDK 1.7を使用すると、次のフォームが表示されます。 Rendering OK JDB 1.7.0_40

レンダリングは問題ないようで、ボタンも問題ありません。

そのため、最新のグラフィックスおよびチップセットドライバーなどをインストールしましたが、問題は依然として存在します。 Java Swing UIでこのような問題が発生したことはありますか?私の問題を解決するのを手伝ってもらえますか?助けていただければ幸いです。


更新:

私は1つのJTextAreaと1つのJButtonだけで小さなプロジェクトを作成しましたが、同じレンダリングの問題があります。

アンドリュートンプソンによると、私はsetSize()を変更し、EDTから始めました。以下の例:

package at.maeh.Java.client.simpleTextClient;

import javax.swing.*;
import Java.awt.*;

public class SimpleClient extends JFrame {
    private JPanel panel1;
    private JTextArea textArea1 = new JTextArea();
    private JButton button1 = new JButton();

    public SimpleClient() {
        super("SimpleClient");

        // Panel
        panel1 = new JPanel();
        panel1.setLayout(new FlowLayout());

        // BUtton
        button1.setText("TestButton");

        // TextArea
        textArea1.setColumns(40);
        textArea1.setRows(15);

        // Add Components
        panel1.add(textArea1);
        panel1.add(button1);

        // Add to Frame
        this.getContentPane().add(panel1);

        // pack and set Visible
        pack();
        setVisible(true);

        System.out.println("Constructor EDT: " + SwingUtilities.isEventDispatchThread());
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(SimpleClient::new);

        System.out.println("Main EDT: " + SwingUtilities.isEventDispatchThread());
    }
}

結果は、コンポーネントを含む単純なJFrameです。

SimpleClient -> Screenshot immediately after Start

Textを書くか、mousePointerをButtonの上に移動すると、コンポーネントは次のようにレンダリングされます(Text:testsentence.123; Button-Label:TestButton)

after writing - or mouse over

56
duffy356

最後に、私の問題の解決策を見つけました。 NVIDIA GeForce 620Mのエネルギー制御設定を最大パフォーマンスに変更する必要がありました。

13
duffy356

問題が解決されていない人。この解決策を試してください:

OS内でグローバル環境変数「J2D_D3D」を「false」に設定します。 Sunによると、この設定はJava 2DシステムによるJava 1.4.1_02以降でのDirect3Dの使用をオフにするために使用されます。

つまり、単に引用符なしで「J2D_D3D」という名前と「false」という値を持つ環境変数を作成します。

これでレンダリングの問題が解決しました。あなたの問題も解決することを願っています。

49
25mhz

次の手順を実行できます。

  1. デスクトップを右クリックし、[NVIDIAコントロールパネル]をクリックします
  2. 左ペインで[3D設定の管理]を選択します
  3. メインウィンドウの[プログラム設定]タブを選択します
  4. 「追加」をクリックします
  5. Javaフォルダー(C:\ Program Files\Java\jre1.8.0_20\bin)に移動し、javaw.exeを選択して「開く」を押します(この手順はオペレーティングシステムによって異なります。見つけるのはかなり簡単なはずです)
  6. [このプログラムに適したグラフィックプロセッサを選択してください]と表示されている場所でドロップダウンをクリックし、[高性能NVIDIAプロセッサ]を選択します。
  7. 右下の[適用]をクリックすると、準備完了です。
9
Lord ST

私はまったく同じ問題を抱えています。 duffysの品質設定調整後に見つけたもの:

私のノートブックはIntel HD 4000とNVS 5200Mの両方を実行します。 Java 7でSwingアプリケーションを実行すると、両方のカードで問題ありません。Java 8ダッフィーのスクリーンショット)、NVS 5200Mを使用して、以前と同じように見えます。

Javaバグトラッカーで何も見つかりませんでした。一方で、このバグを説明するのは困難です。

8
nbred

Dell Vostro 5480 with ubuntu mate 16.04同様の問題がありました。追加のドライバーを使用して、Nvidiaドライバーの変更が修正されました。

enter image description here

そして、NVidiaプロファイルを選択します。 enter image description here

2
Rafael Gimenes
textArea1.setSize(500, 300);

問題があります。 Java GUIは、さまざまな画面解像度で、さまざまなPLAFを使用して、多くのプラットフォームで動作する必要がある場合があります。したがって、正確な配置コンポーネントの堅牢なGUIのコンポーネントを整理するには、代わりにレイアウトマネージャーを使用するか、または それらの組み合わせ1空白 のレイアウトパディングと境界線とともに2

2
Andrew Thompson

Duffy356の同様の修正:

NVIDIA NVS 5200MとHD 4000を搭載したWindows 7 64ビットを実行しているLenovo T430s。Java 8アップデート5へのアップデートにより、jEditとFreemindの2つのSwingアプリのグラフィックとボタンが破損しました。

NVIDIAコントロールパネルアプレットを使用して、電源管理モードのグローバル設定を「最大パフォーマンスを優先する」に変更すると、この問題が修正されたように見えます。

アプリがサイズを設定する方法に潜んでいる問題があるかどうかはわかりません。

1
Halfabee2

手順:

  1. コントロールパネル
  2. システムとセキュリティ
  3. システム
  4. リモート設定
  5. 詳細設定タブ
  6. 環境変数をクリックします
  7. j2D_D3D変数を作成する
  8. 値をfalseに設定します。

私のために働いた....

0
Vishal Patil