- 1 名前:デフォルトの名無しさん [2008/11/21(金) 11:24:21 ]
- ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。 そんなSwingと引き続き付き合っていくみんなのスレッドです。 Java低速GUI Swing 7 pc11.2ch.net/test/read.cgi/tech/1204155623/ Java低速GUI Swing 6 pc11.2ch.net/test/read.cgi/tech/1190807478/ Java低速GUI Swing 5 pc11.2ch.net/test/read.cgi/tech/1161139809/ Java低速GUI Swing 4 pc8.2ch.net/test/read.cgi/tech/1140533866/ Java低速GUI Swing 3 pc8.2ch.net/test/read.cgi/tech/1121700954/ Java低速GUI Swing 2 pc8.2ch.net/test/read.cgi/tech/1095398949/ Java低速GUI Swing pc5.2ch.net/test/read.cgi/tech/1062271447/l50
- 313 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:27:34 ]
- ポップアップメニューのsetLightWeightPopupEnabledに相当するメソッドは
JMenuにはないでしょうか? ポップアップメニューにJMenu追加して分岐させたら、 分岐させたメニューが表示できませんでしたw setLightWeightPopupEnabled使わないとポップアップメニューを出せないような作りが悪いのかもしれませんが。 もしあったら教えてください。
- 314 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:41:38 ]
- >>313
JMenu#getPopupMenu() で取ってきたポップアップメニューに setLightWeightPopupEnabled
- 315 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 23:47:57 ]
- >>313
どう考えてもSwingの描画ぶっ壊してるから他の部分でも見えてないだけで問題があるかと。
- 316 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:01:10 ]
- >>315
はい、継承してコネコネしてるJLabelの上だとポップアップメニューがでないんです。 いつか直さないと。 >>314 ありがとうございます。 JMenuの中にpopupMenuがあって気になってましたが、それでいけそうな気がします。
- 317 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:35:27 ]
- >>314
めでたく上手くいきました。 ありがとうございました。
- 318 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 17:16:44 ]
- アプリケーション終了時に、ウィンドウの位置とサイズを記憶したいです。(次の起動時に復元するため)
この時、最大化した状態で終了すると、元に戻すボタンを押した時のサイズを取得できません。 この元の位置(できればサイズも)を最大化してる状態で取得する方法はないでしょうか? ※自分でやった事 ComponentAdapter#componentMovedを使って、 getExtendedState() == NORMALの時に位置を記憶させてみたものの、 最大化した時にgetExtendedStateがNORMALの状態で動いてしまい、 位置を-4,-4で記憶してしまいます。 マルチモニタでも動かしたいため、0以下の値を弾くわけに行かなくて困っています。 componentResizedが動く時はgetExtendedState() == MAXIMIZED_BOTHになっているため、 サイズはなんとか記憶させることができました。
- 319 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 18:12:18 ]
- EDTの簡単な取得方法はありませんでしょうか?
- 320 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 20:23:34 ]
- 6u12でAWTとSwingの限定的な混在がサポートされたな。
- 321 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:02:12 ]
- >>319
EDTを取得して何すんの? ↓でできるけど import javax.swing.SwingUtilities; public class GetEDT { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { //↓こいつがEDT Thread edt = Thread.currentThread(); System.out.println(edt); } }); } }
- 322 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:27:51 ]
- >>321
それは分かりますが、単純にEDTが走ってればそれを返して、動いてなければnullみたいなのがありそうだなーと思っただけです。 確かに用途は少ないですね。 Thread#setUncaughtExceptionHandler()をEDTに設定したかったのですが、すでに取得する方法があればそれを使用しようと質問しました。 わざわざくだらない質問に答えていただきありがとうございました。
- 323 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 23:04:02 ]
- >>322
ttp://java.sun.com/javase/ja/6/docs/ja/api/java/awt/EventQueue.html#isDispatchThread() ttp://java.sun.com/javase/ja/6/docs/ja/api/java/lang/Thread.html#currentThread()
- 324 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:58:11 ]
- >>312
OpenSwingはどうなん?
- 325 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 14:02:26 ]
- >>323
それAWTのシステムキューだろ。
- 326 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 18:23:34 ]
- JTextComponent でスペースバーが押されたらアクションを実行し、
その際空白文字は入力されないようにしたいのですが、 以下のようなやり方(いちおう動く)でよいのでしょうか? もっと一般的な方法はあるでしょうか? Keymap keymap = textComponent.getKeymap(); // スペースバーにアクションをマッピング KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0); keymap.addActionForKeyStroke(stroke, action); // スペースバーが押されても空白文字が入力されないようにする keymap.setDefaultAction(new DefaultEditorKit.DefaultKeyTypedAction() { @Override public void actionPerformed(ActionEvent ae) { String cmd = ae.getActionCommand(); if (!cmd.equals(" ")) { super.actionPerformed(ae); } } } );
- 327 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 20:08:46 ]
- >>326
コピペでスペースが入ってきてもやっぱり弾くのかな。 ならばjavax.swing.text.DocumentFilterで弾くのが楽じゃない?
- 328 名前:sage [2009/02/10(火) 21:13:11 ]
- >>326
Documentに、特定の文字列が挿入されるのを防ぐ場合には、通常DocumentFilterを使う。 Documentにスペースが挿入されても構わなくて、キーボードからの入力のみフィルタするなら、 KeyListenerを使ったり、processKeyEvent(),processKeyBinding()等をオーバーライドして 実装することもできるけど、いずれもコードが汚くなるから、326の処理でいいと思う。 あとは、瑣末な問題だけど、個人的には、ActionEvent#getActionCommand()の戻り値が nullでないとは規定されてないから、if (!cmd.equals(" ")) を!" ".equals(cmd)にするか、 if (cmd != null && !cmd.equals(" "))に変更するぐらいかな。
- 329 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 23:12:34 ]
- >>326
おれが作るならばDefaultKeyTypedActionの継承はしないで keymap.getDefaultAction()して保存おいてスペース以外ときは そっちに移譲するようなActionにするかもしれない。なんとなく。
- 330 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 23:25:06 ]
- >>325
ttp://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/SwingUtilities.html#isEventDispatchThread() > 現在のスレッドが AWT イベントディスパッチスレッドの場合に true を > 返します。JDK Version 1.3 以降、このメソッドは > java.awt.EventQueue.isDispatchThread() を呼び出すだけです。 なので、EDTの判定に用いるのは間違いじゃない。
- 331 名前:326 mailto:sage [2009/02/11(水) 00:24:39 ]
- >> 327
今回はキーが押された場合のみを処理したいので DocumentFilter は使えないのですが、 回答ありがとうございます。 >>328 >>329 を参考にして こんな感じにしてみました。 final Action defaultAction = keymap.getDefaultAction(); keymap.setDefaultAction(new AbstractAction() { @Override public void actionPerformed(ActionEvent ae) { String cmd = ae.getActionCommand(); if (!" ".equals(cmd)) { defaultAction.actionPerformed(ae); } } } ); UIによって独自のデフォルトアクションが セットされるかもしれない(?)ので、 >>329 の案のほうがよいかと。
- 332 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 00:30:05 ]
- まずEDTといってもシステムキューの方かSwingEDTの方なのかはっきりしてもらわんとなぁ。
単にEDTと言ったらjavaの場合SwingEDTの方を指す場合が多いからややこしい。
- 333 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 01:47:13 ]
- >>332
システムキューって何ぞ? 用語が一般的過ぎて、ぐぐってもそれらしきものが引っかからん。 説明資料へのリンク希望。 AWTイベントキューとは違うもんなんだよね?
- 334 名前:sage [2009/02/11(水) 10:31:21 ]
- >>331
Actionに委譲するのは良いんだけど、 >UIによって独自のデフォルトアクションがセットされるかもしれない ということを考慮するなら、委譲するActionの参照を保存してたらダメでしょ。 UI変更時に、上記のコード自体が再実行されるなら、アリだけど。
- 335 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 17:23:09 ]
- >>333
同じ、AWTのEDTの事をAWT event queues systemと表記する場合とSystem Queueと表記する場合がある。 今はどうなってるが知らんが。
- 336 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 19:36:49 ]
- >>335
んー、そうすると、昔は知らんが、今はシステムキュー==AWTのEDT==SwingのEDTなんじゃ? >>330に書いたように、Java1.3 以降は javax.swing.SwingUtilities.isEventDispatchThread() == java.awt.EventQueue.isDispatchThread() なんだし。
- 337 名前:326 mailto:sage [2009/02/11(水) 23:57:03 ]
- >>334
説明不足でしたが updateUI() をオーバーライドして super.updateUI() の後に処理を書いているので たぶん大丈夫だと思います。
- 338 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 21:59:44 ]
- こういうタイポとかでdeprecatedなメソッドはさすがに廃止してもいんじゃなかろうか。
java.sun.com/javase/ja/6/docs/ja/api/java/awt/FontMetrics.html#getMaxDecent()
- 339 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 22:48:12 ]
- 廃止したら、古いアプリケーションが動かなくなるからな。
ところで Cloneable はスペルミスなのに Closeable は間違いじゃないんだな。 ややこしい。
- 340 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 13:56:33 ]
- 互換用のjarを用意して、コンパイル時にはエラーにしてしまえばいいのに。
- 341 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 18:53:19 ]
- コンパイルエラーにする代わりに警告を出してるんでしょ。
問題ないと思うけど。
- 342 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 15:16:20 ]
- >>340
互換用のjar吐くフリーソフトとか作ったら需要あるかな。 メソッドシグネチャだけコピーして、どれを呼んでもErrorなげる実装とかいうやつ。
- 343 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 09:18:34 ]
- JDKのライセンス違反になるからダメ。
java.*、javax.*、sun.*以下のクラスは変えちゃいかんのよ。 勝手にクラス追加するのも禁止されてる。
- 344 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 17:34:57 ]
- JEditorPaneで単純にHTMLを表示する場合なんだけど、
<a href="#hoge">Hoge</a> . . . . . . <a name="hoge">ここにくる</a> とやって、ページ内でジャンプさせることってできないんだっけか?
- 345 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:54:43 ]
- >>344
クリック監視はHyperlinkListenerで。 そこからJEditorPane#scrollToReference("#hoge")でなんとかなんないかな。
- 346 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 19:42:27 ]
- >>345
ありがとう! これから試してみる。
- 347 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:07:18 ]
- >>345
ありがーと! うまくいった。 JEditorPane#scrollToReference("hoge") で、#はいらないようです。
- 348 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 22:28:04 ]
- うふっ
- 349 名前: mailto:sage [2009/02/26(木) 20:25:14 ]
- JLabelがクリックされたとき、JLabelではなく親のコンポーネントがクリックされたことにしたいのですが
どういしたらいいでしょうか。
- 350 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 20:39:23 ]
- >>349
あほらしい方法だけど public void mouseClicked(MouseEvent e) { JComponent c = (JComponent)e.getSource(); for(MouseListener l :c.getParent().getMouseListeners()){ l.mouseClicked(e); } }
- 351 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:34:16 ]
- 俺なら親のaddMouseListenerをオーバーライドしたいな
- 352 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:48:15 ]
- 俺俺なら親にディスパッチする
- 353 名前:sage [2009/02/26(木) 22:54:12 ]
- 俺俺俺も親にディスパッチするな。
350 みたいに実装するなら、MouseEventを変換してやらないと。
- 354 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 22:57:08 ]
- まぁ俺の方がディスパッチするけどね。
- 355 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 23:07:01 ]
- ディスパッチってどうやってするねん?
俺も>>350みたいにリスナーぶち込みで対処したことがある
- 356 名前:sage [2009/02/26(木) 23:17:41 ]
- >>355
java.awt.Component#dispatchEvent(AWTEvent)嫁。
- 357 名前:349 mailto:sage [2009/02/27(金) 00:35:17 ]
- getParent().dispatchEvent(event);が一番短くかけるみたいですね。
>>350から355のみなさん、どうもありがとうございました。
- 358 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:09:26 ]
- 普通に JLabel の親に対して
addMouseListener(MouseEvent) を呼べば >>349 に書かれてるような挙動になるけど。
- 359 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:40:53 ]
- c.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) { c.removeKeyListener(this); } }); どさくさにまぎれて、一度だけ実行されるリスナーの小技。(流れ上、マウスリスナでないのは手抜き) めったに使う機会がないと思うけど。。
- 360 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 01:54:28 ]
- それいけるんだ
Iteratorのループで出来ないかと思ってた〜
- 361 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 12:05:56 ]
- JComponent.setFont(new Font("メイリオ", Font.BOLD, 42))
とすると一回目だけすごく遅いんですが、フォントの読み込みは 何かテクニックがあるんでしょうか?
- 362 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 17:07:54 ]
- アプリケーション起動時にあらかじめ読み込んでおくくらいしかないよ
いずれにせよロード時間はかかる
- 363 名前:デフォルトの名無しさん [2009/03/01(日) 17:17:19 ]
- Java SE Development Kit (JDK) 6 Update 11
Eclipse3.4.1 WindowsXP SP3 上記の環境があり、そこでGUIアプリをJavaで作成しようと思っています。 Swing(?)ってのをElipseのメニューから探したのですが、見当たりません。 JavaSEをアンインストールして、JavaEEをインストールするのが妥当な選択なのでしょうか? それともplug-inがまた別にあるのでしょうか?
- 364 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:39:46 ]
- >>363
LANケーブルを抜いてクビをククルのが最速
- 365 名前:デフォルトの名無しさん [2009/03/01(日) 17:49:20 ]
- >>364
最速か否かは聞かれてないだろww
- 366 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:54:37 ]
- exlipseの標準環境だと、swingアプリはメモ帳でhtml手打ちするようなのりで、
自分でソースコード書いて全部作ることになるっす。 net beansとかいうの使うと、VBみたいなポトペタを標準でできるらしい eclipseもプラグイン導入するとポトペタできるらしい が、swingでポトペタやったことないんでわかりません。
- 367 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 18:23:02 ]
- >>366
Swingやるなら現状ではNetBeans一択らしい。 EclipseプラグインのVE(VisualEditor)は使いもんにならんそうな。 俺はEclipseで手打ちしてるけどナー。 # EcilpseからSwingアプリを起動すると、フォント構成ファイルが無視されて、 # 日本語じゃないフォントで日本語がレンダリングされるという問題も……。 # おかしいなー、フォント構成ファイルの読み込み自体は正常に行われてるんだが。
- 368 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 20:00:47 ]
- つ jigloo
- 369 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 21:02:05 ]
- じぐるーも重いしすごくグループレイアウトが使いにくいしだめだよなぁ
- 370 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:51:25 ]
- NetBeansでGUI作って、Eclipseに持ち込んでる俺。
他にもいるでしょ、こんな人。
- 371 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 23:11:34 ]
- >>367
VEは使ってみて、脱力した。 正直、自分の脳内でレイアウト組んだほうがマシ。 最近は更新もされてないんじゃなかったっけ?
- 372 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 01:20:54 ]
- swingの印刷機能って、コンポーネント上の文字がカクカクになって印刷されるんだけど、
これって普通なの?
- 373 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 08:18:06 ]
- >>372
アンチエイリアスかければ?
- 374 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 23:11:33 ]
- >>370
余裕で俺、とウチの社内全員。
- 375 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:14:31 ]
- >>370
NetBeansでそのままつくらずに、Eclipseに持ち込む理由はなんですか
- 376 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 00:27:24 ]
- 大技見つけたぜぃ。
Javaで比較的簡単にホットデプロイする方法。 まず、デプロイしたいクラスのベースとなるHogeを作っておきます。 そして、それを継承したHoge00というクラスを作ります。 ただし、このクラスのファイル名はHogeXX.javaという風にします。 コンパイルできなければ対策を考えますが、クラスをpublicにしなければ通るようです。 そして、修正してデプロイするときには、Hoge00をHoge01という風にクラスの名前も変えます。 ファイル名はそのままです。 クラス名を変えるとコンストラクタ名まで変えないといけません。この時の小技として コンストラクタの処理を全て関数にしてHoge00クラスにはコンストラクタを記述しないようにします。 その為、Hogeクラスには空のデフォルトコンストラクタを用意しておきます。 あとは、コンパイルしてシステムのクラスローダを使ってHoge01クラスを読み込んで Hogeにキャストして使用できます。Hogeにはインターフェースとなる関数を用意しておきます。 従来の方法だと別のクラスローダを使ったりするので、同じクラスを違うクラスであるとしてしまう為 キャストしたり出来ません。なので、リフレクションなどを使ってアクセスする事になります。 これがどうもうまくないと思ったので、別の方法を考えたら思いつきました。 今からサンプルを作ります。
- 377 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:39:21 ]
- space.geocities.jp/solver9999/
ホームページに置きました。 なぜか、antから起動しないとToolProvider.getSystemJavaCompiler()がnullになってしまうので antを使ってください。この辺を調べてみます。でゎ、おやすみ。
- 378 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:53:06 ]
- なんだか麻布の臭いがする。。。
- 379 名前:デフォルトの名無しさん [2009/03/04(水) 10:33:20 ]
- GUIはまったく初心者だったけど「Javaアプリケーション作成講座」という本を読んで
だんだんわかるようになってきた とりあえず簡単なテキストエディタやブラウザは作れるようになった
- 380 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 11:28:11 ]
- javax.tools.ToolProvider.getSystemJavaCompiler()がnullを返すのは
JAVA_HOME\lib\tools.jarにクラスパスが通ってない事が原因でした。
- 381 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 20:24:28 ]
- ネタ・・・じゃ・・・ないの・・・・か?
- 382 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 02:06:57 ]
- Swingに印刷プレビューダイアログってありますか?
- 383 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 09:36:17 ]
- 作れば良いんじゃないの
- 384 名前:sage [2009/03/06(金) 00:33:36 ]
- 以下のバグが1.4でも6.0でも再現するんだけど、JTextField#setTextはスレッドセーフじゃないの?
それとも検証方法自体が間違ってるの? bugs.sun.com/bugdatabase/view_bug.do?bug_id=4765353
- 385 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:42:39 ]
- swing自体スレッドセーフじゃなかったと思う
- 386 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:44:55 ]
- 1.4.2で直ってないって書いてあるし、放置されてるんじゃね?
- 387 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:46:00 ]
- この再現コードみたいなことをすること自体基本的にないからなぁ
- 388 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 00:50:16 ]
- >>385
↓スレッドセーフだと書いてあるんだが・・・ sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/swing/text/JTextComponent.html#setText(java.lang.String)
- 389 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:13:56 ]
- ざっとソースをみたところ、スレッドセーフじゃないね。
テキストのモデルであるDocumentへの書き込みがアトミックであったとしても、 UIスレッドを用いてコンポーネントから何らかの値をとってくるメソッドで Documentのインスタンスを2回以上使うような操作をする全てのメソッドは その間はDocumentへの書き込みを排他していないといけないはずなのだが、 少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。
- 390 名前:389 mailto:sage [2009/03/06(金) 01:15:33 ]
- ソースは Java 6 しかみてない。すまん
- 391 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:18:31 ]
- setTextする処理をEDTに投げればいいんじゃないの?的外れだったらごめん。
- 392 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:43:30 ]
- >>389
>.少なくとも、getTextメソッドでは、そんなめんどくさいことはやってない。 setTextの話だったんだけど、typo?
- 393 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 01:53:44 ]
- >>392
getTextが変な値を返す原因がsetTextをUIスレッド以外でアクセスしたことにあるなら、 setTextはスレッドセーフだといえる?
- 394 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 07:33:43 ]
- >>393
setTextの時点で変な値にならないのであれば、setTextはスレッドセーフじゃないの? (よくわかってないかもしれん・・・) そもそも>>384の再現コードは、getTextした値が""や"12"や"21"になることがあり、 以下のように思ってるんだが、違うかな? ""は、setTextが値を一度クリアしたタイミングで、getTextしているから。(getTextがスレッドセーフではないから) "12"や"21"はsetTextがロックする前にAbstractDocument#getLengthを呼び出していることが原因。 (setTextもスレッドセーフではない?)
- 395 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 13:04:40 ]
- JavaDoc を見る限り getText() はスレッドセーフじゃないんだな…知らなかった…
別スレッドからsetText()して結果的に画面に"12"や"21"や""が描画される ことがないのであれば setText() はスレッドセーフといえる…のかな? でも現状は >>394 のいうようにsetText()もスレッドセーフじゃないように見えるなぁ
- 396 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 17:43:09 ]
- setText()のスレッドセーフを確認するのに、スレッドセーフではないgetText()が絡んでくるとややこしくなるので
setText()するたびに文字列を溜めておいて、最後に検証するというのはどうだろう。
- 397 名前:デフォルトの名無しさん mailto:sage [2009/03/06(金) 19:28:23 ]
- AbstractDocument.readLockを使えば、少しはましになるけど、ダメだった。
たまに、"12"と"21"が出てくる。
- 398 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 00:12:39 ]
- Beans Bindingはもう見捨てられたのかと思ってたけど、先月スペックリードが変わってるね。
これは期待してもいいんだろうか。
- 400 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 01:08:00 ]
- スペックリードとは仕様定めるリーダーみたいなものでしょうか?
- 401 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 10:41:55 ]
- 複数のクラスで共用するダイアログなどで、わざわざそれぞれのフィールドとして持たせたくない場合は、UIUtilitiesなどを作ってそこでshow***といった感じで定義しても問題ないでしょうか
|

|