問題タブ [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 - Java イベントディスパッチスレッドの説明
私は最近、Java での GUI プログラミングの基礎を学び、探求し始めました。
しばらくプログラミングをしていたので、バックエンドの作業や作業しか行っていませんでした。その結果、ユーザー インターフェイスに最も近いのはコマンド コンソールです (恥ずかしいことです)。
私は Swing を使用しています。私が収集できる限り、その拡張により、AWT も使用しています。
私の質問は、次のコードに基づいています。
この奇妙なコードを完全に理解したいと思っており、「イベントディスパッチスレッド」という用語に何度も出くわしたため、しばらくこれを調査してきました。私が間違っている場合は訂正してください。複数のスレッドを使用することと、Java Swing がそれらのスレッドを解釈する方法に関係しています。上記のコードは、ウィンドウを作成する前にすべてのスレッドが「安全」であることを確認するために使用されるため、invokeLater?
私はそれを読んだ:
「イベントディスパッチスレッドからフレームで動作するメソッドのみを呼び出すことができます」
また、特定の状況下でのみ、メイン メソッドからフレームで動作するメソッドを呼び出すことができます。
誰かがイベントディスパッチスレッドとは何かを明確にしてくれませんか?
複数の実行スレッドとどのように関連し、それらのスレッドが main メソッドから呼び出されるのは安全ではないのでしょうか? また、なぜこの invokeLater が必要なのですか?
ウィンドウを他のオブジェクトとして作成することはできませんか?
これらの関係とアイデアを把握していないため、研究で少し障害が発生しました。
余談ですが、私は深い理解に基づいて自分の知識を基にしたいと思っています。これが全体的な最良の結果につながり、結果として最良のプログラムにつながると信じているからです。何かがどのように機能するかを深く理解している場合は、コードにオウム返しするだけでなく、ヒントや微調整を効果的に使用できるので、恐れずにさらに詳細な説明を提供して知識を広げてください.
ありがとうございました。
java - ループ内のjavax.swing.JFramesetText()?+意図的な遅延?
私はJavaを初めて使用し(約1週間しか使用していません)、ストアシミュレーターに取り組んでいます。基本的には、画面に表示されている変数を閉じるまでの時間や開いてからの時間など、今すぐ基本的なことをやりたいと思っています。
シミュレーションで次の関数を作成し、javax.swing.JFrameクラスを拡張しました。
setText()メソッドを使用するopenTime変数とtimeLeft変数は、GUI自体の一部です。
主に、私は次のようにincOpenTimeを呼び出します。
まず、これを実行すると、基本的にループを通過し、最後にのみ画面に出力されます。時代が絶えず変化するようにするにはどうすればよいですか?
次に、少し遅らせたいと思います...おそらく1秒あたり約1ミリ秒なので、シミュレーションの実行速度が遅くなり、画面に出力される他のデータ(後で)が読みやすくなります。Thread.sleep(1);を試しました。ループ内にありますが、変更された番号は表示されません。
助けてください。
ありがとう
編集:
これが私がそれを機能させるためにしたことです。主に:
新しいクラスを作成しました:
java - 複数のイベント ディスパッチ スレッド
私は Java Swing を初めて使用します。私の質問は、イベント キューとディスパッチ スレッドに関連しています。
AppContextインスタンスごとに複数のイベント キューを持つことが可能であると読みました。同様に、各 AppContext イベント キューには独自のイベント ディスパッチ スレッドがあるということですか。
java - スイングinvokelaterフリーズ
アクションのボタンから直接invokeLaterを呼び出すim次のコードで実行:
それでもGUIがフリーズします。なんで?invokelater関数を使用しなくても同じ結果が得られます。
使用する必要があります
代わりは?
編集:
おかげで、新しいスレッドを使用する必要があります。
java - AWT EventQqueue AccessControlException
システム イベント キューを介して独自のテスト イベント キューをプッシュしています。そして、TestEQueue では、super.dispatchEvent を 1 回呼び出して、dispatchEvent メソッドをオーバーロードしました。
しかし、何らかの理由で、新しい TestQueue でのディスパッチが AccessControlException で失敗します。TestEQueue を使用せずにメイン プログラムで同じイベントが正常にディスパッチされる場合。
両方のキューが同じスレッド グループで実行されるため、これはどのように可能になるのでしょうか? この問題をデバッグするにはどうすればよいですか? これは非常に大規模なテスト コードベースの一部であるため、機能コードをコピーすることはできません。これはセキュリティマネージャーに関連していますか?
java - マルチタスクアプリケーションでGUIとEDTを管理する
WinRARのようなアーカイブを作成および抽出するためのJavaアプリケーションを開発しました。マルチスレッドを使用すると、同時に複数のアーカイブを作成できます。そして最近、アーカイブの作成中に、作成のたびに新しいJFrameにJProgressBarの形式で情報ステータスを追加したいと思いました。
しかし、私の問題は、アーカイブを作成する新しいステータスフレームとスレッドで情報を生成することです。そのため、現在プログレスバーを更新するためにアーカイブスレッドにJFrameを作成しています。
しかし、私がさまざまな情報源やあなたの回答/コメントでそれを読むことができたように、それはJavaSwingとパフォーマンスに反しています。EDT以外の場所でスイングオブジェクトを作成することはできません。
しかし、それでは、どうすれば問題を解決できますか?アーカイブの書き込みとそのステータスJFrame(JProgressBarを使用)の間の通信を確立するにはどうすればよいですか?
編集:
アプリケーションのGUIを管理するためにSwingWorkerを実装しました。これで完了です。別の質問があります。
SwingWorkerを使用して、ステータスフレームのボタンのイベントでバックグラウンドタスクを実行するにはどうすればよいですか?(例:圧縮を一時停止または停止します。)
java - AWT のロギングを有効にする方法
マウス イベントが異常な方法でスタックするというパフォーマンス上の問題があります。プロファイリング ツールによると、AWT スレッドは常に非常に占有されています。AWT スレッドが何をしているかについての詳細なログ メッセージを吐き出すためのスマートな方法 (プロパティ ファイルなどに値を設定するなど) があるのではないかと思います。
java - EventDispathスレッドに存在するJFrameに、その外部からパネルを追加しますか?
EventDispatchスレッドで新しいフレームを作成し、後でそのフレームに新しいパネルを追加したいと思います。しかし、私が得るのは、高さが0の空白のフレームだけです。ただし、内部クラス内から追加されたパネルは表示されます。showFirstFrame()を使用して追加するにはどうすればよいですか?この問題が発生した後は、このようなアプローチに従う必要がありました。Javaでwait()が呼び出されると、すべてのSwingフレームが「フリーズ」します。
私はこのチュートリアルを参照しています:http://leepoint.net/JavaBasics/gui/gui-commentary/guicom-main-thread.html
前もって感謝します。
編集:
java - Event-Dispatch スレッドで最後に追加された JPanel を JFrame にのみ表示します
とうとうJPanelが追加されたのしか見えない。以前のものは最後のものに置き換えられたようです。どうしてこれなの?これが私のコードです。前もって感謝します。
編集:(解決策)
ループは次のように変更されました。