1 名前:デフォルトの名無しさん mailto:sage [2008/11/17(月) 01:09:54 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 pc11.2ch.net/hp/ Webプログラミング pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド120【歓迎】 pc11.2ch.net/test/read.cgi/tech/1223603727/ 次スレは>>990 あたりで。 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/
101 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 19:55:17 ] >>99 イベントがどのタイミングで処理されるのかを マルチスレッドだと制御できるとは思えないからなぁ。 シングルスレッドだからこそ、予測しやすいわけで。 まぁ、予測ができるだけで、確実にシーケンシャルに実行されるかどうかはわからんのだけど。
102 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 19:56:55 ] どう考えてもシンプルでコストが安いしな。 今のマシンなら楽勝って考えるてるなら、 自分で作ったらいい。環境はあるんだから。
103 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 20:19:49 ] UIがマルチスレッドなら、特別な仕掛けがない限り UIコンポーネントから取得するデータは、取ってきた時点で 既に古いものになっていると考えなければならない。 こんなもので何を決められようか?
104 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 21:50:54 ] 複数のインターフェースを使ってボタンをクリックすることで 画面の切り替えをしたいのですが、この場合CardLayoutを使うと思うんですが 本を読んでもイマイチ分からないので、使い方を教えていただけませんか? それともCardLayout以外にも画面の切り替えを行う方法はありますか? よろしくお願いします
105 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 21:57:06 ] JTabbedPaneはどう?
106 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:29:15 ] >>105 教えていただきありがとうございます タブを使うやり方もいいんですが、 できれば、ボタンをクリックしてカードを 切り替える感じのものがいいのですが ありませんでしょうか?
107 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:29:35 ] private static final String TEISUU = "定数"; と定義された定数に対して インスタンスメソッドの中から、クラス名を付けずにTEISUUにアクセスしてもエラーになりません。 これは何故でしょうか? 具体的には、 class Test{ private final static String TEISUU = "定数"; public void method(){ String var; var = TEISUU; System.out.println(var); } と書けてしまいます。 文法的には var = Test.TEISUU; とすべきではないのですか? private final String TEISUU = "定数"; としても解決すると思うのですが、 自分が勉強した限りではどの本見ても定数にはstaticを付けてるんですよね。 定数にはstaticを付けるというのがお決まりなのでしょうか?
108 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:45:57 ] Javaでどの様にハッキングするの? どの位の所まで分かる様になったらハッキング系の事出来るの? JavaでLAN周りを調べる事何て出来るの? どの様にJavaにネットと通信出来るように書くのか気になる。
109 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:52:45 ] >>107 TestクラスのTEISUUの値は,インスタンスの状態にかかわらず常に"定数"になるんでしょ? それならstaticにするのが自然。メソッドの場合も同様の考え方をする。 Test.を省略できるのは同じクラス内だから。そういうルールだから仕方ない。
110 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 22:53:14 ] >>107 書けてしまうのは文法的に誤っていないから。 文法的に誤っているということだがJLSのどこに書かれているの? static finalが付いているものは変更不可のクラス変数。 インスタンスごとの変更不可変数であればstaticは不要。
111 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 23:39:55 ] >>109 >>110 ありがとうございます! 自分のクラスのstaticフィールドにアクセスする場合は クラス名省略できるんですね。知りませんでした。 よく考えてみたらインスタンスごとの定数ってあまり考えられないですね。。 単純に例が少なかったのかな。
112 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 23:43:04 ] >>73 レスサンクス。 同じブラウザで一度フォームデータをsubmit、ブラウザの戻る、またsubmit っていう操作を何回もしていると、不定期でおきているから、 cookieが未設定とか、ブラウザで無効にしているってのはなさそうなんだよね。 CookieはsetMaxAge(-1)でブラウザが閉じられるまでは消えないから、有効期限ってのも 関係なさそうだし・・・。 Hoge test = new Hoge(HttpServletRequest); って感じで、Hogeクラスのprivateメンバに保持しておいて、 Hogeクラスのメソッド内で使おうとすると、時々nullになるんよ。 よくわからなかったから、メンバに持たせるのはrequestそのものじゃなくて、 コンストラクタ内でgetHeader("cookie")やってStringメンバに入れておくことにしますた。
113 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 23:43:40 ] 定数をインスタンス毎に持っても意味ないからstaticにするぐらいにしか考えてないぜ
114 名前:デフォルトの名無しさん mailto:sage [2008/11/20(木) 23:46:52 ] Javaが趣味って奴いるの? 個人レベルで何する気なんだ?Javaで
115 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 00:17:07 ] >>112 待て、おまえはServletにおけるオブジェクトのライフサイクルをちゃんと理解してるのか??? そのHoge testはどこに定義されている?
116 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 00:43:27 ] >>115 Hoge testはHttpServletのdoPost内でインスタンス化されて、 threadとして動いてます
117 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:10:01 ] スレッドってよくわかんねーーー スレッドセーフなクラスって何だよ… 横槍ごめんなさい。
118 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:19:43 ] >>116 よくわからん。該当部分のコードを見せろ。Hoge testの定義位置も含めて。 HttpServletRequest/HttpServletResponseの生存期間はHTTPのリクエストを受け付けてからレスポンスを返すまでってことは理解してるよな?
119 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 01:51:32 ] >>114 Javaが趣味でもおかしくはないと思うが それより、趣味の何らかの計算とか集計とかに使うと非常に便利>Java
120 名前:デフォルトの名無しさん [2008/11/21(金) 01:52:00 ] 引数の戻り値について、質問です。 class Cara{ int num; double gas; int setNum(int n){ num = n; System.out.println("車のナンバーを" + num + "にしました"); return n; } double setGas(double g){ gas = g; System.out.println("車のナンバーを" + num + "にガソリンの量を" + gas + "にしました"); return g; } void show(){ System.out.println("車のナンバーは" + num + "です"); System.out.println("ガソリンの量は" + gas + "です"); } }
121 名前:デフォルトの名無しさん [2008/11/21(金) 01:57:03 ] class Sample_return{ public static void main(String args[]){ Cara car1 = new Cara(); car1.show(); car1.setNum(1234); car1.setGas(20.5); //戻り値 int nums = //←戻り値を代入したい double gass = //←戻り値を代入したい System.out.println("サンプルから車を調べたところ"); System.out.println("ナンバーは" + nums + "ガソリンの量は" + gass + "でした"); } } これらの、ソースで "int setNum(int n){" や"double setGas(double g){"のメソッドように 引数の受け取りメソッドに戻り値を付けて、返す事はできないのでしょうか? 要するに、引数の受け取り処理とreturnの処理を、同時に・・・ 因みに、そうした場合、どうすればいいかわかりません "//戻り値 int nums = //←戻り値を代入したい double gass = //←戻り値を代入したい " ご教授、お願い致します。
122 名前:120-121 [2008/11/21(金) 02:04:00 ] やはり、このように class Cara{ int num; double gas; void setNumGas1(int n, double g){ num = n; gas = g; System.out.println("車のナンバーを" + num + "にガソリンの量を" + gas + "にしました"); } int getNum1(){ //int型の値を返すメソッドです System.out.println("ナンバーを調べました"); return num; //呼び出し元に値を返します } double getGas1(){ //double型の値を返すメソッドです System.out.println("ガソリンの量を調べました"); return gas; //呼び出し元に値を返します } void show1(){ System.out.println("車のナンバーは" + num + "です"); System.out.println("ガソリンの量は" + gas + "です"); } }
123 名前:120-121 [2008/11/21(金) 02:07:29 ] class Sample_return{ public static void main(String args[]){ Cara car1 = new Cara(); car1.setNumGas1(1234, 20.5); int number1 = car1.getNum1(); //戻り値を持つメソッドを呼び出します、戻り値を変数numberに代入します double gasoline1 = car1.getGas1(); //戻り値を持つメソッドを呼び出します、戻り値を変数gasolineに代入します System.out.println("サンプルから車を調べたところ"); System.out.println("ナンバーは" + number1 + "ガソリンの量は" + gasoline1 + "でした"); } } 受け取り処理のメソッド"void setNumGas1(int n, double g){" 戻り値の処理メソッドは、"int getNum1(){" "double getGas1(){" のように分けないと、ダメなのでしょうか?
124 名前:デフォルトの名無しさん [2008/11/21(金) 04:02:00 ] 万能主義はあなたの方でしょw 実際は、シングルスレッドすることは全てのメソッドをsynchronizedにするのとほとんど変わりませんよ。 それにsynchronizedは同期のことでしょ?あなたはスレッドを分かってないようですね。 勘違いしているようですけど別にswingのスレッドとかの設計に文句があるんじゃなくて、 どうしてシングルスレッドにこだわるのかって事です。もともとswingはコンポーネントなのであってguiが前提なわけで、マルチスレッドで設計するものかと思います。 swingはピュアjavaというよりも全てpaintで済ますって理念なんで分からなくもないんですけど・・・
125 名前:デフォルトの名無しさん [2008/11/21(金) 04:11:01 ] >>95 通信の処理とかがGUIと関係あるかではなくて、処理の結果をGUI(のコンポネント)が受け取ります。 それで、計算や処理など既にハード上の能力は十分ですぐ結果が出ても、肝心の表示の方がイベントまちとか シングルスレッドで0.5...1秒待たされるようじゃそのコンポネント(swing)を使うにはストレスがあります。 たまに複雑なJTableでもあるでしょ、少しもたつくことが。 swing workerにもありますが、計算結果や通信結果の受信はguiと関係なので次のswing frameworkでは切り離したわけで、 だから描画とは関係ないeventやproperty fireとかもシングルスレッドにしてるのはどうしてなのかということです。 将来が予測できるかどうかじゃなくて、マルチスレッドにしてviewを独立させないことは自分自身で未来を潰しているようにみえませんか。
126 名前:デフォルトの名無しさん [2008/11/21(金) 04:33:04 ] >>99 伝統的に、イベント処理がシングルスレッド(シーケンシャル処理)だからですか。 なんかcui(今ではwebアプリとかサーブレットとか)ではThreadを導入していても、 gui(swingツールキット? invokeLaterなど)の設計の発想は昔のcのシーケンシャル処理・構造処理のままでOO指向じゃなかったんですね。 guiの(コンポネントじゃなくて)次のツールキット設計は、その古いシーケンシャル処理からの分離してコンポネント間の独立で 正しくOO指向のツールキットでしょう。最近guiやMVCなどの概念を使って、自作のコンポネント開発してみてるんですけど、 awtパッケージやawt.Toolkitはマルチスレッド設計ですよね?それで開発しているとよく気になって、swingは描画と 関係ない処理・イベント受付が絡み合ってるみたいなんでその辺りをすっきし指せれば別に遅くもないし、 透明かも擬似的に出来るし、逆に洗練され使いやすいんですけど。 SUNがswingに関心をもたなくなって次に向いている理由もなんとなく分かります。
127 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 08:44:26 ] >>126 お前は、Sunが何故GUIのマルチスレッド化を諦めたのかをちゃんとしらべたほうがいい。 AWTは失敗だった、マルチスレッドでGUIを「正しく」実装するのは現実的には不可能だ、と言ってるんだから。
128 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 09:23:05 ] AWTはマルチスレッド対応じゃねーし、 マルチスレッド対応だから失敗したわけじゃないでしょ。
129 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 10:59:18 ] こんなGUIのフォームを作りたいんですが、 その中でいくつか質問があります。 テーブルA ボタン テーブルB ID Name ID Name [1 ][A ] [1 ][E ] [2 ][B ] (追加) [2 ][F ] [3 ][C ] (削除) [3 ][G ] [4 ][D ] [4 ][H ] 1.テーブルID項目は非表示にさせたいけどできますか? 2.テーブルAセルを選択した状態で追加ボタンをおしてテーブルBに追加したいんですが、 選択したセルの情報を取得する方法はありますか? 以上です。よろしくお願い致します。
130 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 11:16:02 ] >>129 できますか、ありますかといわれたら、できますありますと答えるしかないw
131 名前:デフォルトの名無しさん [2008/11/21(金) 11:19:12 ] >>130 やり方を教えてほしいです。
132 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 11:23:06 ] あげてすいませn
133 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 11:27:23 ] Java低速GUI Swing 8 pc11.2ch.net/test/read.cgi/tech/1227234261/
134 名前:31 [2008/11/21(金) 11:35:33 ] エクリプスにアプレットプラグイン追加してやってみたのですが >>32 と同じエラーがでます。 どうやら画像が読み込めてないようなのですがどうしたらいいのでしょうか?
135 名前:デフォルトの名無しさん [2008/11/21(金) 11:44:25 ] >>127 SUNはどうしてGUIのマルチスレッド化を諦めたんですか? GUIとマルチスレッドはあまり関係ないんで当然だと思うんですが、何を正しく実装するんでしょうか?
136 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 11:51:34 ] 起きたばっかりで書き込んで所々重大な誤字がありますね。 少し誤解があるみたいなんで直しておきましたw 計算結果や通信結果の受信はguiと関係ないので、次のswing frameworkでは切り離したわけで、 古いシーケンシャル処理からの分離してコンポネント間の独立で、まさしくOO指向のツールキットでしょう。
137 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 12:01:27 ] それでJavaFXの方はJavaとは独立してリッチ何とかと宣伝してるんでけど、結局は新しいツールキットなんですか? それともswingみたいなコンポネント(デベロパ)の延長なんでしょうか? nativeピアで透明化が可能なawt.Windowが(ネイティブ依存でも)取得できれば、 awtとjava2d,3dでなんとでも出来る感じがしますけど。ただswingがなくなる事はないでしょうけど、 java seはOS依存と思われるシステムトレイもサポートしたので、そのうちそんなwindowの取得も出来るんでしょうか。
138 名前:31 [2008/11/21(金) 12:08:34 ] 読み込み方法を変えたら無事に動きました。
139 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 13:02:16 ] >>126 webアプリがマルチスレッドになってるのはwebアプリにはクライアントが複数あるから。 基本的には 1クライアントに対して、一度に 1スレッドしか動かないようにするわけで。
140 名前:デフォルトの名無しさん [2008/11/21(金) 13:25:22 ] それと同じような構造でgui toolkit frameworkを作ればいいんじゃないですか? 今のハードならスレッドにしたところでたとえすべて同期にしたとしても全く問題ないわけで。 webやデータベース問い合わせはすぐ処理が終わりますが、paintは少し計算が必要なだけでそんなのは今のハードなら屁でもないでしょw 今の時代のguiコンポネントは、テキストフィールドとか情報表示程度なので多少もたつく程度であまり気にならいのでしょう。 プロパティ更新などのイベントとpaintは全く関係ないのでこの辺りを切り離なせばswingはかなり有用なコンポネントになるんじゃないでしょうか。 問題もわかったことなので作るのはそんなに難しくはないのですが、どっちにしてもこんな根底部分の機構は私一人ではどうにもならないものなので、誰かjava.net辺りのプロジェクトで提案してリードしてくださいなw
141 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 13:32:07 ] 不満があって知識があって明確な目標があるのに何で自分で実装して提示してみないんだろう。 最初から実用に供することのできるGUIフレームワークなんか期待していないけれど、 スレッドセーフな小規模実装を出して技術的実現性とその有用性を示して見せれば否定的意見は減ると思う。 俺としてはGUIのスレッドセーフ化をsunが諦めたのは分からんでもない。
142 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 13:33:58 ] 言いだしっぺがやるべき
143 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 13:38:11 ] >>140 それを自分自身で提案すればいいじゃないか 文句を垂れてみせるだけでもいろいろ意見が出てくるはずだぜ だれも>>140 自身にコード書いてみせろとは言わんよ
144 名前:31 [2008/11/21(金) 13:40:14 ] プログラムは>>31 と同じです。 画像を変更したら、うまく赤い枠で囲むことができなくなりました。 もっと精度よく検出するにはどうしたらいいでしょうか? 実行した画像 www2.uploda.org/uporg1799104.jpg
145 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 14:08:09 ] Executors.newSingleThreadExecutor();で処理すれば マルチスレッドの勉強しなくてもよくない?って思ったんですけど 考えが甘いですか?
146 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 14:21:16 ] 勉強しないで取捨できるって天才だな
147 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 14:21:38 ] 例えば メッセージ: 「実行時にフォーマットを行いますか?」 ラジオボタン: 「はい(デフォルト)」「いいえ」 ボタン: 「実行」 なんてダイアログがあって、次のイベントが入ってくるとします。 (1)「ラジオボタン[いいえ]をクリック」 (2)「[実行]をクリック」 この場合、入力イベントがシーケンシャルに処理されるのであれば (2)のイベントを処理する段階では(1)が既に処理されている事を概ね 仮定出来ます。ラジオボタンの現在状況を気にせず、選択状態を示す 内部変数を参照して処理を開始できます。 ところが、このラジオボタンはとても重要なので"シャッキーン"とか 派手なビジュアルエフェクトの後に内部変数を[いいえ]側に倒す実装の 場合はどうでしょう。 となると[実行]ボタンの側では処理を開始する前に、ラジオボタン等々の 処理内用に関連する全てのGUI部品向けのイベントが全て処理済みで あるか確認する必要があります。 もし個別のGUI部品が非同期にイベントを受領して処理する事が可能 なのであれば、プログラマは常に部品間の依存関係に注意して適切に ロックなどを設計する必要があります。これが結構大変。 あるいは、高度なユーザーであれば、ダイアログボックスの生成に要 する0.5秒より短い時間でいいえ「付近」と実行「付近」をカンでクリック してくるかも知れません。 ラジオボタンの生成やpaintが完了する前に[実行]ボタンがイベントを 受領してしまうと、どうでしょう。
148 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 14:22:41 ] いずれにしても上記の(1)->(2)というイベント「順」で表現された 「フォーマットはしないで、実行」という「文脈」を正しくとり 扱う必要があります。GUIの側は非同期処理で実装されていてもOK ですが、その処理内容は常に上記のイベントの入力順番を意識する 必要があります。 まとめると、ユーザー操作のイベントは個々が単発で存在している のではなく、「[いいえ]をクリック」「[実行]をクリック」とその イベント列で表現された文脈の中に存在しています。 さらにGUIを持つアプリケーションは、多くの場合内部状態をもって いるステートフルなアプリケーションです。 ステートフルなアプリケーションは非同期に入力されるイベントを 適切に取り扱うためにキューやロックを慎重に設計する必要がある、 これはGUIのみならずアクセンスカウンターからAmazonに至る 全てのウェブアプリケーションについても同じ事です。 ただGUIは内部状態の更新を引き起こすイベントの粒度がウェブに 比べより細かく、数も多いです。 また前述のようにイベント列は文脈をもっています。 この問題に対してイベント列をキューにためて順繰りに処理を行う 方法がプログラマが管理しやすい「現実的な」解として長らく支持 されてきたのだと思います。 もし現在の実装よりマルチスレッドなGUIツールキットの開発を目指 しているのであれば、個人的には入力イベントの文脈依存性をどの ように取りさばくのか、その実装アイデアに興味があります。
149 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 14:57:13 ] >>147 一つのアイデアとして、そういうことはやらない、ってのはどうかな?
150 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 15:27:18 ] >>147 1.フェイルセーフの観点からは、「フォーマットしない」をデフォルトにすべき 2.内部変数のセットは、「シャッキーン」の前に実行すべき
151 名前:デフォルトの名無しさん [2008/11/21(金) 16:23:06 ] >>150 いや・・・全くそのとおりなのですが・・・ 要はイベントの入力順を気にせず処理できるものからパクパク 処理していくと時に致命的な結果を招きかねませんよ、という事を 説明するために無理矢理作った例です。寝ないで考えたのに〜。
152 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 16:29:09 ] マルチスレッドGUI君は、自分の答えやすいレスへしか返事してないな。 なんというチキン。
153 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 16:49:31 ] >俺としてはGUIのスレッドセーフ化をsunが諦めたのは分からんでもない。 デッドロックとかも心配しるようですが、スレッドセーフは同期の問題なので、guiのpaintとは全く関係ありませんよ。 これでもまだ分からないなら、たぶんスレッドの本質部分があまり分かってないんじゃないでしょうか。 少なくともguiやpaintを上手く設計したところで、デッドロックがなくなるわけではないでしょw せっかくOO指向をサポートしている言語なのに、paintを従来型のツールキットにあるイベント処理(ロジック)か何か勘違いしてるんでしょうね。
154 名前:デフォルトの名無しさん [2008/11/21(金) 16:57:41 ] >>147 たぶんそれは、jsr提案で次のswing frameworkにあるSwignWorkerで分離してると思うんですけど。 イベント処理つまりイベントのデータの取得、計算、結果の過程と、描画paintを区別・分離した実装 のことを書いてあるんですがお分かりになりませんでしたか? 実装にもよると思いますが、OO指向的には、計算とその表示は別に連動している必要はありませんよ。 どうしても連動させたいならsynchronizedでしょうかね。といってもスレッドのことわかってないみたいなんで、 そういう方はリンク先にもありましたけど、you do not have to understand the thread or sync deeply.とかなんですかねw
155 名前:デフォルトの名無しさん [2008/11/21(金) 17:11:25 ] >>148 あなたに技能があり、そのようなツールを開発してたりオープンソースに多少でも関係してるなら答えてもいいんですけどね。 というよりも、もし個人そういうことをやってたり考えてるなら、オープンソースのグループに参加してみると今までのあなたの狭い見識が一気に変わりますよw 私が見たところ、従来型のシーケンシャル処理とイベントキューから抜け出せず、さらに計算結果とその表示を連動させようと四苦八苦しています。 まさに、cuiやcの時代の思考方法でしょうかw >さらにGUIを持つアプリケーションは、多くの場合内部状態をもって いるステートフルなアプリケーションです。 例えばこの一文でも、OO的な極端なところでは、その内部フィールドを全てクラスにして同期にすればなんとでもなりますよw イベントキューの順次処理はそれが一番単純で確実で実装も容易なので問題ないのですが、 この順次処理とguiのpaintは連動している必要はないので、そういった発想の転換が求められてるんじゃないですか? アイディアとかも、別に私より上の方々が既に実験実装してるんで、そっちに参加した方が面白いですよw java 2d程度の数学知識があれば、flushのライブラリとかも普通に作れるし、そんなに難しくないんですけど、 とにかくイベントキューでpaintがもたつくのは数学では解決できずawtやswingなどツールキットの問題です。
156 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 17:39:39 ] swingの設計について不満があるのはわかったが、 ここで何を言っても開発者に届くわけじゃないし意味ないと思うよ
157 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 17:48:28 ] swingの開発者にこんな訳分からんのが届いちゃってもマズいと思うが。 時間の無駄だしストレス増加するだろうし。 swing開発者がハゲちゃったらどーすんだよ。
158 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 18:04:23 ] >>155 う〜ん、なので私自身は最初に「伝統です」と答えたのです。 正直あなたがどの程度の知識を持ち合わせているのか分からなかった ので、「どうしてそのような伝統なのか」という事情を具体例を挙げて 説明しようと試みました。 どうやら完全にスキルを読み違えた返答になってしまったようで申し訳 ありません。 確かに私はGUI方面からは暫く離れた古い人間で、しかも当時の専門 はどちらかというとVRとかいったやや特殊な表示方面でした。 ちょっと昔の事例ですが、CaveLib辺りを弄くっていました。 で、同期には大変苦労しました。 確かに仰る通り計算と表示は必ずしも同期する必要はありません。 (特にVRでは「しない」前提でないと設計できない事が多いです) 問題は、ユーザの操作シーケンスと計算(というかアプリケーションが 実現する処理一般)の内容は一致させる必要がある、という点です。 で、これを実現するためには描画は別CPUに丸投げ、とは案外いか ないなというのが実感でした。 少なくとも再描画周りであればLayoutまではきっちり首に縄を付けて おかないと、「座標xyzをクリック」というイベントを「部品Aをクリック」 といった論理イベントに解釈するところで大いにハマります。 でも分散しないとフレームレートが上がらない、ので苦労しました。 なので、仮に最近のOOを用いたアプローチでより洗練された設計 モデルが実現されているのであれば大変興味があります。 (興味、ですよ。今はこの分野からは離れているので。) もしある程度確立したモデルがあれば教えていただけると幸いです。 あるいは参考になる実装なりプロジェクトがあれば幾つか挙げて もらえないでしょうか?
159 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 18:05:52 ] なんで2chでやるかな
160 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 18:13:46 ] やっぱSwingよりSWTだよね! ・・・SWTに詳しいサイト教えてください><
161 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 18:14:28 ] 「Java並行処理プログラミング」に、その辺の事情が説明されている イベントドリブンモデルでは、リソースに適切な順序でロックをかけるのが非常に難しい Swingも当初はマルチスレッドを狙ったらしいが、 途中で無茶だと分かりシングルスレッドに変更とのこと 「マルチスレッドのGUIフレームワークは、非常に慎重に設計すれば無理ではないだろうが、 マルチスレッドの専門家しか扱えない代物になるだろう(大意)」とは、Sunの偉い人の弁
162 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 19:33:38 ] >>161 どこで読んだか思い出せず、よーやく発掘したと思ったら先を越されたorz まー、これだけでは何なので、p.214より一部抜粋。 > マルチスレッドのGUIフレームワークを作る試みは過去にいろいろありま > したが、どうしても競り合い状態やデッドロックの問題に付きまとわれる > ので、結局全員があきらめてシングルスレッドのイベントキューを使う > 方式に落ちつきました。《略》(AWTは最%8
163 名前:162 mailto:sage [2008/11/21(金) 19:37:11 ] 途中で切れたorz 以下続き。 >《略》(AWTは最初、相当本格的なマルチスレッド > アクセスをトライしましたが、その失敗の経験に基づいてSwingはシングル > スレッド方式になりました。) 何故うまくいかなかったかについては、上記以降のパラグラフに書いてある が、ここに引用するには量が多いので、詳しくは該当書籍をあたってくれ。 まぁ、上記の問題については、>>140 が画期的な案を持っているようだから、 ここで開陳すると乗ってくるやつがいるかもしれんぞ。過去のGUI専門家が 皆諦めたくらいだし。
164 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 20:09:19 ] おまいら、 >実際は、シングルスレッドすることは全てのメソッドをsynchronizedにするのとほとんど変わりませんよ。 こう書いてある時点で、釣りであることに気づけ。
165 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 21:05:38 ] マルチスレッドなGUIのメリットってなんだろ?? シングルスレッドなデメリットってほとんど回避できそうなんだけど。
166 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 21:32:02 ] 結局そこに尽きる 苦労しても実入りが少ないから誰もやらない
167 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 22:52:17 ] >>135 素人考えだが、マルチスレッドにしたらそれぞれがフリーダムに動いて フリーダムなの動きがお互いに悪影響で、 それを回避するためにあれこれしてたらあはーんなんじゃないだろうか
168 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 22:56:38 ] どうでもいいことで盛り上がってるな!
169 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 23:38:36 ] マルチスレッドはマルチコアと関係ありますね?
170 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 00:27:36 ] >>118 今手元に無いのでちょっと出せませんが >生存時間 これを理解してなかった・・・。 Hoge testが動き始めたときには、すでに呼び出し元の Servletはレスポンスを返し終わってるから、だめってことか。 ありがと
171 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 02:34:23 ] オブジェクトの再利用ってのは test a = new test() test b = new test() っていう風に同じオブジェクトをインスタンスしたということですか?
172 名前:デフォルトの名無しさん [2008/11/22(土) 02:37:47 ] スレッドだいぶ勉強したんで、なんかソースみたいんだけど あんまりネット上にないね。マルチスレッドを実務でつかうことも ほとんど俺の場合ないから、無駄というか、不満なんだ。 スレッドを使った面白いアプリを組んでみたいなあ。だれかソースくれ。
173 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 02:39:31 ] >>171 毎回newし直さずに一度newしたインスタンスをずっと取っておいて何度も使いまわすことを指すんだと思いますが
174 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 03:16:32 ] >>172 つWebサーバ ……に限らず、Javaで書かれたサーバ系のソフトはふつーマルチスレッドと思われ。
175 名前:デフォルトの名無しさん [2008/11/22(土) 04:53:56 ] >>158 VRというと1995年頃のあれでしょうか。 たぶんどんなに有用なりソースを紹介したところで、あなたの脳みそが順次処理(フローチャートw)に染まってるようなのでいくらUMLやOOを勉強しても無駄だと思います。 今でもまだ理解が足りませんが、私もOOの発想に切り替えるのに苦労したんでw 今教えて差し上げられる事は、先も書きましたがVRっぽくいえば、「大量の頂点座標の計算結果は、とくに描画せずに破棄してもよい」ということでしょうか。 ただ、同期しないといけないところは当然そのオブジェクトが有機体として一つになっているので、 例えば、首は右を向いた(イベント)なのに、胴体だけはpaintが追いつかず、表示しても首が180度回っちゃっているオーメンの呪われた少女wみたくなってるわけです。 これは、上のswingのように、胴体だけは座標計算は終わっているがイベントキューのためにpaint命令がつまっていてpaintが追いてないわけです。 ただこれも解決法がいくつもあるんで、こういうのは(数学上・手続き上で解決できる程度の)アルゴリズムとかですかねw 従来と同じ問題がありますが、100人でやる2人3足のように、そういう足が遅いものは他のオブジェクトからすると迷惑だと思いませんませんか?
176 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 05:25:20 ] >問題は、ユーザの操作シーケンスと計算(というかアプリケーションが 実現する処理一般)の内容は一致させる必要がある、という点です。 3Dとか複雑なアプリを作るぐらいになっているなら、プログラムをその場しのぎの独学でやるんじゃなくて、 ちゃんと数学知識の裏づけを持って作ってみたらどうでしょうか。 たぶんこの一文から見てもあなたは小技をいっぱい知ってるが・・・って程度なのが分かります。 例えば、1秒で60フレームとかにこだわらず、10フレームでいいんじゃないでしょうか。それが今のソフト上の限界なのかもしれませんが、あなたの発想は、数学ではなくて、その限界を飛び越えようとする哲学か何かをもってるんじゃないですか? しかしその小技もシーケンシャル処理だと通用しても、オブジェクト指向だとまったく通用しなくなるんで、その辺りの発想が抜けてないんじゃないかと思います。 別に小技がダメだとかOOがいいんだとか言うのじゃなくて、class数が多くなったアプリだと一人のデベロパがそれを理解することや管理するのが不可能で、もう既にシーケンシャルの発想のままじゃ無理ですよ。 >なので、仮に最近のOOを用いたアプローチでより洗練された設計 javaなら、javafxとかですかねwまだアルファみたいですけど、このプロジェクトが完全中止になる事はないでしょう。 他には、頑張ってるみたいですけど、adobe flashとかも正当な2d guiの進化をしている気がします。
177 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 05:26:47 ] >イベントドリブンモデルでは、リソースに適切な順序でロックをかけるのが非常に難しい だから、コンポネントを「情報表示のコントロール」と考えるとイベントと連動する発想で実装したくなりますが、 「コンポネントは独立していて、一種のアニメーションである」とかだと発想も変わるんじゃないですか。 旧来の発想ではいくらハードが進化しても描画イベントまち(paint)でもたつくわけで、これはソフト(toolkit)の描画機構の問題です。 つまり「コンポネントはイベントと連動して表示しなければならい」という発想が今の限界になってるんじゃないでしょうか? これだけ問題点が出てきてるんで、後はこれを解決するような設計や機構をUMLとかで作るだけですよw いくらguiが2dや3dを容易に扱えるようになっても、情報結果表示専用コントロールなどといった発想のままでは今後もテキストエリア程度のまま次の10年がすぎるんじゃないかなと思います。
178 名前:デフォルトの名無しさん [2008/11/22(土) 05:31:11 ] 質問させて頂きます。 仮に KeisanというClassに public int add(int x, int y){ return x + y;} というメソッドがあるとし、このメソッドをKeisan以外のクラスで使用するにはどうすればいいのでしょうか。 よろしくお願いします。
179 名前:デフォルトの名無しさん [2008/11/22(土) 05:45:42 ] なんか勘違いしてたのですが、オーメンじゃなくてエクソシストの少女でしたw 最後は神父さんが興奮のあまり2階の窓からダイブしちゃうアレですw images.google.co.jp/images?gbv=2&hl=ja&q=%E3%82%A8%E3%82%AF%E3%82%BD%E3%82%B7%E3%82%B9%E3%83%88&btnG=%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E6%A4%9C%E7%B4%A2
180 名前:デフォルトの名無しさん [2008/11/22(土) 06:09:00 ] >>178 インスタンス化してaddメソッド呼び出しするんじゃないの?
181 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 06:10:33 ] 並列処理の人もいるみたいなんでコメントしておきますが、 >イベントドリブンモデルでは、リソースに適切な順序でロックをかけるのが非常に難しい これもすぐにソリューションが浮かびますよw ただ私は仕事や専門でやってるわけでも報酬をもらってるわけでもないので、それをお答えするつもりはありません。 一番大事な事は、その問題の効率的・合理的な答えが存在することじゃないですか? たぶん、並列処理のツールを実際何かで使ってみたり、簡単なGCを実装してみたりすると、あなたもよいアルゴが浮かんでくると思います。 今作ってるのはグラフ理論ですかね。 bkv.so-net.ne.jp/ iv.xight.org/ みたいのでしょうかw というよりも、今までの私たちの発想になかった次世代のコンポネントの感じがしませんか?
182 名前:デフォルトの名無しさん [2008/11/22(土) 06:13:24 ] インスタンス化する方法を教えてください。もしくはTUTORIALなどのリンクなどでも結構です。
183 名前:デフォルトの名無しさん [2008/11/22(土) 06:14:51 ] new か?
184 名前:デフォルトの名無しさん [2008/11/22(土) 06:18:34 ] >>175 >たぶんどんなに有用なりソースを紹介したところで、あなたの脳みそが >順次処理(フローチャートw)に染まってるようなのでいくらUMLやOOを >勉強しても無駄だと思います。 またまた、そんな出し惜しみせずにw 無駄かどうかは自分で判断しますし、少なくともコードは読めますから、 まずは具体例を列挙してもらえると大変助かります。 特に「実験実装」事例に興味があります。 >>adobe flashとかも正当な2d guiの進化をしている気がします。 幸いFlashについてはFlexについてライブラリの構造やイベント処理周りに 関してある程度理解があります。これまでの議論と関連して、どの辺りが 特に優れていると感じられますか? 一つ気になったのは、重いイベントの破棄や、フレームレートの程度や、 コンポーネントと描画の連動の是非は基本的にアプリケーションの仕様 で決まるものであり、OO等の設計論とは別の問題ではないでしょうか。 もう一つ判然としないのは、マルチスレッドの適用範囲です。意図されて いるのは全体をざっくりMVCに分けたとして、MとVとCの間の結びつきを 非同期にすることを考えられていますか? それともV相当の部分もより細かく分割して、内部を非同期で処理する ことを目指されているのか、どちらでしょうか?
185 名前:デフォルトの名無しさん [2008/11/22(土) 06:30:10 ] >>182 Keisanクラスをimportして普通にnewじゃないかな? 間違ってたらごめん。
186 名前:デフォルトの名無しさん [2008/11/22(土) 06:56:04 ] jdkにあるdemoにグラフ理論のデモ・アプレットがあるので(先のリンクと全く同じものです) それを参考にしたらどうでしょうか。今までの考え方が全く代わりますよ。 flashはもともとアニメーションから始まっているってことを知っているなら、 今までのコンポネントの設計・利用の発想と全く違うし、 MVCは完全に分離されているって事が理解できるのかもしれませんw あなたのイベントに依存しているpaintモデルは、wikiの記事にもありましたがVCがくっついてるものですかね。 swingやツールキットの設計がOO思考じゃなくて従来のイベント処理を土台にしてるって事なので、 それを利用するアプリは否応なくイベントドリブンの作法に従わなければならないってことでしょう。 いま自作でグラフ論理ライブラリを作って実験してるところなのでなんともいえませんが、 仮にswingと全く逆のアプローチで、全ての視覚コンポネントをnew Thread(comp)としても、人間の感覚に触るようなストレス・コストはありませんよ。 それよりもpaint待ちの0.5秒問題の方がストレスな気がします。 VについてはSwingWorkerのようなソリューションで、内部の描画には触らないほうMVCの完全分離となるんじゃないでしょうか。 コンポネント・コントロール(extends java.awt.Component)は、自分でつくったもののみしかダメって訳じゃないでしょう。 最終的にはレイアウトマネージャの自作実装になるんでしょうけど、まだそこまで手が回らないんですが、 ネットではレイアウトマネージャの実装解説はあまりないですね。 ボタンとかリストぐらいなら、コンテナサイズ変更不可かつnull layoutでいいんでそんなに難しくないんですけど、これは一応guiですが実質的にコマンドライン・プログラムでしょう。 これだけヒントがあれば、必要最小でシンプルなadobe flashライブラリflexの自作などもそんなに難しくないでしょう。
187 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 08:17:45 ] 最近の情報視覚化やってる連中って「グラフ理論やってる」って自称するもんなのか?
188 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 08:21:12 ] >いま自作でグラフ論理ライブラリを作って ええと、ここは多分グラフ「理論」の事ですよね。グラフ論理だととても 意味が変わってくるので一応確認します。 つまりこれは、グラフ理論を用いて例えば描画にまつわる依存関係や 制約問題を解くライブラリという事でしょうか。 あるいはばねモデルによるインタラクティブなグラフ表示のような、 グラフ「を」描画するライブラリの事でしょうか。 TouchGraphやPrefuseといったライブラリに相当するものでしょうか? あとFlashがMVCに完全に分離されている、というのは正直どのような 視点から述べられているのか不明確です。MVCのそれぞれに対応する Flashの構成要素を具体的に示してもらえますか?
189 名前:デフォルトの名無しさん [2008/11/22(土) 08:24:02 ] >>185 Thanks!やってみる。
190 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 08:53:53 ] これ人工無能だったら良い出来だよな
191 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 09:06:18 ] 初心者の質問が無くなるから他でやれ
192 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 09:29:45 ] どこいっても迷惑がられると思うんだが
193 名前:デフォルトの名無しさん [2008/11/22(土) 10:07:23 ] デバッグってなんですか。
194 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 10:38:15 ] >>193 鞄の中身を取り出して、 要らない物があったら棄てて また入れ直す作業の事です。 あ、depackかorz
195 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 10:49:39 ] livedoorブログを使ってます。 Javaのソースコードをブログの記事に載せたいのですが 如何も奇麗に載せられません。 ソースコード HTML化 コンバーター「唐辛子」も 使ってみましたが奇麗に表示しません。 使い方が間違ってるのでしょうか? 何方かlivedoorブログでソースコード等を奇麗に表示されてる方及び、 奇麗に表示させる事をご存知の方教えて頂けませんか? よろしくお願いします。
196 名前:デフォルトの名無しさん [2008/11/22(土) 11:11:40 ] >>182 x = new Keisan(); int y = x.add(1, 2);
197 名前:訂正 [2008/11/22(土) 11:12:23 ] >>182 Keisan x = new Keisan(); int y = x.add(1, 2);
198 名前:デフォルトの名無しさん [2008/11/22(土) 12:38:48 ] >>188 あなたの文章を読んでいると、あなたは根っからのPG職人ってところですかねw もし興味あるなら、まずはGraphcis2Dを使えるように勉強したらどうですか? それと、あなたはいつまでも自分の意見を変えない宗教っぽい人だとおもんですけど、 一筆書き問題を計算して、その結果を表示する事、さらにどの位置にどのような表現で表示するかは、全く別ってことでわかるんじゃないでしょうか。 今作ってるライブラリは根底部分はjdk1.1のアプレットで動かすためにコレクションもMyHashtable, MyVectorとかで自作してるし、 classファイルが100を超えてるんで、UML知ってるかどうか以前にOO指向じゃないと一人では管理する事は明らかに無理です。 というか、こういう苦労話を聞きたいわけじゃないでしょw
199 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 13:24:55 ] 人工無能のソフトウェアパターンとして、 「はい」か「いいえ」かで答えられるような質問に対しても明示的に答えず、 駄文で文字数稼いで如何にも答えているかのように見せかける というのがあるのでしょうか。
200 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 13:27:55 ] >>186 お前、以前ここで、JFrameが数十回に1回白くなるのはバグだとか アホを晒してみんなに呆れられてた奴だろ?w
201 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 13:54:09 ] >>198 いやぁ、宗教ぽいというより、単に疑問点に対してしつこいだけですよw どうもあなたのレスの中には次々と新鮮な視点が提示されるため、それらに 対する疑問が解けないうちは意見も変えようが無いじゃないですよね。 特にFlashとMVCの対応は是非とも説明していただけると有り難いです。 これは個人的にはとても新鮮な視点で、故に理解が難しい点も多いです。 例えばFlash界にもCairngormやPureMVCといったMVCフレームワークが 存在します。しかしそもそもFlash自体が明確なMVC構造を持っているので あればこのようなフレームワークは屋上屋を重ねるものでは無いでしょうか? 一筆書きを解くのと描くのは別問題なのはその通りだと思います。 で、現在開発中のライブラリの目的はどちらなのでしょうか?