トップページ⇒tech
1001コメント326KB

Java標準低速GUI 6 AWT/Swing

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/09/26(水) 20:51:18
ハードウェアの高スペック化、描画アルゴリズムの変更、JavaVMの高速化に伴い、パフォーマンスの問題は改善されています。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。
Java低速GUI Swing 5 (前スレ)
http://pc11.2ch.net/test/read.cgi/tech/1161139809/
Java低速GUI Swing 4
http://pc8.2ch.net/test/read.cgi/tech/1140533866/
Java低速GUI Swing 3
http://pc8.2ch.net/test/read.cgi/tech/1121700954/
Java低速GUI Swing 2
http://pc8.2ch.net/test/read.cgi/tech/1095398949/
Java低速GUI Swing
http://pc5.2ch.net/test/read.cgi/tech/1062271447/l50
0368デフォルトの名無しさん2007/11/16(金) 03:04:30
JFileChooser パフォーマンス問題
http://blogs.sun.com/katakai/entry/jfilechooser_performance_issue
0369デフォルトの名無しさん2007/11/16(金) 05:59:08
jdk6uN b07では直ってるらしいよJFileChooser問題
ttp://download.java.net/jdk6/6u10/promoted/b07/changes/jdk6uN-b07.html
0370デフォルトの名無しさん2007/11/16(金) 06:06:06
>>369
Bug ID: 6578753
Votes 65
Synopsis JFileChooser in 6u2 slow on Windows
Category java:classes_swing
Reported Against
Release Fixed
State In progress, bug
Related Bugs 6491795 , 5050516
Submit Date 10-JUL-2007
0371デフォルトの名無しさん2007/11/16(金) 09:37:29
アプリの二重起動についてなんだが、二重起動を確認したらそこでシャットダウン
するのはよくある方法だと思うんだけど、たとえばNetBeansはもっと賢いやり方
をしている。

NetBeansが動いている状態で、それが最小化した状態でタスクバーにあるとする。
その状態でNetBeansのアイコンをクリックするなりして二重に起動しようとすると、
二重起動にはならずに、タスクバーにあるものが画面に現れる。
これってどうやったらできるのかな・・・。
0372デフォルトの名無しさん2007/11/16(金) 10:52:18
>>371
Javaにはミューテックスなかったっけ?
0373デフォルトの名無しさん2007/11/16(金) 11:34:11
排他制御用のオブジェクトは同一VM上の同期に使うやつで
プロセス間は別の仕組み考えないとダメ。
0374デフォルトの名無しさん2007/11/16(金) 11:36:21
>>371
起動用のアプリを別に分ける。
というか、そのためにexeを用意しているようなもん。
0375デフォルトの名無しさん2007/11/16(金) 11:55:44
んじゃあ手動でミューテックス作っちゃうとか。
テキストファイルで現在起動中のプログラム・インスタンス数を数えておいて、
起動時に中身が1なら起動しない。
もし>>371のいうような挙動をしたいなら、プログラムでミューテックスファイルを監視しておいて、
ファイルの中身が2になった瞬間タスクバーからプログラムを出せばいい。

ここまで書いて思ったんだが、Swingでタスクバーから出すとかそういうそうさって出来たっけ?
0376デフォルトの名無しさん2007/11/16(金) 12:02:05
自プロセスのウィンドウを最小化解除するだけなら Frame#setState でできる

でもそのファイルを監視ってのはどうするんだ
タイマで1秒ごとにタイムスタンプを確認するとかか
0377デフォルトの名無しさん2007/11/16(金) 12:09:54
>>376
ファイルやフォルダで変更があったときにイベント起こすような機能なかった?
0378デフォルトの名無しさん2007/11/16(金) 12:13:16
>>377
NIO2で追加予定。
標準APIでなくてもいいなら、JConfigとかには付いてたと思うし
>>376のやり方で自力で実装してる人も多いんじゃないかと。
03793712007/11/16(金) 19:25:50
一眠りして考えたんだが、
アプリが独自にポート開いて監視しておく。
別プロセスでアプリが起動したら、そのポートを叩く。
応答が返ってきたら、そのプロセスはシャットダウン。
応答した側のプロセスはFrame#setState
でいけそうな気がするんだが、けっこうめんどくさいね。
もっと簡単にできないもんだろか。
0380デフォルトの名無しさん2007/11/16(金) 19:36:00
Windowsファイアウォールとかにブロックされそうだが
0381デフォルトの名無しさん2007/11/16(金) 19:48:42
ファイルサーバとかでもたまに思うんだけど、
OSはロックサーバが標準で付いててほしいんだよな
CVSのロックサービスだってそのためについてるんでしょ。

AbstractFactoryパターンでインタフェース書いて、Winだけ実装作ろうかな
0382デフォルトの名無しさん2007/11/16(金) 20:36:05
Preferencesを使うってのはどうかな。
0383デフォルトの名無しさん2007/11/16(金) 20:42:19
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/lang/preferences.html

# 複数の VM による同時アクセスを、この API でより強力にサポートしないのはなぜですか。
同様に、複数の設定の更新を結合して単一トランザクションに組み込み、
すべて更新するかまったく更新しないセマンティクスを適用しないのはなぜですか。

この API は、持続性のある基本的なデータ記憶域として使用し、データベースの代わりとしては使用しません。
この API は、標準の設定/構成リポジトリ上に実装できるようにすることが重要です。
これらのリポジトリのほとんどでは、データベースのような機能は提供していません。
これらのリポジトリは、この API の設計目的を満たしています。
0384デフォルトの名無しさん2007/11/16(金) 22:05:37
>>380
ファイアウォールの設定はユーザの責任じゃないかい。
0385デフォルトの名無しさん2007/11/16(金) 22:08:21
なんにせよファイルにフラグを記録するやり方だと、アプリが異常終了して、
フラグの書き換えができなかった場合、次に起動しようとすると困ったことに
なりやすい。
0386デフォルトの名無しさん2007/11/16(金) 22:10:30
プラットフォームネイティブのMutexやセマフォを使うか、
オンメモリデータベースを使うってのがいいのかも。
0387デフォルトの名無しさん2007/11/17(土) 01:29:41

ファイルチューザ同等の機能を持つファイルチューザを独自に作る場合、
こうやらねーとすっげー遅くなるぜ?っていうTips教えてくれ
 
0388デフォルトの名無しさん2007/11/17(土) 02:04:22
>>387
普通に作れば遅くならんだろ…
JFileChooserはネイティヴLaFに近づけるために
いろいろ細工してるのが裏目に出てるだけだと思うぞ
0389デフォルトの名無しさん2007/11/17(土) 02:25:54

http://touch.moe.hm/touchup_pict/download/1195233390.jpg
こんな上下2ペイン構成のGUIアプリケーションを作りたいと思ってます

上ペインのJButtonをクリックすれば、下ペインのJPanelが切り替わるように作ればいいと思うんですが
普通どのようにやりますか?

■作ったサンプルではこのようにしてます
 初期化で空のpanel1をつくり、その上にpanel2をadd()する
 別のボタンが押されたら、panel1に載っているpanel2をremove()、panel3をadd()、validate()


ちょっとわかりづらいかもしれませんが、もっといいやり方ありそうでしょうか
0390デフォルトの名無しさん2007/11/17(土) 02:29:27
っ CardLayout
0391デフォルトの名無しさん2007/11/17(土) 02:39:43
TabbedPaneで、タブにアイコン貼付ければいいような気がした。
0392デフォルトの名無しさん2007/11/17(土) 04:22:23
>>390
使ったことないけどカードレイアウトに同意
0393デフォルトの名無しさん2007/11/17(土) 05:09:46
>>388
Fileが遅くなってるから、普通に作ったら遅くなるよ。
しったか乙。
0394デフォルトの名無しさん2007/11/17(土) 05:12:23
JFileChooserの速いバージョンを作りたければ、FastFileを使うといいよ
03953712007/11/17(土) 10:35:15
>>379のやり方実装してみたけど、うまくいくみたい。
0396デフォルトの名無しさん2007/11/17(土) 10:40:08
>>395
やってみた事ないけど、
途中でトラぶってコネクションクローズの前に死んだ場合は二重起動しちゃうの?
0397デフォルトの名無しさん2007/11/17(土) 10:44:33
>>396
ローカルホストの接続でとらぶるって、どんなときにとらぶるかな。
そこらへんの想定外のことがあるかどうかは気にはなってんだけど。
0398デフォルトの名無しさん2007/11/17(土) 10:54:59
>>397
他のアプリがそのポートを使っていて重複する場合

ファイアーウォールが入っていてはじかれる場合

今どきめずらしいけどLANがついてないマシンだとどうなるっけ?
0399デフォルトの名無しさん2007/11/17(土) 15:21:39
> 今どきめずらしいけどLANがついてないマシンだとどうなるっけ?

頭大丈夫か?
0400デフォルトの名無しさん2007/11/17(土) 17:21:11
スタンドアロンのPCがあるからネットワークサービス止めて試してみようか?
たぶん、接続段階で例外投げられたはずだけど。
jarでクレw

クローズ処理をfinalyでやってるなら途中でシャットダウン入るとfinalyブロック中断されるからそれでもアウトだね。
0401デフォルトの名無しさん2007/11/17(土) 17:46:33
イーサネットがあってもなくてもlocalhost(127.0.0.1)にアクセスできるだろ…
# TCP/IPを外してあればできないのか?
0402デフォルトの名無しさん2007/11/17(土) 17:49:59
ネットワーク完全にとめるとループバックももちろん完全にだめ
Win95以前はまずループバックアダプタいれての開発がデフォだったな
0403デフォルトの名無しさん2007/11/17(土) 17:56:04
そういうアダプタ用MACアドレスもあるのかな?別に無くても困らないけど。
0404デフォルトの名無しさん2007/11/17(土) 18:15:28
>>402
そもそも Win95 ってデフォルトのインストール
だと TCP/IP が組込まれてないようなOSだろ…
0405デフォルトの名無しさん2007/11/17(土) 18:27:56
独自のネットワークサポートするから良いんです。

ゲイツ「インターネットなんて一般人にはやんねーよw」

時代の産物だからな。時代の流れか。
0406デフォルトの名無しさん2007/11/17(土) 20:13:33
JDK1.5がそもそもWin95だともう動かんのじゃね?
とくにGUIまわり。
0407デフォルトの名無しさん2007/11/17(土) 20:40:37
http://java.sun.com/j2se/1.5.0/system-configurations.html
Win95はサポート外だね
0408デフォルトの名無しさん2007/11/17(土) 20:43:39
サポートの話なんて誰もしてないだろと
0409デフォルトの名無しさん2007/11/17(土) 21:24:54
設定でTCP/IP無効にしたらダメなんじゃねぇの?
0410デフォルトの名無しさん2007/11/17(土) 21:57:44
アプリの性質にもよるわな。
DBやネットに接続するようなアプリなら、イーサカードが使えない環境に
インストールされることなんて無いしさ。
0411デフォルトの名無しさん2007/11/17(土) 22:11:04
「カードがない環境ではlocalhostもアクセスできない」
というのが当然みたいにいってるが、だれか試したことがあるのか?
その理屈だとNICがない環境ではローカルでのサービスは動かんのだが。
0412デフォルトの名無しさん2007/11/17(土) 22:53:06
>>411
NICないと実際IPサービスはうごかんよ
ループバックいれてれば動くが

という常識的な流れだろ
0413デフォルトの名無しさん2007/11/17(土) 22:57:37
>>407
あんまり関係ないけど・・・、SunはMacのJVMはやってないんだね。
Macはどこがやってるんだろ。Macユーザじゃないからうといんだわ。

Winが80%をしめてるといわれるわりに、周囲にはMac使いが多くて、
じゃあその人たちにも使えるようにとJavaで作り始めたんだが、
肝心のSunはサポートしてないんだね。
0414デフォルトの名無しさん2007/11/17(土) 22:59:52
まあいいじゃん。今時カード入ってないマシン使ってる人なんて
ごくごく少数。クレームついても仕様ですで押し通せば。
0415デフォルトの名無しさん2007/11/17(土) 23:02:33
>>413
Macはアップルがやってる
6がまだ出てこない…
0416デフォルトの名無しさん2007/11/17(土) 23:11:12
>>415
そうなんだ。ありがーと。
6をはやくだしてほしいわ。5で動くようにと思ってたんだけど、
6を知るとついつい6の機能を使ってしまったような・・・
0417デフォルトの名無しさん2007/11/17(土) 23:43:28
NetBeans6 + JavaSE6 + glassfish2の組み合わせの軽さは異常
0418デフォルトの名無しさん2007/11/18(日) 00:40:44
>>416
ついこの前にそれではまった…
JFileChooser で FileNameExtensionFilter 使ってて
Mac OS X で動かねーって言われるまで気が付かなかった

# Apple は 6 を出す気があるんだろうか…?
0419デフォルトの名無しさん2007/11/18(日) 00:44:26
Mac なんて捨てていいよ
0420デフォルトの名無しさん2007/11/18(日) 01:03:20
Macの6はDPのままだにぃ。
Cocoa-Javaバインディングも放置になったし、やる気なさそう。
0421デフォルトの名無しさん2007/11/18(日) 01:19:05
OpenSource版ががんばってくれるんじゃね?
0422デフォルトの名無しさん2007/11/18(日) 01:42:24
多少のタイムラグはあってもMacでも6は出るだろうし、
7でも8でも出てくると思うけどね。
Javaはいつも明日の言語なんだよな。w
明日はごちそう、でも今日は無い。w
0423デフォルトの名無しさん2007/11/18(日) 01:44:33
AppleはJavaに対してなかなか気合いが入ってると思うけどなぁ。
ただ、やろうとしていることに作業が追い付いてないだけで・・・。
0424デフォルトの名無しさん2007/11/18(日) 02:05:50
前は気合い入ってたんだけど、新しめの機能のフレームワークに対応する
Javaバインディングを出すのはもうやめてる。

LeopardではBridgeSupportでなんとかできるのかもしれないけど。
0425デフォルトの名無しさん2007/11/18(日) 02:09:41
てかMacOS Xてunix互換なんだろ?CPUもIntel系にしたのに既存のコード使えないのか?
0426デフォルトの名無しさん2007/11/18(日) 02:18:14
>>423
時間が経つごとに気合がなくなっていってるっぽいよなぁ

>>425
CPUがインテルでもベースがUNIXでも肝心なGUIライブラリは別物なので結局移植作業は必要
0427デフォルトの名無しさん2007/11/18(日) 02:20:29
プロセスとかファイルシステムとかあたりはunix互換でも、
グラフィックとかサウンドとかあたりは全然別物だし・・・
0428デフォルトの名無しさん2007/11/18(日) 02:38:18
追加機能が増えたりバージョンあがるごとに仕様かわったりで
追従していくの大変すぎるんじゃないのかなぁ。
JVMさえ開発すればどのマシンでも動きますなんてただの宣伝文句で、
それ作ろうとしたらすげー大変だと思うよ。
0429デフォルトの名無しさん2007/11/18(日) 13:28:02
技術者の量・質を考えたらAppleがJavaを管理するのは無理そうだな
できあいの既存のものを改造していくのには慣れていても、
継続的にある規格に互換させていく作業ってのはやってこなかっただろうし。
0430デフォルトの名無しさん2007/11/18(日) 14:37:15
>>428
それが基本ソフトとよばれるものなんだけどな
互換性をいかに維持するか

新しいOSごとにアプリ全部作り直しなんてやってられん

このスレ的にはApple捨ててよで結論でてるだろ
5.0のときの対応も遅かった
0431デフォルトの名無しさん2007/11/18(日) 14:41:36
マック使う人はアポー謹製ソフトさえありゃ満足なんだから放置しとけばいい
0432デフォルトの名無しさん2007/11/18(日) 16:17:40
デザイナはAdobe製ソフトも入ってないと困るよ
0433デフォルトの名無しさん2007/11/18(日) 20:54:18
mac osxはカーネルより上のレイヤーはXですら自前だからなぁ。
GUIが自前とか言う次元超えてるよ。
0434デフォルトの名無しさん2007/11/19(月) 00:29:34
>>431
V2Cが無ければとても困ると思うの
0435デフォルトの名無しさん2007/11/19(月) 03:17:02
なんとかとハサミは使いようというじゃない。w
0436デフォルトの名無しさん2007/11/19(月) 10:31:31
せっかちな人にはJavaは向かないね
0437デフォルトの名無しさん2007/11/19(月) 13:22:30
マック信者をJavaで逆洗脳してみたいwww
0438デフォルトの名無しさん2007/11/19(月) 13:46:40
Mac信者かつJava信者ですが何か?

でもCocoa-Javaはいらないと思ってる。
そういうのはRubyとかでいいんじゃないかな。
Javaはクロスプラットホームが基本です。

クロスプラットホームだけど、Macでは見た目を良くする。
ttp://developer.apple.com/technotes/tn2007/tn2196.html

その他のプラットホームでは、Nimbusに期待してる。
ttps://nimbus.dev.java.net/spec/index.html

どっちも解像度に依存しないし、スモールサイズなんかは共通して使える。
0439デフォルトの名無しさん2007/11/19(月) 14:33:56
6での大幅な改善点がデスクトップアプリの強化(大量にバグもちだが)と
大幅な高速化(1.3.1から1.4.0より大きな変化)だから
もうすぐ1年たつというのにMacに6がきてないのは苦しい
0440デフォルトの名無しさん2007/11/19(月) 15:16:27
アップルの独自実装だからmac版が早くなるか分からないんじゃない?
糞実装を何とかしてくれればそれで良いと思うが。
0441デフォルトの名無しさん2007/11/19(月) 19:21:46
まあぶっちゃけV2Cが1.4.2で動く事からも
Macが6をサポートしなくても当分困らないんだよな
5.0が動くだけでも十分じゃね
0442デフォルトの名無しさん2007/11/19(月) 20:59:51
そんな後ろ向きな姿勢じゃいかんよ
0443デフォルトの名無しさん2007/11/21(水) 21:07:37

JTreeで幹や葉をクリックしたり、矢印キーで移動させたときに
選択している幹や葉のファイルを別のJListに表示したい。

この場合、イベントはvalueChangedでいいんでしょうか?
それとなにか注意点とかありますでしょうか
 
0444デフォルトの名無しさん2007/11/22(木) 00:03:52
データ転送じゃね?
0445デフォルトの名無しさん2007/11/22(木) 12:44:57
>>443
マニュアル読んで判断したならいいでしょ
あとvalueChangedってメソッド名だけ出しても普通の人はわからんと思うよ
0446デフォルトの名無しさん2007/11/22(木) 15:08:37
下手にJTreeのvalueChangedいじったらパフォーマンス落ちね?
0447デフォルトの名無しさん2007/11/22(木) 15:31:17
上手にいじれば良い
0448デフォルトの名無しさん2007/11/22(木) 19:38:15
それが出来るならこんなところで確認してないと思うが?
まあ、ドキュメント読めば分かることだが。
0449デフォルトの名無しさん2007/11/22(木) 23:58:16
JFrameの下部にStatusBarを取り付けようとしています。
単純にBorderLayout.SOUTHで問題はないのですが、BorderLayout.SOUTHに当たる領域は後々別に使用するかもしれないので、完全に別領域として下部に取り付けたいのです。
イメージ的にはsetJMenuBar()と同じような感じです。
どのような実装がよいでしょうか?
0450デフォルトの名無しさん2007/11/23(金) 00:10:09
JPanel に BorderLayout をセットして JFrame の CENTER に置く
JFrame の SOUTH をステータスバーのために使って、
JPanel の SOUTH を後々別に使用するときのために取っておく
0451デフォルトの名無しさん2007/11/23(金) 00:13:45
そのようにした場合、ステータスバーをセットするJFrameのCENTERにコンポーネントを加えたいときにわざわざそのJPanelを取得後貼り付けないといけないので避けたいです。
他にはないでしょうか?
0452デフォルトの名無しさん2007/11/23(金) 00:25:57
>JFrameのCENTERにコンポーネントを加えたいときにわざわざそのJPanelを取得

いや、最初から、JFrame じゃなくて JPanel の CENTER に入れればいいじゃん。
わざわざ取得っていうか、JPanel 作ったときにそれをフィールドに持っとけばいいだけでそ?

本当にどうしても JMenuBar のように振舞わせたくて他に方法がないというなら、出来ることは出来るけどちょっと面倒い。
JRootPane の中の layeredPane と glassPane と、layeredPane の中の contentPane と JMenuBar (と自分の statusBar) をレイアウトするレイアウトマネージャを書いて、JRootPane のレイアウトマネージャをそれで置き換える。
0453デフォルトの名無しさん2007/11/23(金) 00:27:53
Windowsに限定しちゃうかも知れないけど、
%USERPROFILE%\Local Settings\Application Data
↑のディレクトリの中に変なGUID名のディレクトリが作られてて
中を見るとJ2SDK5.0のインストーラみたいなのが入ってる。

うちの環境にはJDK6も入ってるけど、5系だけゴミ?があるので気になります。
これって削除しちゃっていいのかな?
0454デフォルトの名無しさん2007/11/23(金) 00:34:12
>>452
そうなのですが、どうしてもメニューバーのように扱いたかったので・・
やはりかなり面倒なことになるようですね。

丁寧に教えていただきありがとうございました。
0455デフォルトの名無しさん2007/11/23(金) 00:40:36
ボーダーレイアウトでいいだろ
面倒ではないだろと
04564532007/11/23(金) 00:44:03
質問・相談スレに書くつもりが誤爆してました。
こちらはクローズします。ごめんよぅ。
0457デフォルトの名無しさん2007/11/25(日) 00:15:06
質問相談スレで聞いたところ、こちらで聞いたほうが良いと教えていただい
たので質問させていただきます。
現在、携帯電話でいうフレーム撮影機能をPC上でJAVAを用い、作りたいと考え
ております。USBカメラから動画キャプチャを行い撮影ボタンを押すとその時の
静止画がJPEGで保存するところまでは作ったのですが、写真フレーム(gif)を
動画上に表示する方法がわかりません。API集の方も探してみたのですが、見つ
けることができませんでした。誰か方法について教えてもらえませんでしょう
か??よろしくお願いします

初心者でして簡単なソースなどつけていただけると助かります。
0458デフォルトの名無しさん2007/11/25(日) 00:18:56
一番簡単なのは
・ImageのロードにはImageIOを使う
・JLabelを貼り付けてそれにImageをセットする

ネットで初心者かどうかってのは意味ない文章だからやめたほうがいい
知っているか知らないかだけだから
0459デフォルトの名無しさん2007/11/25(日) 00:23:38
JMF使ってる?
0460デフォルトの名無しさん2007/11/25(日) 00:23:49
動画を描画するコンポーネントのpaintComonent(...)をオーバーライドして
super呼んだ後に、drawImage(...)でOKじゃね?
0461デフォルトの名無しさん2007/11/25(日) 00:35:49
いや
>USBカメラから動画キャプチャを行い撮影ボタンを押すとその時の
>静止画がJPEGで保存するところまでは作った
ここにJMF使ってるならJMF流儀の動画の描画の仕方があるから動画のキャプチャをどうやってるかでやり方が決まる。
0462デフォルトの名無しさん2007/11/25(日) 01:30:58
JMFをつかっています。
キャプチャ部分となりますと
new Timer(100, new ActionListener(){

try {
player = Manager.createRealizedPlayer(new MediaLocator("vfw://0"));
} catch(Exception e){
System.out.println(e);
System.exit(1);
}

player.start();
ここになりますでしょうか。
ご教授よろしくお願いします
0463デフォルトの名無しさん2007/11/25(日) 02:44:57
>写真フレーム(gif)を動画上に表示する
これがやりたいんだよね?

ならEffect実装してProcessorからTrackControl取り出してTrackControl#setCodecChain(Codec[])で実装したEffectセットしてやれば良い。
んでProcessor#getVisualComponent()で取得したビジュアルコンポーネントを適当に張り付ければ良い。

あとはJMFのページのチュートリアルとかサンプルコード読んで。
0464デフォルトの名無しさん2007/11/27(火) 20:21:48
日本語を入力時、「確定はされていない文字列入力状態中」(Windowsでは文字の下に破線が引いてある状態)を調べる方法はありますか?
0465デフォルトの名無しさん2007/11/27(火) 20:22:47
ImmGetCompositionString
0466デフォルトの名無しさん2007/11/27(火) 20:23:19
ごめん、ここJavaだったorz
0467デフォルトの名無しさん2007/11/27(火) 20:34:01
Component に addInputMethodListener を仕掛けておけば取れるみたい?
■ このスレッドは過去ログ倉庫に格納されています