問題タブ [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.

0 投票する
0 に答える
27 参照

java - ボタンのクリック後にinvokelaterが実行されない

私はinvokeLaterを使用していますが、希望どおりに機能していません。

ボタンのクリック後に jLabel を更新したいのですが、jLa​​bel に出力されません。

私のプログラムは完全なコンピューター名を見つけて、同じインスタンス内で jLabel を更新することになっていますが、まったく更新されておらず、その理由がわかりません。

クラス全体をここに貼り付けたくはありませんでしたが、見たい場合は、ここにあります: http://pastebin.com/BsU9zST4助けていただければ幸いです。

ラベルはtestLabelと呼ばれます

0 投票する
1 に答える
250 参照

java - invokeLater と NetBeans のメイン クラス

NetBeans を使用して新しい JFrame プロジェクトを作成するときに、自動生成されたコードを調べていたところ、私のmainメソッドで次のことがわかりました。

いくつか読んだ後、GUI コンポーネントが EDT で処理されるように、invokeLater の必要性を理解するようになりました。そうは言っても、new TestClass().setVisible(true);ここで実装されている行は、私には少し気が遠くなります。新しいインスタンスを作成するコンテキストで取得します...

run()...しかし、上記の方法で何が起こっているのかよくわかりません。そのコードは匿名クラスを作成していますか? 私はその用語に出くわしましたが、まだ完全には理解していません。そのインスタンスを参照するための変数(とにかく見ることができる)がないため、上にリストした「教科書」の方法でインスタンスを作成していないと思います。

余談ですが、mainメソッドをJFrameクラス(またはGUIクラス)内に配置するのは理想的ではないように思われるので、おそらく移動します。

0 投票する
2 に答える
894 参照

java - 別のスレッドで GUI メソッドを呼び出した後、GUI が更新されない

編集:私のコードを簡素化しました。

これは、GUI およびサーバー スレッドを初期化するメイン クラスです。

現在、私のpublic class TransceiverGUI extends javax.swing.JFrame implements Runnableクラスには、次のメソッドがあります。

GUI クラス内から (任意の EventListener から) 呼び出されるたびincomingFileRequestに、完全に機能し、GUI が更新されます。

incomingFileRequestただし、クラス/スレッドから呼び出すとServer、コードが実行されて正しい値が返されますが、GUI は更新されません。

サーバー スレッドは次のように呼び出します。 // POPUP with request boolean answer = gui.incomingFileRequest(message.getMessage(), message.getFileSize(), message.senderIPAddress);

GUI を更新するコードを、次のような新しいスレッドを作成するブロックに配置しました。

私も試しjavax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { /* update GUI code */ } });ました。

私の質問は、別のスレッドから GUI クラス内のメソッド (GUI を更新する) を呼び出すにはどうすればよいですか? コードが完全に実行されることに注意してください。GUI 要素は更新されません。

どんな助けでも大歓迎です。

0 投票する
0 に答える
51 参照

java - 操作が完了するまでJFrameがスタックするのはなぜですか?

「中止」で作成しましたJFrameJButton

これJFrameは、操作のステータスを示します。

operation()関数に実行したい操作のコードが含まれているとしましょう。

関数のコードが実行されている間、 「中止」operation()をクリックできません。JButtonJFrame

そのため、原因はイベントディスパッチャーである可能性があると考えたため、invokeLaterofを使用して問題を修正しようとしましたSwingUtilities:

ただし、JFrame操作のコードが実行されている間は、まだスタックしています。どうすればこれを修正できますか?

0 投票する
1 に答える
785 参照

java - invokelater で JFileChooser を 2 回呼び出すと、プログラムが終了しない

2 つのテキスト ファイルから情報を収集してデータベースのテーブルに追加するプログラムを作成しています。ユーザーが自分のファイルを選択できるようにするために、クラスをchooseFile()使用してa を表示するという非静的メソッドを作成しました(静的メソッドとしても試してみましたが、同じ結果が得られました。推測しているように聞こえる場合は、あなたは正しいです-私はプログラミングについてはまあまあです)。JFileChoosershowOpenDialog

私の理解では、Swing クラスへの呼び出しは をmain()使用して行う必要がありますinvokelater。これは、 への 1 回の呼び出しではすべて正常に機能しました (JVM は正常に終了しました)chooseFile()が、2 回目の呼び出しを JVM に追加するとchooseFile()、JVM は無期限に実行され続けます。chooseFile()ただし、を使用せずに実行すると、プログラムは両方の呼び出しで正常に終了しますinvokelaterSystem.exit(0)2 番目の呼び出しの後に追加するとinvokelater、プログラムを正常に終了させることもできます。

私が収集できたものから、プログラムはすべての (非デーモン) スレッドが閉じられるまで終了しません。invokelaterただし、スレッドセーフでない Swing 関連のすべてのアクティビティを EDT にプッシュすることが使用の目的であると考えました。ここでベストプラクティスを使用しSystem.exit(0)ていますか、それとも他に知っておくべきことがありますか?

これが私のSSCCEです: