
こんにちは。
JBuilderでappletを作成しています。
wait()とnotify()をプログラム中で利用したところ,
次のようなメッセージが出ました。
Exception occurred during event dispatching:
java.lang.IllegalMonitorStateException: current thread not owner
具体的にどのようなことを意味しているのかわかりません。
どなたか教えて下さい。お願いします。
No.1ベストアンサー
- 回答日時:
> Exception occurred during event dispatching
→イベントを送信中に例外が発生した
> current thread not owner
→現在のスレッドは(オブジェクトのモニタの)オーナーではない
(つまり、モニタを所有していない)
文字通り、現在のスレッドがオブジェクトのモニタを所有していないことが例外の原因です。
オブジェクトのモニタを所有するというのは、synchronized ステートメントを使ってオブジェクトを排他的に処理できるようにするということです。
synchronized ステートメントを使って wait() や notify() を使いたいオブジェクトをロックして(モニタの所有権を獲得して)、その中で wait() や notify() を使ってください。
例)
try {
synchronized (object) {
object.wait();
}
} catch (InterruptedException e) {
}
この回答への補足
wait()は,paint()の中のif文で使用しています。
描画させる為の値を渡さない時に,描画をさせないように,したいのです。
だめもとで,
・描画領域であるCanvas
・this
をobjとしてコードを組んでみました。
・synchronized void paint(){}
という様に実行してみました。
が,appletが動作しなくなったり等の結果になりました。
何がまずいのでしょうか?
大変わかりやすい回答なのですが,もう少しお願いします。
No.2
- 回答日時:
>が,appletが動作しなくなったり等の結果に
おそらく、
wait()を呼ぶことにより(アプレットのイベント処理全般を担当している)イベント処理スレッド(event-dispatching thread)が停止したので、
アプレットがウンともスンとも言わなくなった。
(ボタンを押そうがウインドウのクローズボタンを押そうが反応しない)
>描画させる為の値を渡さない時に,描画をさせないように,したい
「描画一時停止」だけのために「wait()/notify()」を使うのは、なんか不自然。
ふつうは使わないと思う。
(※本に載ってるサンプルなどをみても、そういう使いかたではないはず)
「wait()/notify()」は使いかたも難しいので、
「使う必要がないのなら使わない」ほうがいいと思う。
単に「描画一時停止」させたいのなら、代替案を考えよう。
/**代替案1*/
public void paint(Graphics g) {
/*「ある条件」が成立したときのみ描画処理を行う*/
if (/*ある条件*/) {
…
…
…
} else {
//なにもしない
}
}
/**代替案2*/
public void actionPerformed(ActionEvent e) {
/*「ある条件」が成立したときのみrepaint()を呼ぶ*/
if (/*ある条件*/) {
canvas.repaint();
} else {
//なにもしない
}
}
やはり「wait()」を使うのは,適していなかったのですね。
第1案をもとに,flag(flagは,あまり気が進まないのですが…)
を使用してプログラムを作成しました。
勉強不足が身に染みます…。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
- 1 エラー「Fatal exception occurred」について
- 2 「event.clientX」 と 「event.screenX」の違い
- 3 jspでの一般的なException機能
- 4 Exceptionクラスの継承について
- 5 ExceptionのStackTraceをStringに格納したい(JDK1.3)
- 6 Exception in thread "main" java.…でも。
- 7 eclipseで「Fatal exception occurrd. 」
- 8 例外処理(throws Exception)について
- 9 Event.observe について教えてください。
- 10 javascriptでよく見かける構文で、object.addEventListener(event
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
Labelコントロールの背景をグラ...
-
5
Java ブロック崩し 当たり判定
-
6
JSliderでgetValue()を使用する
-
7
アプレットで再描画をする時ち...
-
8
アプレットで描画したグラフを...
-
9
Javaでパラパラアニメを作成す...
-
10
getGraphics()の意味を教えて...
-
11
Java3Dにおける再描画
-
12
JAVAでの背景画像表示
-
13
JSPでの画像ファイル表示
-
14
VBSの「MsgBox」について
-
15
フレーム上のコンポーネントの...
-
16
javaで次のような図の絵を描く...
-
17
画像リストを作りたい
-
18
Java 九九の表について
-
19
半透明の画像
-
20
IP Address 入力フォームについて
おすすめ情報