問題タブ [swingworker]
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 - SwingWorker のパブリッシュを他のメソッドに委任する方法
私の「問題」は次のように説明できます。バックグラウンドで実行したい集中的なプロセスがあり、Swing JProgress バーを更新するとします。解決策は簡単です:
ここで、時間がかかるさまざまな方法があるとします。たとえば、サーバーからファイルをダウンロードするメソッドがあります。または、サーバーにアップロードする別のもの。または本当に何でも。パブリッシュ メソッドをこれらのメソッドに委任して、GUI を適切に更新できるようにする適切な方法は何ですか?
これまでに見つけたのはこれです(たとえば、メソッド「aMethod」が他のパッケージにあると仮定します):
それは機能しますが、何かが欠けていることは知っています。何かご意見は?
java - 多数のオブジェクトがSwingWorker.process()メソッドに渡された場合はどうなりますか?
面白い状況を見つけました。あなたがSwingWorkerを持っているとしましょう(私はこれを漠然と自分のものを彷彿とさせます):
バックグラウンドで行われた作業が重要である場合、物事はうまく機能します-process()
オブジェクトの比較的小さなリストで呼び出され、すべてが幸せです。
問題は、バックグラウンドで行われた作業が何らかの理由で突然重要でなくなった場合、process()
オブジェクトの膨大なリスト(たとえば、1,000,000を見た)を受け取り、各オブジェクトを処理するまでに、イベントディスパッチに20秒を費やしたことです。スレッド、まさにSwingWorkerが回避するように設計されたもの。
はっきりしない場合は、これらの両方が私にとって同じSwingWorkerクラスで発生します。これは、入力データと、呼び出し元が必要とする処理のタイプによって異なります。
これを処理する適切な方法はありますか?もちろん、バックグラウンド処理スレッドを意図的に遅らせたり、譲ったりして、毎回少ない数が到着するようにすることはできますが、これは私にとって正しい解決策とは思えません。
java - SwingWorker スレッドの実行中に GUI が応答しないのはなぜですか?
実行中にインターフェイスを完全にロックする IOBound タスクを含む SwingWorker スレッドがあります。通常のワークロードをカウンター ループに交換しても、結果は同じです。SwingWorker は基本的に次のようになります。
}
それを開始するコードは、JFrame を拡張するクラスに存在します。
StatusFrame の興味深い部分は次のとおりです。
}
私が見る限り、「長時間実行」はすべてワーカーによって処理され、EDT の GUI に触れるものはすべて処理されます。それとも、SwingWorker に期待しすぎているのでしょうか?
java - SwingWorker から SwingWorker を実行中 - 最初の SwingWorker が停止するまで待機
別の SwingWorker (MainWorker) から SwingWorker (SubWorker) を実行しようとしていますが、SubWorker が完了するまで MainWorker を待機させたいと考えています。それまでの間、MainWorker は SubWorker のプロパティの変更に従って自身を更新する必要があります。
問題は、MainWorker が SubWorker の終了を待っている間に、MainWorker が終了するまで SubWorker の doInBackground メソッドが呼び出されないことです。
SubWorker を MainWorker のアクティビティと並行して実行するにはどうすればよいですか?
java - このSwingWorkerコードをテスト可能にするにはどうすればよいですか?
このコードを考えてみましょう:
url
はJTextFieldであり、「creator」はファイルを書き込むために挿入されたインターフェイスです(そのため、その部分はテスト中です)。これは例として意図されているため、ファイルが書き込まれる場所は意図的にハードコーディングされています。また、java.util.loggingは、単に外部依存を回避するために使用されます。
これをどのようにチャンク化してユニットテスト可能にしますか(必要に応じてSwingWorkerを放棄し、少なくともここで使用されているように、その機能を置き換えます)。
私の見方では、doInBackgroundは基本的に大丈夫です。基本的な仕組みは、ライターを作成して閉じることです。これは、テストするにはほとんど単純すぎて、実際の作業はテスト中です。ただし、doneメソッドは、親クラスのactionPerformedメソッドとの結合や、ボタンの有効化と無効化の調整など、引用に問題があります。
ただし、それを引き離すことは明らかではありません。ある種のSwingWorkerFactoryを挿入すると、GUIフィールドのキャプチャを維持するのが非常に難しくなります(設計の改善がどのようになるかはわかりません)。JOpitonPaneとDesktopには、シングルトンのすべての「優れた点」があり、例外処理により、getを簡単にラップすることは不可能です。
では、このコードをテストするための良い解決策は何でしょうか?
java - このSwingWorkerはThreadPoolExecutorでスレッドを再利用していませんか?
最終年度のプロジェクトの一環として、「グラフィカルIDE」のカテゴリに該当するデスクトップアプリケーションを開発しました。情報アーキテクチャとインタラクションデザインのためのJessyJamesGarrett Visual Vocabularyの小さなサブセットを実装したので、ユーザーはWebアプリでのユーザーエクスペリエンスを表す図(つまり、有向グラフ)を描画し、ページにHTMLテンプレートを割り当てて、次のように書くことができます。アプリケーションがコンパイルされ、ユーザーが対応するハイパーリンクをクリックすると、実行されるコネクタ/トランジションへのコード。
(複数のハイパーリンクを投稿することはできませんが、JJGのビジュアルボキャブラリーで説明されているユーザーエクスペリエンスの要素のようなページとコネクタを参照しています)
そのため、別のSwingWorkersを使用して、ダイアグラムが変換されるC++ソースファイルのセットを生成しています。ログを見ると、アプリが再利用するのではなく、常に新しいスレッドを作成していることがわかります。
私のすべての労働者は同じ2つのことをします:
Freemarkerテンプレートエンジンを使用して、C++ソースファイルとヘッダーファイルのペアを生成します。
公開プロセスメカニズムを介してにメッセージを送信し、
EDT
状況がどのように進んでいるかをユーザーに通知します。
SwingWorker
を慎重にコーディングしたと思います。FileWriterインスタンスが期待どおりに閉じられないことを特に心配していましたが、ThreadPoolExecutor
以前に作成したスレッドを再利用していない理由がわかりません。
魔法はで起こりConnectorGenerator
ます。BaseWorker
拡張し、SwingWorker<V,T>
ユーザーにメッセージを表示するためにコンポーネントと通信する動作を保持します。
そして、Transition.build(String)
醜い地獄のtry-catch-finallyブロックを含むメソッド:
誰かが私がおそらく見逃しているものを見たり知ったりしていますか?
java - Java GUI スレッド - SwingWorker
SwingWorker と Java GUI について質問があります。
Foo1
情報を処理するいくつかのクラスがあり、それらを 、Foo2
、および と呼ぶことができますFoo3
。この処理には非常に長い時間がかかる場合があります。
これらはすべて のサブクラスですがFoo
、Foo
それ自体は直接呼び出されません (Foo[x]
クラスは から継承されたメソッドを使用しますFoo
。EDT がプログレス バーを自由にペイントできるようにするために、オブジェクト階層を維持するときに使用する最善の方法は何SwingWorker
ですか?などのラッパークラスがFoo1Worker extends SwingWorker
あり、そのdoInBackground()
呼び出しがありますFoo1.myProcessMethod()
か?Foo1
拡張されていませんがSwingWorker
、これは期待どおりに機能しますか?
Foo[x]
編集: 私の質問を明確にするために、既にサブクラスであっても SwingWorkersを作成するにはどうすればよいですか?
java - SwingUtilities.invokeLater()
Swing アプリケーションで SwingUtilities.invokeLater() の本質をどのように感じますか。コード例をいくつか挙げてください。
java - EDTを待機するJavaSwingWorkerスレッド
実行を続行する前にEDTがGUIを更新するのを待つ必要があるワーカースレッドがあります。私はpublishメソッドを使用して、EDTに何かを変更するように指示しました。どうすればその変更が行われるのをワーカーに待たせることができますか?
java - SwingWorkerを複数回開始および停止する方法はありますか?
開始ボタンと停止ボタンがあります。SwingWorkerを使用する必要があると言われました。私が今持っているコードはうまく機能します。私はそれを開始し、それを停止します。しかし、もう一度やり直したい場合はどうすればよいですか。doinBackgroundメソッドは1回だけ実行されることを読んでいます。もう一度発射する方法はありますか..??
現在、Swing Workerの新しいインスタンスを作成できません。これは、Swing Workerにwhile(isSet)というwhileループがあり、スタートボタンをクリックするとTrueに設定され、停止をクリックするとFalseに設定されるためです。ボタン。
これを回避する方法はありますか..??
ありがとう