Java低速GUI Swing 5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/10/18(水) 11:50:09パフォーマンスの問題は徐々にですが改善されつつあります。
しかしながら、"Java"というだけで未だに敬遠されるのが現状。
そんなSwingと引き続き付き合っていくみんなのスレッドです。
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
0592588
2007/06/28(木) 10:46:23JSpinner#setEditorを使って、
setEditor(new JSpinner.DateEditor(sp, "yyyy/MM/dd"))
0593デフォルトの名無しさん
2007/06/28(木) 10:49:400594589
2007/06/29(金) 00:15:08ありがとうございます。できました。
でも次はデータを取得したらなぜかぬるぽになる・・・
sp.getValue().toString() とかやってみたのですが…
0595デフォルトの名無しさん
2007/06/29(金) 00:36:310596デフォルトの名無しさん
2007/06/29(金) 00:37:530597デフォルトの名無しさん
2007/06/29(金) 00:40:59spがnullなのかsp.getValue()がnullなのか。
データ取得のタイミングが早過ぎてスピナがまだ構築されていないとか。
試しにこういうのを作ったけど普通に取得できたよ。
JFrame f = new JFrame();
f.setLayout(new java.awt.FlowLayout());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JSpinner sp = new JSpinner(new SpinnerDateModel(new Date(), null, null, Calendar.DAY_OF_MONTH ));
sp.setEditor(new JSpinner.DateEditor(sp, "yyyy/MM/dd"));
sp.setUI(new javax.swing.plaf.basic.BasicSpinnerUI());
f.add(sp);
JButton b = new JButton("A");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(sp.getValue());
}
});
f.add(b);
f.pack();
f.setVisible(true);
0599529
2007/06/30(土) 10:08:36>>587
ソースはShift_JISですが、.classファイル中では変換されちゃってNFCなUTF-8の
コードで記録されてるんで関係無いっぽいですね。
MacのファイルシステムはNFDでファイル名持ってるけどNFCのファイル名渡されると
NFDに変換するみたいなんですが、Java VMのそこら辺の実装にバグがあるっぽいです。
>>591
Windowsは最初っからNFCのファイル名のみを渡されるのが前提で、
NFDのファイル名をNFCに変換する機能とかが無く、NFDの濁点のフォントを持ってないんで
化けるみたいです。
まあ、仕方ないかと。
Appleに報告したら1日で返事が来て追加情報を求められました。
さすがにやばいと思ったんでしょうか。
あと、無理矢理Swingに話を戻すと、JTextComponentはNFCみたいなんで、
自分のアプリではファイル名はNFCで扱い、java.io.Fileを生成するときだけ
MacではNFDに変換するようにしました。
0600デフォルトの名無しさん
2007/06/30(土) 14:12:280601デフォルトの名無しさん
2007/06/30(土) 15:56:39だからsunのJDKの実装ではReaderのデフォエンコーディングがUTF-8なんだったはず。
0602デフォルトの名無しさん
2007/07/02(月) 17:46:19今AとBという画面を作って、Bに検索窓を作って、クリックした内容がAウィンドウのテキストフィールドに反映するように
しているのですが、そこからさらにBウィンドウの「確定」ボタンを押すと、Aウインドウでも「確定」ボタンを押したのと同じ状況にしたいのですが…
0603デフォルトの名無しさん
2007/07/02(月) 18:07:29イベントの中ではそのメソッドを呼ぶようにするだけ
Swingの中で押したように動作させるという意味ならそのまま命令があるけど、APIマニュアルをよく見てみよう
0604594
2007/07/03(火) 11:12:10すいません、spがnullになってしまいます。。。
EclipseでgetJContentPane()に自前で以下のコードを追加したのですが…
JSpinner sp = new JSpinner(new SpinnerDateModel());
sp.setUI(new BasicSpinnerUI());
sp.setEditor(new JSpinner.DateEditor(SP_checkDate, "yyyy/MM/dd")) ;
jContentPane.add(sp);
そして、ボタンを押したときのコードはこれです。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date spData = sdf.parse(SP_checkDate.getValue().toString());
なぜかspがnullになっています。。。
0605デフォルトの名無しさん
2007/07/03(火) 12:28:07Swingの前にJavaの勉強した方がいいぞ。
>>597のコードを、お前のコードにそのまま埋め込んでもダメ。
意味を理解しろ。
JSpinner.DateEditorのコンストラクタの引数は、
setEditorを呼び出すJSpinnerオブジェクトを指定する。
>>604では、JSpinner.DateEditorのコンストラクタで指定したJSpinnerと
setEditorを呼ぶJSpinnerが異なっている。
それと、以前のアドバイスをまるで無視してるな。ちゃんと読んでるか?
SpinnerDateModel#getDate()でDate型で取得できると言われたのに
無駄にSimpleDateFormat使ってDate→String→Date変換してるし、
変数名があいかわらず変だったりするし。
0606594
2007/07/03(火) 13:46:28変数名の修正が中途半端になっていました・・・すいません。
Date型で取得せずにStringで取得してたりダメダメなので、もう一度出直します…
0607デフォルトの名無しさん
2007/07/03(火) 14:57:060608デフォルトの名無しさん
2007/07/03(火) 17:16:40いつも太字のDialog,12を手動でぽちぽち変更しているのですが…
0609デフォルトの名無しさん
2007/07/03(火) 18:35:49>>483 辺りを参照するヨロシ。
0610デフォルトの名無しさん
2007/07/04(水) 01:14:58使おうと思ったけどエンコード思うようにいかなくて
javax.mailの方に手を出したら結局そっちだけで用が済んでしまい
わざわざcommons使うまでもなかったっていうか・・・
0611デフォルトの名無しさん
2007/07/04(水) 01:15:440612594
2007/07/04(水) 12:11:32DataModelが必要だったのですね… ちゃんと読んでなくてすいません。ありがとうございます!
0613デフォルトの名無しさん
2007/07/04(水) 12:12:23やっぱりVE上でもヨロシくしたかったのですが…
VE以外のGUIエディタなら可能?
0614デフォルトの名無しさん
2007/07/04(水) 16:25:33いざエクスポートして、問題なく起動でしたと思ったら、
なぜかDBとの通信に失敗している。
エラー内容をみるとjava.lang.NullPointerException
開発時には普通に実行できたのに、
jarにエクスポートしたらDBと通信できなくなる場合ってあるのでしょうか?
JDBCはちゃんとclasspathがあるとこに置いてます
0615デフォルトの名無しさん
2007/07/04(水) 17:09:100616デフォルトの名無しさん
2007/07/04(水) 17:25:13Swingというかスレ違いな気がするが、一応回答。
実行可能jarから起動すると、CLASSPATHや-classpathオプションは無視される。
代わりにMANIFEST.MFのClass-Pathエントリに書くこと。
これ以上の助言が欲しかったら、その例外の発生箇所を加えて
Java質問・相談スレに行け。
0617デフォルトの名無しさん
2007/07/04(水) 17:31:57無視されないよ
なにわけのわからんことを・・・
0618デフォルトの名無しさん
2007/07/04(水) 17:51:03ある
0619デフォルトの名無しさん
2007/07/04(水) 18:18:05>>614
eclipse使ってるなら、jarファイルをデバッガ経由で起動してみたら?
0621デフォルトの名無しさん
2007/07/04(水) 21:33:41ttp://java.sun.com/javase/ja/6/docs/ja/technotes/tools/windows/java.html#-jar
ドキュメントを読む習慣を付けようぜ。
0622デフォルトの名無しさん
2007/07/04(水) 21:49:10普通は使わんし、使うならマニフェストファイルに書くの普通だろ
Swingと何も関係ないやんか
0623デフォルトの名無しさん
2007/07/04(水) 22:00:11>>622
とことん読まないね。
ttp://java.sun.com/javase/ja/6/docs/ja/technotes/guides/jar/jarGuide.html
>デスクトップ上で JAR ファイルをダブルクリックすれば javaw -jar により JAR ファイルが自動的に実行されます。
0624デフォルトの名無しさん
2007/07/04(水) 22:04:36オプション設定できないから
0625デフォルトの名無しさん
2007/07/05(木) 00:43:070626デフォルトの名無しさん
2007/07/05(木) 00:54:08関連付けされたプログラム実行の方が一般的だろ。
自分を正当化してかみつきたいだけの馬鹿はスルーしとけよ。
0627デフォルトの名無しさん
2007/07/05(木) 11:41:18lauch4j
0628デフォルトの名無しさん
2007/07/05(木) 12:00:320629デフォルトの名無しさん
2007/07/05(木) 13:08:40それを回避するためにコマンドライン引数受け付けるのもあるけど、あくまでも救済処置だろ。
今となっては。
0630デフォルトの名無しさん
2007/07/05(木) 13:27:570631デフォルトの名無しさん
2007/07/05(木) 13:43:14たぶんアプリケーションのオプションではなくJVMオプションの類の話をしてると思われる
0632デフォルトの名無しさん
2007/07/05(木) 14:47:030633デフォルトの名無しさん
2007/07/05(木) 14:53:280634デフォルトの名無しさん
2007/07/05(木) 14:57:180635デフォルトの名無しさん
2007/07/05(木) 15:07:49システムプロパティを指定する-Dや、
VMの種類を選択する-clientや-serverとか、
メモリ割当プールの最大最小サイズを指定する-Xmxや-Xmsなど。
今のところ、実行可能Jarをダブルクリックでは、
これを個別指定することはできない。
まあただ、-clientや-serverはCPUやアーキテクチャによって
自動選択されるし(おおよそではあるけど)
-Xmxと-Xmsも、Java6からは規定値が64MB/2MBではなくなり、
物理メモリに応じた値に変わるようになった。
ttp://java.sun.com/javase/ja/6/docs/ja/technotes/guides/vm/gc-ergonomics.html
-Dやその他のVMオプションは無理としても、
実行可能Jarの手軽さを全否定するほど、使えないってことは無いと思う。
0636デフォルトの名無しさん
2007/07/05(木) 20:26:11SwingやJavaの動作が速くなったとはいえ、デフォではGCによる停止時間が長すぎるので
使い物にならないのさ。
あくまでも快適に動くアプリはチューニングされたオプションが前提。
マニフェストファイルにオプションがかけないのでここは厳しいんだよな。
WebStartもメモリだけしか対応してないので厳しい。
普通の人は2,3秒もGCでGUIがとまってたら使わないと思う。
0637デフォルトの名無しさん
2007/07/05(木) 20:28:146では単純なサーバークラス検出動作からかわったの?
0638デフォルトの名無しさん
2007/07/05(木) 21:28:25VMのチューニングしないとまともに動かないような、リッチでヘビーなGUIアプリはお前に任せる。
俺は、VMのチューニングが不要な、チープでライトなアプリ作って、実行可能jarで配布するよ。
ところでV2C使ってると、クライアントサイドJava & Swingもいいもんだと思えてくる。
もっとも、あれは作者さんのがんばりに寄るところが大きいのかな。
HTMLビューアは自作してるそうだし。
0639デフォルトの名無しさん
2007/07/05(木) 22:25:020640デフォルトの名無しさん
2007/07/05(木) 22:46:47ガンガレ639。お前には未来とVMチューニングがある。
0641デフォルトの名無しさん
2007/07/06(金) 02:48:48Swingで最重量級といえるNetBeansでも、そんなに止まることはないが。
0642デフォルトの名無しさん
2007/07/06(金) 07:00:100643デフォルトの名無しさん
2007/07/06(金) 20:16:52コンカレントGCに変更すれば大丈夫だけど
0644デフォルトの名無しさん
2007/07/06(金) 21:46:120645デフォルトの名無しさん
2007/07/06(金) 22:02:26glassfish立ち上げたりDB立ち上げると1GBじゃたりないよね
NetBeansはデフォだとまったくメモリが足りないから増やしてるさ
もしかしてみんなヘビーにNetBeansつかってないの?
0646デフォルトの名無しさん
2007/07/06(金) 23:37:13いや、コンカレントにするより、分散GCの周期を1分から延ばすのと
スループット並列GCにする方が快適だったりするかもしれないぞ。
でもIDEのVMとアプリケーションサーバのJVMは分けるよ。
違う性質のアプリなんだから分けた方がチューニングしやすい。
って何の話になってるんだ。
V2Cは、多分に作者さんのコーディングの腕で快適になってるんだと思う。
0647デフォルトの名無しさん
2007/07/06(金) 23:54:15遅いのはFullGCだけだからFullGCがでなければそれでいいのさ
GCチューニングはJavaでゲーム作ったりしてテストしてるから大丈夫
5ms以下にしていれば体感的に問題はないかな
メモリが多いとパラレルがわりと有効だけど、パラレルにするとスループットはいいけど、
レスポンスが大幅に低下するから、使う場面が結構難しい
マルチコアだからパラレルでいいというよりはGC用にずっとコンカレントだけ動かしてるほうが
いい場合も多いかな
まぁ、バックグラウンドコンパイルとかもあるし、AP鯖やDB鯖も起動するからIDEだけにフルにまわすわけには行かないからね
最近はVM系もよく使うからなおさらかな
ところでAP鯖とIDE、デバッグ起動とそれぞれVMは自動的に分かれるよね?
Tomcatだってデフォだとメモリ少ないし-Xmxいれないとまずうごかん
あーSwingがもはや関係なくなってしまった
0648デフォルトの名無しさん
2007/07/07(土) 11:24:32glassfishとJavaDBはNetBeansと違うVMで走るよ。
0649デフォルトの名無しさん
2007/07/07(土) 12:59:29何を当たり前のことを
0650デフォルトの名無しさん
2007/07/07(土) 15:41:580651デフォルトの名無しさん
2007/07/07(土) 16:00:02マルチプロセスでの動作を考慮ってことだろ。
0652デフォルトの名無しさん
2007/07/07(土) 19:59:560653デフォルトの名無しさん
2007/07/24(火) 12:16:09import javax.swing.*;
public class Sample1 extends JFrame{
public static void main(String[] args){
Sample1 frame = new Sample1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds( 10, 10, 300, 200);
frame.setVisible(true);
}
}
という簡単なものを表示してみようと思ったのですがサンプルどうりに300,200の
大きさのウインドウが表示されず左上隅に小さいウインドウが表示されるだけです.
なぜこうなってしまうのでしょうか?
0654デフォルトの名無しさん
2007/07/24(火) 13:30:36java version "1.6.0_02"
Java(TM) SE Runtime Environment (build 1.6.0_02-b06)
Java HotSpot(TM) Client VM (build 1.6.0_02-b06, mixed mode, sharing)
気休めだけど setLocation(int, int), setSize(int, int) とかも試してみたら?
0655デフォルトの名無しさん
2007/07/24(火) 13:52:23Swingではやってはいけないコーディングなのがきになるが、それどこのサンプルなの?
0656デフォルトの名無しさん
2007/07/24(火) 14:21:25なんかまずいか?
0657デフォルトの名無しさん
2007/07/24(火) 14:22:08http://www.javadrive.jp/tutorial/
ここを参考にやったんですが出来ません.
>>654
1.6.0_02を使っているけど出来ませんxx
0658デフォルトの名無しさん
2007/07/24(火) 17:09:020659デフォルトの名無しさん
2007/07/24(火) 18:00:31public class Sample1 extends JFrame{
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Sample1 frame = new Sample1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds( 10, 10, 300, 200);
frame.setVisible(true);
}
});
}
}
ウインドウマネージャ次第でフレームは再配置やリサイズされるかもしれないしな。
>>658のようないろいろなヒントをマネージャに与えれば言うことを聞いてくれるかも。
0660デフォルトの名無しさん
2007/07/27(金) 00:38:57位置を変えたり、非表示だったのを表示するようにしたりしているのですが、
大きさと、位置が変わってくれません。
デバッグしたところ正しい値はコンポーネントのプロパティに入っているようなの
ですが、、、
0661デフォルトの名無しさん
2007/07/27(金) 01:16:140662デフォルトの名無しさん
2007/07/27(金) 01:17:140663デフォルトの名無しさん
2007/07/27(金) 14:24:010664デフォルトの名無しさん
2007/07/28(土) 01:26:080665デフォルトの名無しさん
2007/07/28(土) 02:14:54invokeLaterでええやん
例えばボタンとかを押してActionListener#actionPerformedを呼んで
その中からJDialog#setVisibleするのならinvokeAndWaitは使えない
0666デフォルトの名無しさん
2007/07/28(土) 10:04:35使わなくてもいいよ
AWTスレッドなら
0667デフォルトの名無しさん
2007/07/31(火) 12:29:26・BufferStrategyを使って描画
・フルスクリーン表示
・メニューの表示
CanvasでBufferStrategy使って描画、Canvasを含むJWindowをフルスクリーン表示
フルスクリーン画面でJPopupMenuを表示するとCanvasの描画が走るタイミングでJPopupMenuが消える
JPopupMenuをJInternalFrameで実現してJDesktopPaneとの組み合わせにしてもダメでした。
BufferStrategyを使わなければ実現出来るのに・・・。
ゲーム作ってる人で同じ悩みに直面した人いませんか?
0668デフォルトの名無しさん
2007/07/31(火) 13:25:18JPopupMenu#setLightWeightPopupEnabled(boolean) で false にしろとかって話でなくて?
0669デフォルトの名無しさん
2007/07/31(火) 14:00:11はやり、消えます。
BufferStrategyからgetDrawGraphicsしたGraphicsでMenuを描画すれば良いのでは
と思いついたのですが描画は出来ても機能せず。
フルスクリーンじゃない時はMenuがCanvasの上に表示されるので
フルスクリーン+BufferStrategyの組み合わせがどうにも悪いのかなと・・・。
0670デフォルトの名無しさん
2007/07/31(火) 14:00:350671デフォルトの名無しさん
2007/07/31(火) 14:10:17JWindowからcreateBufferStrategyしてもダメでした。
0672デフォルトの名無しさん
2007/07/31(火) 14:13:510673デフォルトの名無しさん
2007/07/31(火) 14:34:53部品を全てawtに統一しJPopupMenuの変わりにDialogを使用したところ無事実現できました。
事象が上手く理解できていないので今からソースを見て理解を深めたいと思います。
ありがとうございました。
0674デフォルトの名無しさん
2007/07/31(火) 14:50:24AWTってのは各種OSなどに描画を任せる
混ぜるな危険ってのはそういうこと
Swingコンポーネントを使いつつBufferedStrategyが使いたいという用途はあまりないと思うので
その場合はSwingフレームワークにあわせること
ゲームなどでBufferedStrategyは使うと思うが、メインループスレッドからバックバッファに描画、
その後repaint発行でいける
この場合注意すべきポイントはrepaintはいつ呼ばれるかわからないということ
つまりトリプルバッファのようにバックバッファが最低2つは必要になる
BufferedStrategyなどでゲームに特化した話題ならゲーム製作板へどうぞ
0675デフォルトの名無しさん
2007/07/31(火) 16:31:47BufferStrategy の原理上そうなると思う.
昔ちょっと試したときの結論はゲームにメニューバーは付けない(そもそもかっこわるいし)で
ゲーム内にメニューを実装する,でした.
0676デフォルトの名無しさん
2007/07/31(火) 17:39:570677デフォルトの名無しさん
2007/07/31(火) 18:00:20この仕組みを変えるためにはSwing自体大幅にパイプラインをかえないといけない
で、JOGLに関してはJavaSE6でそうなる予定だったのだが、不具合のためOFFになってしまった
そろそろ標準でJOGLついていてもいいと思うけどね
まともに3D動かそうとすると必須だし
0678デフォルトの名無しさん
2007/07/31(火) 18:21:290679デフォルトの名無しさん
2007/07/31(火) 18:31:18描画内容を反映させるのにBLITが必要なく、垂直同期が取れるAWTのほうが有利
JNIによるダイレクトなレンダリングも期待できる
GUIコンポーネントというのならSwingのほうが将来的にも拡張性的にも有利ではないかと
0680デフォルトの名無しさん
2007/07/31(火) 18:41:02>>677
このバグ自体は昔からあるけどいざ、潰してみたらVGAドライバ由来の物だということが分かったので当分無理。
だから途中でデフォルト無効になったんだし。
これさえ直ればちゃんとGLPanelがつかえるんだよ。
せっかく、JOGLがjavax.*まできたのに・・・。
JOALも標準拡張にしてやってくだせぇ。
ミドルレンジ以上のサウンドカードじゃないとOpenALまともにサポートしてないから無理かな?
0681デフォルトの名無しさん
2007/07/31(火) 19:13:050682デフォルトの名無しさん
2007/07/31(火) 19:53:15自分で調べろや
0683デフォルトの名無しさん
2007/07/31(火) 21:35:540684デフォルトの名無しさん
2007/07/31(火) 21:37:05Java言語から勉強したほうがいいよ
0685デフォルトの名無しさん
2007/07/31(火) 21:57:55http://www.amazon.co.jp/Java-Swing-Hacks/dp/4873112788/
この本の17ページに書いてあるよ
0686デフォルトの名無しさん
2007/07/31(火) 21:59:16BufferedImage→ Graphics→drawImage
これで分からなきゃ初心者スレ行ってくれ
0687デフォルトの名無しさん
2007/07/31(火) 22:06:500688デフォルトの名無しさん
2007/07/31(火) 22:07:400689デフォルトの名無しさん
2007/07/31(火) 22:12:10APIに載ってるんだが、なんで調べないの?
つ getEditingRow()
0690デフォルトの名無しさん
2007/07/31(火) 22:31:300691デフォルトの名無しさん
2007/07/31(火) 22:32:46Heavyweight/Lightweight Mixing feature of Java 7
ttp://forums.java.net/jive/thread.jspa?threadID=29175&tstart=0
ごめん内容いまいち追い切れてない。
0692デフォルトの名無しさん
2007/07/31(火) 22:44:27まだmacはJDK5だと言うのに・・・。
■ このスレッドは過去ログ倉庫に格納されています