2011-07-13 16 views
2

私はJavaデスクトップアプリケーションで作業していますが、時にはjumeubarが表示されることもあります。そうでないと、プログラム全体がフリーズし、私はそれを殺さなければなりません。JavaスイングJMenuBarが表示されない場合があります

私はそれを作成し、フレームのコンストラクタに設定しています。

コード:


    // Load any settings we might have made from last time. 
    loadSettings(); 

    menuBar = createMenuBar(); 
    setJMenuBar(menuBar);  

    // re-evaluate and re-layout things, since they've been changed. 
    validate(); 


    addWindowListener(this);  

あなたは私のコードで見ることができるように、私はそれが役立つだろう期待して、検証()の呼び出しを追加しました。それは実際には起こりますが、問題は依然として時々発生します。

ご協力いただきありがとうございます。

+5

[SSCCE](http://pscode.org/sscce.html)を投稿しようとしてください。 – Howard

+0

ちょうど興味のない、なぜ誰もが彼らのSwingの例で 'validate()'を呼び出すように見えることを誰かが明確にすることができますか?私はそれを一度呼び出さないスイングアプリ全体を持っている...それは必要か悪いか良いデザインの練習ですか? – aardvarkk

+3

@aardvarkk - 私はほとんどの場合、これを行う必要はないと言います。レイアウトマネージャを使用している場合は、ほとんどのケースを自動的に処理する必要があります。一般に、それを含む例の普及は、スイング塗装システムが実際にどのように機能するかを理解していないという(IMHO)症状です。 – wolfcastle

答えて

4

不可欠なルールは、これらは以下のとおりです。

  1. すべて GUI要素がevent dispatch thread上に構築されていることを確認します。

  2. の場合は、の例外が飲み込まれていないことを確認してください。

例外がスローされた後にEDTが再開されることに注意してください。状況によっては、アプリケーションがフリーズしているように見えることがあります。 にはが必要ですが、コンソールに何かが表示されている場合は、Uncaught Exception Handlersの記事をご覧ください。

+2

大変ありがとうございます。私のコードでは、イベントディスパッチスレッドで何もしていません。私は適切な変更を行い、問題が残っていれば返信します。 – Richard

+0

話すのが少し早いかもしれませんが、それを修正したようです。再度、感謝します!具体的には、私はinvokeAndWait()メソッドを使用して私のために最適な動作を見つける。 – Richard

+0

参考までに、この[Q&A](http://stackoverflow.com/questions/7787998/how-to-generate-exceptions-from-repaintmanager/7788806#7788806)は、特に有用であることが判明した関連記事を参照しました。 – trashgod

関連する問題