質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1809閲覧

NimbusLookAndFeel 例外発生の内容と対象方法について

kazuhi

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/08/22 00:46

編集2016/08/22 01:35

LookAndFeel に NimbusLookAndFeelを適用してから、下記の例外が時々発生するようになってしまいました。


java.lang.ClassCastException: javax.swing.plaf.nimbus.DerivedColor$UIResource cannot be cast to java.awt.Font

または

java.lang.ClassCastException: javax.swing.plaf.nimbus.DerivedColor$UIResource cannot be cast to javax.swing.Painter


ネットで調べてみると「javax.swing.plaf.nimbus.DerivedColor$UIResource cannot be cast to java.awt.Font」のバグレポート等は有るようですが、原因や対処方法が良く分かりません。
原因や対象方法についてご教示の程お願いいたします。

LookAndFeelは、全てのFrame等の作成前に指定しています。
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");

Windows7 SP1 32bit 64bit で確認しています。
jdk1.8.0_77, jdk1.8.0_102 とeclipse
JRE1.8.0_77, JRE1.8.0_102の32bit で確認しています。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

どのようなコードで発生しているのかが分からないのではっきりしたことは申し上げられませんが、
とりあえず下記の情報を見る限りでは、イベントディスパッチスレッドでないスレッドで実行している可能性があるように見えます。

Bug ID: JDK-6785663 ClassCastException thrown when running Java2Demo with Nimbus Look And Feel
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6785663

Nimbus: java.lang.ClassCastException: javax.swing.plaf.nimbus.DerivedColor$UIResource cannot be cast to javax.swing.Painter - Stack Overflow
http://stackoverflow.com/questions/15545055/nimbus-java-lang-classcastexception-javax-swing-plaf-nimbus-derivedcoloruires

AWTやSwingは、描画処理をイベントディスパッチスレッドで行う(他のGUIシステムでも似たような機構を持っている)必要があり、そうでない操作をした場合に予期しない問題が発生する可能性があります。

Swingのイベントディスパッチスレッドについては、例えば下記の記事などを参考にして下さい。

イベントディスパッチスレッド - MyMemoWiki
http://typea.info/tips/wiki.cgi?page=%A5%A4%A5%D9%A5%F3%A5%C8%A5%C7%A5%A3%A5%B9%A5%D1%A5%C3%A5%C1%A5%B9%A5%EC%A5%C3%A5%C9

LookAndFeelは、全てのFrame等の作成前に指定しています。
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");

LookAndFeelはFrame単位のものではないので、設定はJVM起動時に1度行えば良いです。

投稿2016/08/22 22:06

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuhi

2016/08/24 03:39 編集

ありがとうございました。 スレッドを別に立ててもいなく、「ActionListener.actionPerformed」などで、 イベント処理をハンドリングしていたので大丈夫だと思っていました。 スレッドセーフに関係する現象なので発生も決まって起きる訳でもなく解決したか、 正確には分かりませんが、色々テストして確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問