09/03/04 20:24:28
ネタ・・・じゃ・・・ないの・・・・か?
382:デフォルトの名無しさん
09/03/05 02:06:57
Swingに印刷プレビューダイアログってありますか?
383:デフォルトの名無しさん
09/03/05 09:36:17
作れば良いんじゃないの
384:sage
09/03/06 00:33:36
以下のバグが1.4でも6.0でも再現するんだけど、JTextField#setTextはスレッドセーフじゃないの?
それとも検証方法自体が間違ってるの?
URLリンク(bugs.sun.com)
385:デフォルトの名無しさん
09/03/06 00:42:39
swing自体スレッドセーフじゃなかったと思う
386:デフォルトの名無しさん
09/03/06 00:44:55
1.4.2で直ってないって書いてあるし、放置されてるんじゃね?
387:デフォルトの名無しさん
09/03/06 00:46:00
この再現コードみたいなことをすること自体基本的にないからなぁ
388:デフォルトの名無しさん
09/03/06 00:50:16
>>385
↓スレッドセーフだと書いてあるんだが・・・
URLリンク(sdc.sun.co.jp)(java.lang.String)
389:デフォルトの名無しさん
09/03/06 01:13:56
ざっとソースをみたところ、スレッドセーフじゃないね。
テキストのモデルであるDocumentへの書き込みがアトミックであったとしても、
UIスレッドを用いてコンポーネントから何らかの値をとってくるメソッドで
Documentのインスタンスを2回以上使うような操作をする全てのメソッドは
その間はDocumentへの書き込みを排他していないといけないはずなのだが、
少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。
390:389
09/03/06 01:15:33
ソースは Java 6 しかみてない。すまん
391:デフォルトの名無しさん
09/03/06 01:18:31
setTextする処理をEDTに投げればいいんじゃないの?的外れだったらごめん。
392:デフォルトの名無しさん
09/03/06 01:43:30
>>389
>.少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。
setTextの話だったんだけど、typo?
393:デフォルトの名無しさん
09/03/06 01:53:44
>>392
getTextが変な値を返す原因がsetTextをUIスレッド以外でアクセスしたことにあるなら、
setTextはスレッドセーフだといえる?
394:デフォルトの名無しさん
09/03/06 07:33:43
>>393
setTextの時点で変な値にならないのであれば、setTextはスレッドセーフじゃないの?
(よくわかってないかもしれん・・・)
そもそも>>384の再現コードは、getTextした値が""や"12"や"21"になることがあり、
以下のように思ってるんだが、違うかな?
""は、setTextが値を一度クリアしたタイミングで、getTextしているから。(getTextがスレッドセーフではないから)
"12"や"21"はsetTextがロックする前にAbstractDocument#getLengthを呼び出していることが原因。
(setTextもスレッドセーフではない?)
395:デフォルトの名無しさん
09/03/06 13:04:40
JavaDoc を見る限り getText() はスレッドセーフじゃないんだな…知らなかった…
別スレッドからsetText()して結果的に画面に"12"や"21"や""が描画される
ことがないのであれば setText() はスレッドセーフといえる…のかな?
でも現状は >>394 のいうようにsetText()もスレッドセーフじゃないように見えるなぁ
396:デフォルトの名無しさん
09/03/06 17:43:09
setText()のスレッドセーフを確認するのに、スレッドセーフではないgetText()が絡んでくるとややこしくなるので
setText()するたびに文字列を溜めておいて、最後に検証するというのはどうだろう。
397:デフォルトの名無しさん
09/03/06 19:28:23
AbstractDocument.readLockを使えば、少しはましになるけど、ダメだった。
たまに、"12"と"21"が出てくる。
398:デフォルトの名無しさん
09/03/06 22:27:20
swingコンポーネントをディープコピーしようとしたら、
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: java.io.NotSerializableException: com.sun.java.swing.plaf.windows.XPStyle$Skin
っていわれるんだけど、どうすりゃいいの?
399:デフォルトの名無しさん
09/03/08 00:12:39
Beans Bindingはもう見捨てられたのかと思ってたけど、先月スペックリードが変わってるね。
これは期待してもいいんだろうか。
400:デフォルトの名無しさん
09/03/08 01:08:00
スペックリードとは仕様定めるリーダーみたいなものでしょうか?
401:デフォルトの名無しさん
09/03/10 10:41:55
複数のクラスで共用するダイアログなどで、わざわざそれぞれのフィールドとして持たせたくない場合は、UIUtilitiesなどを作ってそこでshow***といった感じで定義しても問題ないでしょうか