問題タブ [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
すべてのサブクラスに a (およびSwingWorker
の抽象doInBackground()
and )を強制的に実装する抽象クラスを Java で作成したいと考えていますdone()
。
AbstractClass で -
これにより、拡張クラスが実装していない場合にコンパイラが例外をスローすることが予想されますが、そうではありません。
また、この抽象クラスをオーバーライドしていることをどのように示すかについてもよくわかりません。次のように ConcreteClass で再宣言しますか?
または他の方法ですか?
ご助力いただきありがとうございます!
java - Swing: JTree の更新に時間がかかりすぎて、他の GUI 要素がフリーズした場合はどうすればよいですか?
SwingUtilities.invokeAndWait
Java Swing の GUI コードは、または内に配置する必要があることを知っています
SwingUtilities.invokeLater
。このように、スレッド化は正常に機能します。
悲しいことに、私の状況では、GUI はバックグラウンド スレッドよりもはるかに時間がかかるものを更新します。より具体的には、約 400 エントリで JTree を更新します。ネストの深さは最大 4 です。ただし、1秒かかる場合もあります。ユーザーが遅延なく JTextPane に入力できるようにする必要があります。JTree の更新が遅いと、入力中に JTextPane の遅延が発生します。ツリーが更新されるとすぐに更新されます。
私は Netbeans を使用しており、経験的に、Java アプリは残りの UI をフリーズすることなく多くの情報を更新できることを知っています。
どうすればそれができますか?
注 1: これらDefaultMutableTreeNode
はすべて の外部で準備されinvokeAndWait
ます。
注2:ツリーに置き換えinvokeAndWait
てinvokeLater
も更新されません。
注 3: 再帰的なツリー展開に最も時間がかかることに注意してください。
注 4: カスタム ツリー セル レンダラーを使用しています。使用せずに試して報告します。
注 4a: 私のツリー セル レンダラーはマップを使用して、作成された をキャッシュし、JTextComponent
ツリー ノードに応じて (キーとして) 再利用します。
手がかり 1 : うわー! カスタム セル レンダラーを設定しないと、 10 倍速くなります。カスタム ツリー セル レンダラーを作成するための適切なチュートリアルはほとんど必要ないと思います。残念ながら、カスタム セル レンダラーが必要です。
java - Java Swingworker:カプセル化されたクラスほどではありません
カプセル化されたクラスではないSwingWorkerクラスで、情報の受け渡し、進行状況の更新、および「完了」の表示に問題があります。
ハードドライブ上のファイルとディレクトリを処理する単純なクラスがあります。ユーザーが[スタート]ボタンをクリックすると、SwingWorkerのインスタンスが起動します。
プログレスバーを更新するために、SwingWorkerからのイベントドリブンスレッドのJTextAreaで処理されるファイルの名前を印刷したいと思います。Web上のすべての例はネストされたクラス用であり、ネストされたクラスは外部クラス(done
メソッドなど)の変数にアクセスします。また、EDTが[スタート]ボタンの有効化(およびフィールドのクリア)などのアクションを実行できるように、SwingWorkerが終了したことをイベントドリブンスレッドに通知したいと思います。
私の質問は次のとおり です。1。SwingWorkerクラスは、イベントドリブンスレッドのJTextAreaにテキストをどのように配置し、プログレスバーを更新しますか?
- EDTは、{ external } SwingWorkerスレッドがいつ終了したかをどのように判断しますか?
{多くのコード(および処理)が実行されるため、SwingWorkerをネストされたクラスとして使用したくありません。}
java - Swingworkerが重複した出力/出力を順不同で生成していますか?
SwingWorkerを使用するときに配信を保証する適切な方法は何ですか?InputStreamからJTextAreaにデータをルーティングしようとしていますが、このexecute
メソッドを使用してSwingWorkerを実行しています。私はここの例に従っていると思いますが、結果が乱れ、重複し、一般的に意味がありません。
これが私の機能していないSwingWorkerです:
java - Java - SwingWorker - process() メソッドの問題
javax.swing.SwingWorker
初めて使用しています。
JLabel
次のように、swing ワーカーによって公開された中間結果からa を更新したいと思います。
を更新するためJLabel
に、次のようにコーディングしました。
上記のコードは機能しますが、私の問題 (より具体的には、私の疑問) は次のとおりです。
上記の Swing ワーカー タスクは匿名の内部クラスであるため、label
フィールドにアクセスできます。
しかし、swing ワーカー クラスを非インナー クラスにしたい場合はどうすればよいでしょうか。label
process() メソッドがアクセスできるように、swing ワーカー クラスのコンストラクターに引数として渡す必要がありますか。
または他の方法はありますか?
Swing ワーカー クラスが内部クラスでない場合、Swing ワーカー クラスの結果から UI コンポーネントを更新するために、他の開発者はどのようなアプローチに従いますか?
java - デフォルトの Java SwingWorker スレッド プールを管理するには?
私は 2 つの長時間実行される SwingWorker タスクを使用するアプリケーションを持っています。そのうちの 1 つだけを開始する、更新された JVM を備えた 2 台の Windows コンピューターに遭遇しました。エラーは表示されていないため、デフォルトのスレッド プールにはスレッドが 1 つしかないため、実行しようとすると 2 番目の SwingWorker オブジェクトがキューに入れられると想定する必要があります。
では、(1) デフォルトの SwingWorker スレッド プールで使用可能なスレッド数を確認するにはどうすればよいでしょうか? (2) スレッドがさらに必要になった場合にスレッドを追加するにはどうすればよいでしょうか?
他に知っておくべきことはありますか?この明らかなシングル スレッド スレッド プールの状況は、私の予想に反します。
ThreadPoolExecutor を設定していますが、これは間違っているようです...
java - SwingWorker を使用してリストを返す方法
を使用してファイルから画像をロードする画像ギャラリーを作成する必要がある課題がありSwingWorker
ます。画像がロードされると、画像を反転してスライドショーを再生できます。を使用してロードされたイメージのリストを取得するのに問題がありますSwingWorker
。
これは、結果を TextArea にパブリッシュするバックグラウンドで発生することです。
}
}
完了したら、画像を a に挿入するだけList<Image>
です。
@Override protected void done() { 試行 {
}
また、取得する必要があるのはリストからlist
呼び出されたものを返すメソッドを作成しましたが、たとえば呼び出したときに機能しませんgetImages()
getImages()
execute()
に到達するimageList
と、何も返されません リストを取得できた唯一の方法は、リストを取得する別の方法がありますか、それともメソッドが唯一の方法ですか?のrun()
代わりに を使用したときでした。または、おそらくクラスを理解していません。execute()
run()
Swing Worker
java - Java - SwingWorker - problem
I am developing a Java Desktop Application. This app executes the same task public class MyTask implements Callable<MyObject> {
in multiple thread simultaneously.
Now, when a user clicks on a "start" button, I have created a SwingWorker myWorker
and have executed it.
Now, this myWorker
creates multiple instances of MyTask
and submits them to an ExecutorService
.
Each MyTask
instance has a loop and generates an intermediate result at every iteration. Now, I want to collect these intermediate results from each MyTask
instances as soon as they are generated. Then after collecting these intermediate results from every MyTask
instance, I want to publish it through SwingWorker.publish(MyObject)
so that the progress is shown on the EDT.
Q1. How can I implement this? Should I make MyTask
subclass of SwingWorker
instead of Callable
to get intermediate results also, because I think that Callable
only returns final result.
Q2. If the answer of Q1. is yes, then can you give me a small example to show how can I get those intermediate results and aggregate them and then publish them from main SwingWorker
?
Q3. If I can't use SwingWorker
in this situation, then how can I implement this?
java - Java - SwingWorker - EDT の代わりに、他の SwingWorker から 1 つの SwingWorker を呼び出すことはできますか
私は次のように持ってSwingWorker
います:
Swing Worker
上記を EDT から呼び出しました。
これでmainWorker
、クラスの 10 個のインスタンスが作成MyTask
され、各インスタンスが独自のスレッドで実行されるようになり、作業がより速く完了します。
しかし問題は、タスクの実行中に時々 GUI を更新したいということです。タスクがmainWorker
それ自体で実行された場合、publish()
およびprocess()
メソッドを使用して GUI を更新できたことはわかっています。
しかし、タスクはスレッドとは異なるスレッドによって実行されるため、タスクを実行するスレッドSwingworker
によって生成された中間結果から gui を更新するにはどうすればよいですか。
java - Java - SwingWorker と SwingUtilities.invokeLater() の違い
SwingWorker
次の目的で使用されます。
- GUI が応答しなくなるのを防ぐために、別のスレッドで実行時間の長いタスクを実行するため
- メソッドを介してタスクの最後に長時間実行タスクによって生成された結果で GUI を更新します
done()
。 publish()
およびメソッドを使用して、タスクによって生成および公開された中間結果を使用して、GUI を随時更新しprocess()
ます。
SwingUtilities.invokeLater()
上記のタスクを次のように実行できます。
SwingWorker.execute()
EDT からメソッドを実行する代わりに、ExecutorService.submit(new MyRunnable())
長時間実行されるタスクを実行できる別のスレッドも作成されるため、実行できます。- タスクの最後に GUI を更新するために、コード (
done()
case1 のメソッドで記述)をタスクの最後に置くことができSwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode())
ます。 - タスクの途中で GUI を更新するには、 case1 のメソッドを呼び出した場所にコード (
process()
case1 のメソッドに記述)を配置します。SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode())
publish()
質問Java - SwingWorker - EDTの代わりに他のSwingWorkerから1つのSwingWorkerを呼び出すことができますかで指定された問題は解決できますが、解決SwingUtilities.invokeLater()
できないため、この質問をしていますSwingWorker