SwingUtilities.invokeAndWait
Java Swing の GUI コードは、または内に配置する必要があることを知っています
SwingUtilities.invokeLater
。このように、スレッド化は正常に機能します。
悲しいことに、私の状況では、GUI はバックグラウンド スレッドよりもはるかに時間がかかるものを更新します。より具体的には、約 400 エントリで JTree を更新します。ネストの深さは最大 4 です。ただし、1秒かかる場合もあります。ユーザーが遅延なく JTextPane に入力できるようにする必要があります。JTree の更新が遅いと、入力中に JTextPane の遅延が発生します。ツリーが更新されるとすぐに更新されます。
私は Netbeans を使用しており、経験的に、Java アプリは残りの UI をフリーズすることなく多くの情報を更新できることを知っています。
どうすればそれができますか?
注 1: これらDefaultMutableTreeNode
はすべて の外部で準備されinvokeAndWait
ます。
注2:ツリーに置き換えinvokeAndWait
てinvokeLater
も更新されません。
注 3: 再帰的なツリー展開に最も時間がかかることに注意してください。
注 4: カスタム ツリー セル レンダラーを使用しています。使用せずに試して報告します。
注 4a: 私のツリー セル レンダラーはマップを使用して、作成された をキャッシュし、JTextComponent
ツリー ノードに応じて (キーとして) 再利用します。
手がかり 1 : うわー! カスタム セル レンダラーを設定しないと、 10 倍速くなります。カスタム ツリー セル レンダラーを作成するための適切なチュートリアルはほとんど必要ないと思います。残念ながら、カスタム セル レンダラーが必要です。