• ベストアンサー

SwingWorkerに関して

このサイトにあるSwingWorkerについて、 このSwingWorkerクラスは、GUIを相対的に描画するためのスレッドという ことなのでしょうか?そうだとしたら、イベントディスパッチ用のスレッド と動作がダブりませんか? 以下のサイトでは説明が詳しくなくプログラムを見ただけでは、以上のよう に考えてしまうのですが、上記のようなプログラムと考えていいのでしょうか? http://terai.xrea.jp/Swing/SwingWorker.html

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

http://terai.xrea.jp/Swing/SwingWorker.html このサイトのデモですが、 たいして参考にならないので、無視したほうがいいかも。 ・古い(、あまり便利ではない)SwingWorkerを使っているし ・「スレッドセーフかどうか」の観点が抜け落ちているし ・何の説明もされてないし。 --- >このSwingWorkerクラスは、GUIを相対的に描画するためのスレッドという >ことなのでしょうか ここ http://download.java.net/jdk/jdk-api-localizations/jdk-api-ja/builds/latest/html/ja/api/javax/swing/SwingWorker.html の冒頭部に、 かなりわかりやすく書いてありますね。 (※ただしjava1.6のSwingWorker)

marucha
質問者

お礼

ありがとうございます。 SwingWorkerの意味が分かりました。 使用環境が、ver.1.4.xなので、使うことはできませんが、意味を理解できてよかったです。

関連するQ&A

  • SwingとEDT(イベントディスパッチスレッド)

    多くのサイトを見て、色々考えているのですが、イマイチ理解が及びません。以下のような風に思っていていいのでしょうか。 ・Swingではメインとなるmainスレッド(表現は正しくないかもしれない)と、描画関係のイベントを実行するイベントディスパッチスレッドで出来てる。 ・描画関係のイベント(正確にはコンポーネントの可視化及び可視化したコンポーネントの描画)はイベントディスパッチスレッド上で実行しなければならない。 ・SwingUtilities.invokeLaterを使うことによってその中身のプログラムをイベントディスパッチスレッドで実行してくれる...? →setVisible(true)やsetText("")など全てSwingUtilities.invokeLaterを使って記述しなければならない.....???(面倒すぎじゃないでしょうか) ・Swingでのマルチスレッドを行うにはSwingWorkerを使う(ことは見つけているのですが、まずEDTについて理解しないと先に進めないと思い、まだあまりこれの内容は調べていません) ・描画系の命令を実行しないのならば、別スレッドを作成して使用しても良い....? こんなところでしょうか。 しかし、このとおりだとすると今までの自分の書いてきたプログラムは間違いだらけ(特に「全ての描画系命令をSwingUtilities.invokeLaterを使いEDTで実行する」点)になってしまいます。 ちゃんとした理解をしておきたいので、わかりやすい説明でも、上記の間違っている点でもご教示願います。

  • invokeLaterの逆に

    私は、SwingUtilities.invokeLater(Runnnable doRun)では、イベントディスパッチ・スレッド以外からの描画を伴うリクエストを、AWT-EventDispatchThreadの実行と同期して実行させるための機構だと理解しています。これは描画を伴う処理を描画のタイミングに集約して効率化する機能です。 では、逆にイベントディスパッチ・スレッドの過程で実行していながらも、描画の変化と直接関係ない処理を、イベントディスパッチ・スレッドの描画サイクルの終了後に後回しで行う方法はないのでしょうか?

  • やさしいJavaを読み終えて

    Java初心者です、 やっと"やさしいJava"を読み終えたのですが 次に読む本として何が相応しいのか分かりません。 自分としてはSwingなどでアプリや簡易ゲームなど作成したいです、 ですが未だクラスライブラリの使い方が良く分からないです。 継承やスレッドなど基礎中の基礎は覚えたのですが、 クラスライブラリの扱い方がちゃんと理解出来てないので ウィンドウ等を使ったGUIプログラムが作成出来ません。 何方かクラスライブラリの扱い方などが書いて有る書籍、 やさしいJavaの次に読む書籍など有りましたら教えて頂けませんか? もちろん書籍に限らずWebサイトでもOkです、 ご回答お待ちしております。

    • ベストアンサー
    • Java
  • リスナについて

    Java を勉強している者です GUIライブラリである awt,swing のリスナについての質問です awt,swing では リスナというイベント処理用のクラスと処理内容を用意して その部品に、イベント用のリスナを登録することによって、コールバックする仕組みになっていると思います。 リスナとイベントの対応ですが、マウスリスナやキーリスナ、ボタンを押したときに対応するアクションリスナ などがありますが、多用する再描画に関しての paintListener がありません 再描画に対応する場合、常に部品を継承して、paintcomponent をオーバーライドして記述しなければなりません 再描画も重要なイベントだと思うのですがなぜリスナが用意されてないのか。 JFrame j = new JFrame(); j.addPaintListener( new PaintAdapter { void onPaint() { ... } } のように描画処理を後付できないかという質問です。 できるようならサンプルのコードを教えてください。 またpaintリスナが用意されない理由があればこれも教えていただけると幸いです。

    • ベストアンサー
    • Java
  • SwingのpaintComponent()メソッドについて

     JAVA初心者です、宜しくお願いします。  参考書で、Swingについて以下のようなコメントを見つけました、ただ何故そうなのかの理由を書いていません。  以下の内容はどのような理由からそうなるのでしょうか。  「Swing コンポーネントでは、メソッドpaintは推奨されていません。  paintComponentをプログラムから呼び出してはいけません。描画をしたい場合は、 paintComponent をオーバー ライドしたクラスの repaint() メソッドを呼び出します。  Swing コンポーネント上に描画するには、 描画したいコンポーネントのクラスを継承したクラスで、 メソッド paintComponent(Graphics g) をオーバーライドし、 パラメータで渡された g に対して Graphics クラスのメソッドで描画をします。  オーバーライドした paintComponent の先頭で、このコンポーネントの土台を描画するために、 super.paintComponent(g) を呼び出しておきます。」  宜しくお願いします。

    • ベストアンサー
    • Java
  • SWTのイベント発生

    (質問) SWINGではなくSWTで自作のEVENT発生のプログラムを作りたい場合どのように記述すればよいのでしょうか。SWTでEVENTなどを継承しようとするとエラーになります。 SWTはSWINGに比べてサイトも少なく参考になりそうなところが探し出せませんでした。ご存知の方がおられましたら 教えていただけないでしょうか。 やりたいことはあるクラスからリスナーを登録してイベントの発生を知ることが出来ればいいのですが。

  • Java 15パズルを作ったのですが・・・

    こんにちは。 趣味でプログラミングをしているものです。 さっそくですが質問させていただきます。 Javaで15パズルを、eclipseをしろうとなりに使って 作ってみたのですが、 以下のURLにソースコードの全文を 載せてありますので、 (判定、完成させたときの何らかのイベントは  まだできたいない途中のものですが・・・) http://www.eonet.ne.jp/~mycabinet よろしければ、500*500のピース用、背景用の jpg画像を用意していただき、 imageという名前のフォルダに格納して 実行して動作を試していただきたいのですが・・・ その上で、いくつか質問させていただきたいのです。 (1) JPanelを継承したクラスにswing のTimerクラスを 持たせ、ピースの移動をアニメーションのように 描画させようとしたのですが、 動くことは動くのですが、 簡単に言えばダブルバッファリングが必要なように 描画されてしまいます。 (2) BlankPieceクラスの描画は スーパークラスの抽象メソッドを オーバーライドして何もしないように すれば、背景の画像が描画される、 と思ったのですが、 グレーの通常のパネルのようなものが 描画されてしまいます。 以上の点をどのように修正すれば よいのでしょうか? また、修正できたとして、 それをアプレットにするには、 どのようにすればよいのでしょうか? ご存知の方よろしければ、教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • SWINGでアプレット使えますか?

    GUIの作成において、SWINGはAWTよりも「OSに依存しない」「動作が軽い」など多くのメリットがあることを知り、SWINGにとても興味があります。 そこで質問ですが、アプレットの作成において、私が読んだ解説サイトの全てが「java.awt.*」をインポートしていました。 もしかして、SWINGではアプレット開発ってできないのでしょうか? 最近JAVAをはじめたので、質問に少々おかしな点があるかもしれませんが、どうか目にみてやって下さいm(_ _)m

  • Java言語(の文法!?)に関して

    以下設問のうち、解答できるもの全てに解答してください。 1.Java言語とC言語の性質で「同じ」であると思われるものを挙げられるだけ挙げ  てください。 2.クラスの考え方は、プログラム作成にどのように役立ちますか? 3.クラスとオブジェクト・インスタンスの関係を説明してください。 4.イベント駆動型プログラムは、mainからの関数呼び出しで全てが実行されるプ  ログラムとどう違いますか?また、それはどう役立ちますか? 5.GUIのプログラムを考えた時、ウィンドウ中に表示されているボタンへのマウス  ・クリック操作が、どのようにJavaプログラムの処理実行に反映されるか説明  してください。 1問でもよいので、よろしくお願いします。

    • ベストアンサー
    • Java
  • イベントとスレッド

    Java初心者です。 イベントとスレッドに関する質問です。 Swingを使ったアプリケーションを作成しているのですが、 以下のような現象が起きています。 1. ボタンが配置されているダイアログ(A)で、そのボタンを押下する。 2. ボタンを押下したときに実行されるメソッドで、スレッドを作成する。 3. その作成されたスレッドで、JOptionPane#showOptionDialogを実行して、ダイアログ(B)を表示する。 4.(B)が表示されている状態で、別のウィンドウで隠し、再度表示させると、(B)に配置されているボタンが押せなくなる。 4.で(B)のボタンを押せるようにしたいのですが、 うまくいきません。 スレッドとかイベントが関係していると思うのですが、 何しろ初心者なもので、よく理解していません。 実際のプログラムをお見せすることが出来ないので分かりずらいかもしれませんが、何かお気づきのことがあれば 教えて頂けないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • Java

専門家に質問してみよう