問題タブ [invokeandwait]

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 投票する
4 に答える
2356 参照

java - invokeAndWait を使用して Swing から値を返す

私は次のアプローチを使用してコンポーネントを作成し、Swing から EDT の外部へ/から値を返します。たとえば、次のメソッドは を拡張してJFrame、 を作成し、JPanelそれを親に追加できJFrameます。

Runnableローカルの長さ 1 の配列は、EDT で呼び出される内から「結果」を転送するために使用されます。まあ、それは「少し」ハックに見えるので、私の質問:

  1. これは理にかなっていますか?他の誰かがこのようなことをしていますか?
  2. 長さ 1 の配列は、結果を転送する良い方法ですか?
  3. これを行う簡単な方法はありますか?
0 投票する
3 に答える
1365 参照

java - invokeLater()が呼び出されるのを待っています

私が以下で行っていることを行うためのよりエレガントな方法はありますか?つまり、Runnable.run()メソッドがいつ呼び出されたかを知るために、ポーリングとスリープ、ポーリングとスリープなどよりもエレガントな方法はありinvokeLater()ますか?

0 投票する
4 に答える
2506 参照

java - JavaスレッドはinvokeLater()とどのように同期しますか?

を使用してJFrameを開始する非GUIスレッドがあります

IBM1622GUIのコンストラクターの一部は、それ自体の「モデル」をインスタンス化します。これには、非GUIスレッドがアクセスする必要があります。

非GUIスレッドが「後で呼び出された」新しいGUIと同期する正しい方法は何ですか?(もちろん、同期がないと、IBM1622GUI.getModel()nullが返される傾向があります。)

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

java - Java - invokeAndWait の値をグローバル文字列変数に代入できません

java-simple-serial-connector API を使用してシリアル ポートの読み取りと書き込みを行うアプリケーションを開発しています。データ バイトを読み取ってグローバル文字列変数 (sReader) に割り当てようとすると、問題が発生します。sReader は文字列全体を取得するわけではなく、その長さは毎回ランダムです。文字列 sBuffer を出力 (Output.append) に追加すると、文字列全体が常に表示されるため、すべてのバイトを受信して​​いると確信しています。以下の私のサンプルコードを見てください:

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

java - java - 文字列に値が代入される前に文字列戻りメソッドが呼び出される

私のアプリケーションは、シリアル ポートの読み取りと書き込みを行うことになっています。データは、PortReader クラスの EventListener で読み取られます。今後使用するために、このデータをグローバル String 変数 (プライベート String sPortReaderString) に割り当てたいと考えています。グローバル文字列変数は、単に文字列 sPortReaderString を返す getPortReader() と呼ばれるメソッドを使用して、その値を返す必要があります。アプリケーションの JFrame で、シリアル ポート接続を開き、シリアル デバイスから自動的に応答を受信するコマンドを送信し、その応答出力をラベルに表示します。問題は、getPortReader() から返された sPortReaderString に何も割り当てられていないため、ラベルが常に空白になることです。sPortReaderString には、EvenListener で値が割り当てられると確信しています。問題は、値が sPortReaderString に割り当てられるのに十分な時間が経過する前に、JFrame のメソッド getPortReader() が呼び出されることです。私のotuputと以下のコードを見てください:

以下は私が得る出力です:

JFrame の portsMethod の短い例:

以下は、私のシリアル ポート クラスの例です。

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

java - Java API「EDT でない場合は EDT で実行」

私が持っているいくつかの反復的なコードについてのちょっとした考え:

それほど煩わしいわけではありませんが、私は見つけられませんでしたが、これをチェックする独自の機能があるようです。

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

java - Java Swing: Swing Worker、invokeAndWait、JLabel の重複

こんにちは、私は 2 つの問題を抱えています。どちらも Java Swing に関連しています。Javaでカードゲームを開発しています。タイプの配列リストを使用して各カードの値を保持し、invokeLater を使用して GUI の更新を呼び出すメインの Play() メソッドと、GUI クラスへのシングルトン アプローチを使用します。

  1. 最初の質問はかなり単純です。このように JLabels を使用して GUI でカードを作成します。関連するリスナーをアタッチし、適切なパネル (この場合は「ヒューマン ハンド パネル」) に追加します。

    /li>

私が抱えている問題は、人間の手札が 7 枚以上の場合、より大きなパネル領域が作成され、その下に新しいカードの列が開始されることです。私がやりたいのは、手札が特定のサイズに達すると、カードが互いに重なり始めることです (手札にカードを保持するように)。私は .validate() をいじりましたが、どこにも行きませんでした。ここで提供できるヘルプは大歓迎です。

  1. 2 番目の質問は、Swing Worker を使用して人間プレイヤーのカード選択を返すことについてです。Swing ワーカーについて少し読んだことがありますが、自分のゲームに Swing ワーカーを実装する最善の方法がわかりません。現在、コンソールを使用して、int の入力を選択肢 (ArrayList 内の特定のカードの場所) として受け取るスキャナーがあります。プレイヤーの手札のカードをクリックして、この int を選択したいと思います。現時点で私は使用しています:

    Card JLabels の名前を for ループで int に設定して (示されているように^^)、次を使用します。

    カードの 1 つがクリックされたときにその int を返す。Play() からも GUI メソッドを呼び出すために使用しているものは次のとおりです。

    私の質問は、適切なリスナーでハンドをセットアップする GUI クラスのメソッドを呼び出すように Play メソッドを取得するにはどうすればよいか (ここでは GUIPlayerSelection() と呼びましょう)、プレイヤーがカードをクリックするのを待ちます。次に、選択したカードを表すメイン クラスの Play() メソッドに int を返します。インボークとウェイトを使用する方法がわかりません。インボークとウェイトを使用する場合、カードがセットアップされるのを待つだけですか、それとも mouseClicked() メソッドが終了するのを待つのでしょうか? または、手のセットアップ後にマウスがクリックされるのを確実に待つために何か他のことをする必要がありますか? そして、どうすればそのintを返すことができますか? 私はスイングワーカーを使用するように言われましたが、誰かがこの場合にそれを実装する方法を説明できれば、それは素晴らしいことです.

前もって感謝します。

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

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

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

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

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

java - GUI Swing マルチスレッド アプリケーションのコード構造

私はJavaとスレッド全般に不慣れで、Javaで次のGUIアプリケーションを持っています:

  1. フレーム内で、ユーザーが任意の場所でマウスをクリックすると、画像が表示されます。

  2. 画像が表示されると、リアルタイム タイマーの実行が開始され、jLabel ユーザーが GUI で選択した値に応じて、タイマーが最大 5 秒まで更新されます。

  3. 同時にサウンドクリップが再生されます。画像と音が一致すると、ユーザーはクリックしてタイマーを停止します。一致または不一致を反映するために、いくつかの jLabel 値が更新されます。そうでない場合、ユーザーはアイドル状態になり、タイマーが切れた後にイメージ/サウンド クリップのペアが変更されるのを待ちます。ユーザーがタイマーを停止するかタイマーが切れると、アプリケーションは事前に選択された画像間の時間間隔の値を待機し、次の画像/サウンド値に進みます。

私は次の構造を持っています:

電話する

私のrun()方法で。

私のRunnable

};

後でstartTime初期化され、タスクの開始の開始基準点になります。

私のdisplayElapsed()方法は面倒で、タイマーがユーザー入力または非アクティブによって停止したかどうかを確認します。そうでない場合は、jLabelタイマーの責任者を更新します。存在する場合は、startInteraction()メソッドを呼び出します。

startInteraction()新しい画像と音声を用意し、それぞれを表示・再生し、新しいスレッドupdaterを作成して起動します。

mouseListenerユーザー入力をリッスンするもあります。ユーザーがクリックすると呼び出さupdater.interrupt()れます。

では、質問です。私は、スイングがスレッドセーフでないことを知っています。ユーザーのマウスクリックにすぐに応答しないこともあれば、適切な待ち時間なしで 2 つの画像/音声のペアを通過することもあるため、動作には間違いなく問題があります。ラベルもすぐには更新されません。

一般的に、構造はごちゃごちゃしているように見えますが、論理的に説明することはできません。

私が知っているのは、displayElapsed私が行うたびに新しいスレッドを開始し、ユーザーまたはアイドルストップがあるたびに中断することだけです。したがって、技術的には、各スレッドは順番に並んでいる必要があります。

これを行うにはもっと良い方法が必要であり、これを書き直す上で何が良いスタートになるかを知りたかったのです。

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

java - Java インボークアンドウェイト?

これは、swing ユーティリティの invokeAndWait に関する非常に単純な質問です。単一のスレッドでコードの実行を同期すると聞いたことがありますが、よくわかりません。もしそうなら、私はそれを行うためにinvokeAndWaitを使用する必要がありますか?