問題タブ [invokelater]
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 - main メソッドで SwingUtilities.invokeLater を使用する理由
何年にもわたる Java プログラミングの後、私はいつも次のmain()
ようなメソッドを作成していました。
しかし最近、Web からいくつかのコードを調べたところ、main()
上記の通常の使用法ではなく、次のようなコードが時々見られました。
私は単に知りたい:
- 通常の
main()
方法ではなく、なぜこれを使用するのですか? 試してみると違いがわかりません。 - これら2つの方法の違いは何ですか?
私とあなたの答えを読んでくれてありがとう。
java - なぜinvokeAndWait()がスタンドアロンアプリケーションではなくアプレットに好まれるのですか?
Java ドキュメントには次のように書かれています。
アプレットでは、invokeAndWait() を使用して init() メソッドから GUI 作成タスクを起動する必要があります。そうしないと、GUI が作成される前に init() が返され、Web ブラウザがアプレットを起動する際に問題が発生する可能性があります。
init()
GUI が作成される前に戻ったら何が問題なのですか? ブラウザにどのような問題が発生する可能性がありますか?
ドキュメントはさらに次のように述べています。
他の種類のプログラムでは、通常、GUI 作成タスクのスケジューリングは最初のスレッドが最後に行うことなので、invokeLater() を使用するか、invokeAndWait() を使用するかは問題ではありません。
GUI 作成タスクが最後に行われると、どのように変化しますか? また、GUI の作成が最初のスレッドによって実行される最後のタスクでない場合、通常のinvokeAndWait()
方法についても述べていinvokeLater()
ます。
彼らが言おうとしていることは理解していると思いますが、それでも確認したいので、質問を投稿します。事前にサンクス!!
java - Swing GUIアプリケーションは、Event Dispatcherまたはメインスレッドから制御する必要がありますか?
Javaに関する本を何冊か読んだことがあります。それらのすべてに、GUIプログラミングを教える少なくとも1つの章がありました。それらすべてにおいて、単純なフォームアプリケーションの作成は次のロジックに従っていました。
MyFrame.java
FrameTest.java:
基本的には、JFrameをサブクラス化してフォームを作成し、インスタンス変数として他のコンポーネントを宣言し、コンストラクターでそれらのコンポーネントを初期化します。次に、別のテストクラスを作成し、そのクラスのフレームサブクラスをインスタンス化し、そのメソッドのいくつかを呼び出して表示します。
しかし、並行性のレッスンでは、作成するすべてのアプリケーションでmain()を実行するメインスレッドがあることを学びました。私の知る限り、GUIアプリケーションを作成するためにSwingを使用する場合、別のスレッド(Event Dispatcher Thread)があります。したがって、私が間違っていなければ、すべてのSwingベースのGUIアプリケーションには少なくとも2つのスレッドがあります。これにより、すべてのGUIアプリケーションがマルチスレッド化されます。また、私が読んだいくつかの記事やチュートリアルでは、Swingはマルチスレッドをサポートしていないため、すべてのGUIコンポーネントは、イベントディスパッチャースレッドでのみ作成および変更する必要があります。そうしないと、スレッドの干渉やメモリの不整合エラーが発生する可能性があります。
ウィキペディアの最も単純な例(http://en.wikipedia.org/wiki/Swing_%28Java%29)でも、invokeLaterメソッドを使用してこのように作成されています。
では、どちらが真のアプローチですか?私はどこが間違っていますか?
java - イベントディスパッチスレッド
イベントディスパッチスレッドと、メインスレッドのような通常のスレッドとの違いは何ですか?
コーディングによって、これら2つのコードの違いは何ですか:
メインスレッドやその他の通常のスレッドでは実行できない EDT の機能は何ですか?
java - パラメータ付きSwing Runnable
新しい Swing スレッドを実行して、パラメーターを渡したいと思います。このようなもの:
パラメータをスレッドに渡す方法の答えが見つかりましたが、必要に応じて再構築する方法がわかりません。アイデアをありがとう。
java - SwingUtilities.invokeLater() が 1 フレームだけ表示される
小さな Java 2D ゲームを作成するために Swing を使用しています。画像を表示するだけです。私は EDT に参加していないので、SwingUtilities.invokeLater() を使用して作業を行っています。使用すると、画像が表示されません(実際には数ミリ秒表示されて消えます)。SwingUtilities.invokeLater() を使用しない場合、画像は正しく表示されますが、invokeLater() を使用する必要があります。
これが私の基本的なコードです:
}
何か案が ?
ありがとう。
java - Runnable と Invoke() の説明
誰かがこの下に書かれたコードを説明してもらえますか?
これは、ユーザーがフォルダーからファイルを選択し、このファイルをチャンクに分割できるようにする Java プログラムの一部です。
java - JEditorPane への高速書き込み
以下のコードでは、JEditorPane に 0 から 10000 までの数字を書き込みたいと思います。ただし、JEditorPane は、完全に完了する (一度に 0 から 10000 のすべてを出力する) か、OS がリフレッシュする時間を与えない限り、何も表示しません。内容を表示します。いずれの場合も、ユーザーがアプリケーションがクラッシュしたと考えるほど、アプリケーションはしばらく応答しなくなります。jEditorPane がまだビジーであっても、更新されたコンテンツを強制的に表示することはできますか? 私は invokeAndWait を試しましたが、イベント ディスパッチャ スレッドからは invokeAndWait を呼び出すことができないため、ここでは役に立ちません。
つまり、 を に置き換えるThread.sleep(0)
とThread.sleep(50)
、問題なく動作し、結果が発生したときに結果を表示しますが、50 ミリ秒の遅延を追加すると、非常に遅くなります。私が望むのは、JEditorPane を時々更新して、ユーザーがアプリケーションがクラッシュしたと思わないようにすることだけです。updateMessages() のみを変更することを好みます。
これが私のコードです: