問題タブ [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 投票する
1 に答える
42 参照

java - サブクラスと対話する呼び出しと待機

私は、後で呼び出し、呼び出して、サイト全体で待機する多くの良い例を見つけました。ただし、私が抱えている問題は、メインメソッドによって呼び出されるクラスから応答を取得したいということです

メインメソッドがサブメソッドを呼び出して、これが呼び出しと待機メソッドでどのように構築されるかを確認するコードを提供できますか? 前もって感謝します

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

java - Java SwingUtilities.invokeLater update TextArea

私は次のクラスを持っています:

  • メインサーバー
  • TCPサーバー
  • UDPサーバー

GUI が初期化されている MainServer クラスから、TCPServer および UDPServer クラス (開始) の新しいインスタンスを作成します。この GUI には、ログ情報 (エラー、ステータスなど) を表示するために TCP または UDP クラスのいずれかが更新する必要があるtextAreaがあります。私はいくつかの検索を行い、MainServer で EDT を使用する必要があるかもしれないことを知っていますが、TCPServer または UDPServer から MainServer クラスのこのオブジェクトにアクセスする方法を知りません。現在、望ましくないコンソールにしか印刷できません。TCPServer から MainServer.printlog にアクセスするには? または Mainserver.textArea オブジェクト? TCPServer または UDPServer から新しい MainServer インスタンスを作成すると、これは機能していないようです。

これは MainServer クラスの私の関数です:

編集:新しいインスタンスを作成してMainServerアクセスしようとしましたが、次のprintLogようになります:

0 投票する
6 に答える
6373 参照

java - JAVAでGUIを表示するために別のスレッドを使用する必要があるのはなぜですか

この単純な問題は私を混乱させます。setVisibleフレームのプロパティを設定することにより、JAVAGUIアプリケーションを表示できますtrue。しかし、私がインターネットで見つけたほとんどすべての例では、同じことを行うために別のスレッドを使用しています。

彼らはこのようなことをします、

2つの方法に違いはありませんでした。しかし、特別な理由があるに違いありません。それが、誰もがこれを行っている理由です。

誰かがそれを説明できますか..ありがとう!

0 投票する
5 に答える
1298 参照

java - 負荷の高いプロセスで Swing コンポーネントを更新できない

匿名SwingWorkerスレッドで非常に重いプロセスを実行しています。それまでの間、進行状況バーを使用して GUI に進行状況を報告しています。しかし、Swing スレッド化は私を悩ませています。それは単に時間内に何も更新していません。SwingWorkerスレッドから、および外部から GUI を更新しようとしたが、どちらも動作を拒否したため、その方法がわかりません。

負荷の高いワーカー スレッドの実行中に Swing UI を確実に更新するにはどうすればよいですか?

私が試したこと

これは機能しません (invokeLaterコマンドでのラップの有無にかかわらず)。


さらに、並行測定スレッドから UI を更新しようとしても機能しません。

0 投票する
3 に答える
833 参照

java - カスタム モーダル ダイアログ

基本的に JFrame のガラス枠として設定された JPanel である独自のダイアログを作成しています。ダイアログが表示されている間は setVisible() の後のすべてのコードが実行されず、ダイアログが閉じられると setVisible() の後の残りのコードを続行する必要があるという意味で、ダイアログをモーダルにしたいと考えています。

これを実現するために、スレッドを使用してダイアログを表示しています。別のスレッドで実行されるため、SwingUtilities.invokeLater() メソッドを使用して GUI を更新する必要があることはわかっています。ただし、私のダイアログは画面に表示されません。

これが私のコード例です:

ダイアログが表示されないのはなぜですか?

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

java - SwingUtilities.invokeLater : 問題

それが今SwingUtilities.invokeLaterまで避けてきた理由ですが、Swing Threadを安全にすることは非常に重要です。すみません、今回が初めてなのでよろしくお願いします。データベースクエリの後にウィンドウを閉じようとしています。したがって、私が理解している限り、更新はUIによって処理される必要がありますSwingUtilities.invokeLater。私の仕事は次のとおりです。

主要:

ADD ボタンのリスナー

参照ボタンのリスナー

ここに問題があります。終了するコードです。

画面: スクリーンショット

どこが間違っているのか説明してください。使いたくないSystem.exitので、質問が多すぎてすみません。ありがとうございます。

アップデート:

これは、 @trashgod によって要求されたサンプルの作業コードです。

exit()実行してウィンドウを閉じるように修正する方法を教えてください。

0 投票する
3 に答える
1141 参照

java - 実行時にスイング コンポーネントを作成する

アプリケーションを作成しましたが、期待どおりに動作します。データベース クエリが実行されている限り、GUI は応答し続けます。SwingUtilities.invokeLater() を使用してカスタム パネルを作成すると、GUI が非常に短時間フリーズします。

SwingUtilities.invokeAndWait() を使用すると、ハイエンドのゲーミング PC で非常にスムーズに動作します。(おそらく、コーディングするのに最適なマシンではありません...) しかし、比較的遅いマシン (デュアルコア、2GB RAM) では、GUI が「遅れる」

動作を再現する非常に最小限のバージョンのプログラムを作成しました。テスト時に TEST_NUMBER_OF_PANELS の値を増やします。

派手なルックアンドフィールや追加のコンポーネントなしで、現在のPCで動作を再現するために、非常に大きな値に設定しました。しかし、私はこのように投稿したくありません。だから私はそれを100に減らした

EDT ではなく SwingWorker でできるだけ多くのコードを実行する必要があると思います。別のスレッドで TableModel にアクセスする必要があることを認識しています。アプリケーションに JTable が 1 つしかない場合は、単純です。EDT でテーブルを作成し、スレッドでデータを更新します。

その場合、どのアプローチが望ましいかわかりません。現在、タブ関連はすべて TestPanel クラスで管理されています。これは完全に EDT で実行されます。

もちろん、TableModel を処理する TestPanel でスレッドを実行することもできますが、パネルごとに新しいスレッドを作成することは、私には賢明な考えのようには思えません。

もう 1 つの「アイデア」は、データベース クエリが実行されているのと同じスレッドの TestTab でモデルを直接作成することでした。しかし、それは TestPanel に属しているため、このアプローチは悪い設計のように思えます。

私が持っていた最も汚いアイデアは、invokeAndWait() を使用し、Tread.sleep() をしばらく放置して、ETD が数ミリ秒ごとに新しい呼び出しによって平手打ちされないようにすることでした。しかし、実際にはそのようにコーディングしたくありません。

どの設計アプローチが最も望ましいでしょうか?


実行時に JTabbedPane にいくつかのカスタム パネルを作成したいと考えています。カスタム パネルの数は、データベース クエリの結果セットによって異なります。

各カスタム パネルには、結果セットからのデータのチャンクといくつかの JButton を含む JTable が保持されます。

私の計画は、SwingWorker を使用して別のスレッドでデータベース クエリを実行することです。Swing コンポーネントは EDT で作成してアクセスする必要があるため、invokeLater() を使用してイベント ディスパッチ スレッドでタスクをスケジュールし、カスタム パネルを作成します。

このアプローチでは、結果セットに多くの行が含まれている場合、カスタム パネルの作成中に GUI がフリーズする可能性があります。

この問題を解決または最小化する最もエレガントな方法は何ですか?


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

java - Swingオブジェクトの静的代入はOK?

例: これはクラス MyPane で使用できますか?

Swingに問題はありますか?これらの割り当ては常に invokeLater に入れる必要がありますか? ありがとう。

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

java - コンボボックスJavaのドキュメントが更新されない

私はBing/Googleinstant searchのような機能をで書いてcombo boxいるので、このコンボボックスは、ユーザーが入力した内容に基づいてユーザーに提案を提供します。プログラムは魅力のように機能しますが、それらは私が解決する方法を理解できない1つのバグです。問題は、最初に入力された文字が2番目に入力された文字として認識されることです。これは、他の文字の位置にも当てはまります。

コードは次のとおりです。

私は何が間違っているのですか?

DocumentListenerコンボボックスに何かが入力されているときにが呼び出されなかったため、keyListenerをコンボボックスエディターに追加しましたか?これに代わる簡単な方法が他にある場合は、それを共有してください。

上記の問題をどのように解決できますか?