問題タブ [event-dispatch-thread]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - MATLAB で Swing コントロールの「スレッドセーフではない」警告を有効にする
既定では、Swingの "スレッドセーフではない"警告は MATLAB で無効になっています。MATLABで有効にできるように、この警告の識別子を知っている人はいますか?
Yair Altmanは何年も前にそれについて投稿しましたが、もう見つけることができません。http://www.mathworks.ch/matlabcentral/newsreader/view_thread/129919も参照してください。
このリンクは、スレッドの安全性と重要性に関するものです: http://undocumentedmatlab.com/blog/matlab-and-the-event-dispatch-thread-edt/
java - SwingUtilities.invokeLater は何をしますか?
何をしSwingUtilities.invokeLater
ますか?run
メソッド内のコードブロックの実行を遅らせているだけですか? invokeLater
関数内でアクションを呼び出すことと、実行したいスレッドの最後で単にアクションを呼び出すことの違いは何ですか? 関数が実際に何をするのか、誰かが私を助けることができますinvokeLater
か?
java - JTextAreaが更新されないのはなぜですか?
私は次のようなコードを持っています:
ただし、setTextが呼び出されたときにループが繰り返されるたびにテキスト領域を更新するのではなく、タスクのすべての実行が完了したときにのみテキストを更新するように見えます。なぜこれが発生するのですか、どうすれば解決できますか?
java - GUIの残りの部分に影響を与えずに実行されているバックグラウンドジョブ
一般的なアプローチについて支援を求めています。
buttonclickでメールボックスに未読メールがないかチェックするJavaコードを作成しました。
ここで、このコードをバックグラウンドで永続的に実行し、2分ごとにメールボックスをチェックする必要があります。
悪いアイデア:
グラフィカルインターフェイスの残りの部分は明らかにフリーズするので、スレッドで何らかの魔法が発生する必要があると思います。
これはどのように実現できますか?
java - JVMがシャットダウンしていることを検出する
addShutdownHook()を使用してCtrl + Cを処理するSwingアプリケーションがあり、通常の状況でJLabelテキストを変更する関数を呼び出すシャットダウンタスクの1つまで正常に動作し、その時点でハングします。
問題は、Swing EDTが終了したか、何かを待っていることだと思います。
EDTが終了したか「完了」したかを判断する方法(Swingメソッドの呼び出しを回避できるようにするため)、またはCtrl-Cでの通常のウィンドウを閉じる動作を防ぐ方法はありますか?
明確にするために:
というクラスのメソッドがありstop()
ます。通常の状況では、これは(その補足とともにstart()
)呼び出される可能性があり、発生した視覚的なフィードバックのために、JLabelが更新される原因となる一連の事柄をトリガーしますstop()
。
シャットダウンフックが実行されたら、stop()
いくつかのリソースを正常にシャットダウンするために呼び出す必要があります。
私が求めているのは、Swing EDTが存在しないことをどのように検出できるかということです。そのためstop()
、Swingの欠如を検出し、Swing関数の呼び出しを回避するように書き直すことができます。
java - Java Swing EDT と並行性
invokeLater() Runnable で同期性を確保する必要があるかどうか疑問に思っていました。
デッドロックが発生しており、並行性を維持しながらそれを克服する必要があります。
これは良いコードの例ですか?:
text
かなり悪い例で申し訳ありませんが、は別のスレッドによって変更されており、注入できず、正しい値に依存していると想定する必要があります。
これは適切な解決策ですか、それとも、同期されたコードを未知のコンテキストに送信することで、意図せずにデッドロックの問題を引き起こすのでしょうか..?
ありがとう。
java - Forcing JLabel to display text before expensive operation
I'm having trouble getting a JLabel
to display text immediately before updating it with an ImageIcon
.
I have a JLabel that is a fixed size that will be displaying either text or an image that fits it perfectly. I'm trying to get it to display the text "Loading..." and then immediately after, get it to load an image from a URL and replace the text with it.
(Assume that exceptions are caught properly and all required imports are made, and that the image exists and is valid.)
The above code does not display the text; all that happens is the application hangs as the image is downloaded and displayed after a fraction of a second, mostly as expected. How can I force swing to update the JLabel before progressing on to replace it with the image? Or, do you know a different, more efficient way to achieve this?
java - Swing のロード中に JProgressBar を更新/ペイントして GUI を構築する方法
GUI が実行されているプラットフォームでビルド/初期化するのが非常に重い GUI があります。したがって、初期化中に進行状況を更新したいと考えています。
初期化中に特定の場所で更新したいJLabelとJProgressBarを含む装飾されていない小さなJDialogがありますが、イベントディスパッチスレッド(Swingルールに従って)がGUIの構築/初期化に使用されるため、進行状況はもちろんですEDT が再びアイドル状態になるまで (つまり、初期化が完了するまで) 更新されません。
「paintImmediately」を使用して再描画するようになった JProgressBar ですが、JLabel とダイアログ自体に対して適切に機能させることができないようです。これを達成するための簡単な推奨/実証済みの方法はありますか?
乾杯...
編集:私がやろうとしていることの例を追加します。もちろん、大幅に単純化されています。
progressBar.setValue()
/上記の呼び出しによって発生しprogressLabel.setText()
た再描画は、もちろん、EDT がビジーである限りキューに入れられ、途中で更新するのではなく、すべて完了した後に再描画が行われます..
java - イベントキューをクリアするJavaスイング
これを標準的な方法で行うことは可能ですか?
これがシナリオです。
EDT でコストのかかる作業を開始します (コストのかかる操作が終了するまで、EDT はブロックされます)。
EDT がブロックされている間、ユーザーはマウス ボタンをクリック/ドラッグし続けました。すべてのマウス操作はどこかに記録されます。
EDT が解放されると (高価なものがなくなると)、マウス イベントの処理が開始されます。
ステップ 3 で必要なのは、積み重なったマウス イベントを破棄することです。EDT が解放された後、新しいマウス イベントは通常の方法で処理する必要があります。
これを達成する方法についてのアイデア。
PS: EDT がブロックされるのを防ぐことはできません (プログラム内の一部のモジュールの動作を制御していません)。
編集:「SunToolkit.flushPendingEvents()」を安全に呼び出すことができれば、EDT で高価な操作を開始する前にいつでもガラス板を配置できます。高価な操作が終了した後、EDT スレッドですべてのイベントをフラッシュします。イベントは、何もしないグラス ペインに移動します。その後、EDT を通常どおりに機能させます。
EDIT2: 問題を示すために SSCCE を追加しました。
SSCCE を実行する
「3 秒待つ」ボタンをクリックします。高価な操作をシミュレートします。マウス カーソルがビジーに変わります。
カーソルがビジー状態のときに、トグル ボタン [Click me] をクリックします。3 秒後にトグル ボタンの状態が変化した場合、マウス イベントはトグル ボタンによって受信され、トラップされませんでした。
カーソルがビジーに見える間、生成されたマウス (およびその他の) イベントが破棄されるようにします。
ありがとう。
java - SwingUtilities.invokeLater
私の質問は に関連していSwingUtilities.invokeLater
ます。いつ使用すればよいですか?GUI コンポーネントを更新する必要があるたびに使用する必要がありますか? それは正確に何をしますか?直感的に聞こえず、一見不要なコードを追加するため、それに代わるものはありますか?