問題タブ [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が期待どおりに機能しない
私はSwingWorkerexecute()とdoInBackground()の違いを見つけようとしています。そこで、違いをテストするためにこの簡単なプログラムを作成しました。
このプログラムを実行すると、次の例外が発生しました。
しかし、doInBackground()を使おうとすると
プログラムは動作し、期待される結果を出力します。だから私のエラーは何ですか?使用すべきではないことを読んだので、doInBackground()メソッドを使用する必要があります。
ありがとう
java - 同じUIから複数のswingworkerを起動するJava
UIとセットアップの簡単な説明
1)ボタン1とボタン2、テキストエリア1とテキストエリア2のプレーンバニラフレーム
2)Button1はswingworker myswingworker1を使用して継続実行タスクを起動し、swingworkerのプロセスメソッドはtextarea1を継続的に更新します
3)Button2はswingworker myswingworker2を使用して連続実行タスクを起動し、swingworkerのプロセスメソッドはtextarea2を継続的に更新します
この場合、継続的に実行されるタスクは「adb logcat」です。このコマンドは、継続的なログ情報をアウトストリームに書き込み続け、それをキャプチャしてテキストエリアに出力します。このキャプチャと印刷は、swingworker内で行われます。
問題
button1またはbutton2のどちらか最初に開始されたボタンのいずれかで、一度に1つのボタンだけが出力をテキストエリアに印刷するという意図されたタスクを実行しているようです。ただし、UIがフリーズすることはありません。
実験の一環として、1つの長時間実行タスクを、実行してすぐに戻るコマンド「dir」に置き換えました。つまり、button2に「dir」をアタッチしました。これで、 button2を実行すると機能し、次にbutton1も機能します。逆にすると、 button1によって開始された長時間実行タスクのみが実行され、 button2によって開始されたタスクは、長時間実行タスクが終了するのを待っているように見えます。これは、swingworkerを使用する目的全体を無効にします。
この問題をどのように解決しますか?UIが1人のSwingWorkerの終了を待たないようにするにはどうすればよいですか?
コードの抜粋
public class multiswing extends javax.swing.JFrame {
public class myswingworker1 extends SwingWorker {
}
public class myswingworker2 extends SwingWorker {
}
java - Java5SwingWorkerの置き換え
私たちのSwingアプリケーションは、優れたSwingWorkerクラスを使用して、バックグラウンドスレッドでいくつかの長時間実行タスクを実行します。ただし、古いMacの多くはJava 5しかサポートしていないため、アプリケーションを6ではなく5としてコンパイルしたいと考えています。SwingWorkerはJava 6で導入されたため、使用できなくなりました。
バックグラウンドで何かを実行し、完了したらGUIでそれを伝達するだけでよい場合、以下は許容できる代替品でしょうか?それとも私は何か重要なことを忘れていますか?
java - DefaultHttpClient と Swingworker による Cookie の永続化
DefaultHttpClient を使用して安全な Web サイトへの永続的な接続を確立するメソッドを呼び出す swingworker クラスがあります。ログインして、swingworker のインスタンスを使用してサイトにリクエストを送信すると、swingworker のインスタンスが閉じます (通常どおり)。私の質問は、サイトへの永続的なログインを維持して、swingworker の別のインスタンスで将来のリクエストを行うことができるようにするにはどうすればよいですか?サイトに再度ログインする必要はありません (セッションを作成しました)。DefaultHttpClient のインスタンスを swingworker クラスに渡すことができません (少なくとも方法はわかりません)。Cookie データをファイルに保存し、それを DefaultHttpClient に渡すことを検討しましたが、もっと基本的なものが欠けていますか?
ありがとう、ロブ
java - 「Single LIFO Executor」 / SwingWorker
JList または JTable を使用する Swing アプリケーションを考えてみましょう。選択が変更されると、SwingWorker が開始され、データベースから関連データがロードされ、UI が更新されます。これは正常に機能し、UI はレスポンシブです。
しかし、ユーザーが選択した行をすばやく変更している場合 (キーアップ/ダウンを押したまま)、最後に選択した行が最後にロードされた行であることを確認したいと思います。また、無駄に DB にクエリを実行したくありません。したがって、サイズが 1 の LIFO キューを持つシングル スレッドのエグゼキュータが必要です。そのため、タスクをサブミットすると、以前にサブミットされたタスクが削除され、一度に最大 1 つのタスクが実行され、最大 1 つのタスクが実行待ちになります。
java.util.concurrent でこのようなものを見つけることができなかったので、独自の Executor を作成しました。私はそれを正しかったのですか、それとも並行パッケージから何かが欠けていますか? 解決策は受け入れられますか、それとも私が望むものを達成するためのより良い方法はありますか?
そして、これがどのように使用できるかを示す例です:
java - SwingWorker の doInBackground() メソッドを待つにはどうすればよいですか?
次のコードがあるとします。
「完了」を出力する前に完了するまで待つ必要がありますがt.doTask()
、正確な方法がわかりません。おそらくここで使用する必要があることはわかっていますが、それを呼び出すスレッドが必要であり、呼び出す必要がある場所から のスレッドjoin()
を取得する方法がわかりません。助けてくれてありがとう。doInBackground()
join()
編集:回答ありがとうございます。残念ながら、get()
などは問題を完全には解決しません。私の実際のコードでは、SwingWorker にはprocess()
、バックグラウンド スレッドの実行中に GUI ウィンドウを更新するオーバーライドされた関数もあります。 get()
'done' が後まで出力されないようdoInBackground
にしますが、GUI は更新されません。これを反映するようにサンプル コードを更新しましたが、もちろんコンパイルされません。
一度だけ印刷するように「完了」する方法はありdoInBackground
ますか? GUI 更新コードと 'done' ステートメントは同じスレッドにありますか? 新しいスレッドを作成する必要がありますか?
java - Javaスイングでサイズ変更可能な長方形を作成するには?
私は同じ質問を繰り返しています.Javaスイングでサイズ変更可能な長方形を作成する必要があります.
これどうやってするの?
どんな助けでも大歓迎です。
java - javaswingのsetvisibleメソッドがシステムをハングアップします
現在取り組んでいるバンキングGUIアプリケーションがあり、jdialogのsetvisibleメソッドに問題があるようです。ユーザーが有効な金額を引き出した後、「トランザクションが進行中です」という簡単なダイアログが表示されます。私のdobackgroundメソッドでは、トランザクションが受信されたかどうかを確認するためにポーリングを続けます。私はswingworkerを使ってみましたが、なぜそれが機能しないのかわかりません。setvisible呼び出しを削除すると正常に機能しますが、なぜsetvisibleによってシステムがハングするのですか?これが私のjbuttonmouselistener内にあるコードです:
java - ClassメソッドからJlabeladdTextを繰り返し作成するにはどうすればよいですか?
私はswingwokerを試しましたが、更新されるのは1回だけです... http://piggyman007.blogspot.com/2010/04/java-swingworker-multithread.html
java - Swingworkerによって割り当てられたメモリを解放する方法は?
私のプログラムはいくつかのSwingworker
スレッドを使用しており、完了後に各スレッドのメモリを解放する必要があります。doInBackground()
私のスレッドがメソッドを完了することによって終了するか、によって停止されるかにかかわらず、cancel()
スレッド自体はそこにとどまります(Jconsoleに引き続き表示されます)。
インスタンスを逆参照しSwingworker
てガベージコレクションを強制しますが、Javaプロセスがメモリを解放することはありません(たとえば、Windowsタスクマネージャーで表示されるように)。
Swingworker
終了したスレッド を完全に削除するにはどうすればよいですか?
または、複雑な処理中に複数の場所に割り当てられたメモリをどのように解放できますか?
どんなアドバイスも大歓迎です。ありがとう。