【初心者】Java質問・相談スレッド121【歓迎】at TECH
【初心者】Java質問・相談スレッド121【歓迎】 - 暇つぶし2ch1:デフォルトの名無しさん
08/11/17 01:09:54
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    URLリンク(pc11.2ch.net)
Webプログラミング URLリンク(pc11.2ch.net)
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 URLリンク(www.wikiroom.com)
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド120【歓迎】
スレリンク(tech板)

次スレは>>990あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
URLリンク(www.wikiroom.com)

2:1
08/11/17 01:10:36
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 7
スレリンク(tech板)l50
■ SWT は --
Java 高速GUI SWT 3
スレリンク(tech板)l50

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part18
スレリンク(tech板)l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 8
スレリンク(tech板)l50

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 66 ★★
スレリンク(tech板)l50

**** 開発環境が必要の場合は ****
■ J2SE 1.4.0
URLリンク(sdc.sun.co.jp)
■ J2SE 5.0 (1.5.0)
URLリンク(java.sun.com)
■ Java SE 6
URLリンク(java.sun.com)

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
URLリンク(www.java.com)

3:デフォルトの名無しさん
08/11/17 08:04:28
>>1
おは
おつ

4:はんしょう
08/11/17 08:30:39
JAVAのJBUILDER2005があり、ひとまずSampleを見ています(正直使っているという状態ではまだないのです)が、
JPX(プロジェクト)ファイルを再BulidするのとMakeをするのとがメニューにあります。
1:この違いはなんでしょうか?一見どうちらを選択しての既存のものは実行できるか
できないのか について言えば それらしいCGの絵は出ますので 変わりはなかった。
2:幾つかのサンプルの内、上のようにJbuliderで実行をすると絵が出ますので、実行できるようになるですが
Jbuliderのソフトを介さないで 実行できることはないでしょうか。
Javaは実行ファイル(正確な用語でないかもしれませんが)というものはないでしょうか?
例えばWindowsで言えば、拡張子.exeのファイルは直に、
あるいは FLASHの.swfファイルはIEで(ブロックは外して)開くことが出来る。同じflashの.flvファイルはWeb上で、起動ファイルを導入してしか見えない(Youtubeのように)。
JAVAはどうでしょうか?
3:それと.JAVAという拡張子ファイルはソースファイルと理解してよいでしょうか?



5:デフォルトの名無しさん
08/11/17 10:52:33
URLリンク(www.ibm.com)

ここを見る通り
null 代入はすでに過去のものどころかよくないみたいですね。
実際みなさんどうしてます?

6:デフォルトの名無しさん
08/11/17 10:58:31
>>4
jbuilder2005 は捨てて netbeans をオススメします。

1. rebuild→すべてのソースのコンパイル make→変更されたファイルのみコンパイル
2. VMにPATHを通してjbuilderでできたclassesディレクトリで実行してみましょう。java実行の仕方は調べてね。
3. うん、ソースファイル
4. 自分で検索を覚えないと、一生まともなプログラムは組めません

7:デフォルトの名無しさん
08/11/17 12:27:56
>>5
そこを見る通り
必要な場面では必要
不要な場面では不要

8:デフォルトの名無しさん
08/11/17 12:36:02
抽象クラスAのサブクラスがクラスB,クラスCであるときに、Bのオブジェクトを
Cのオブジェクトに変換する方法を教えてください。

9:デフォルトの名無しさん
08/11/17 12:51:02
>>8
無理。class B extends A を class C extends A には変換できない。

詳細がわかれば他の方法で逃げられるかもしれないけど。

10:デフォルトの名無しさん
08/11/17 12:58:50
Bのオブジェクトを元に初期化するコンストラクタをCに作ればいいんじゃね

11:デフォルトの名無しさん
08/11/17 13:14:22
>>10
よろしければもう少し詳しくお願いできますか。。。?java初心者でよくわからないので。。

12:はんしょう
08/11/17 13:47:19
>>6  ありがとうございます
> 2. VMにPATHを通してjbuilderでできたclassesディレクトリで実行してみましょう。java実行の仕方は調べてね。
VMはVirtualMachine? ホルダーClassesはあります。さて どうするか
もう一歩助言をおねがいします。 
確かに検索の仕方も JAVA 実行でしか
思いつかなくています

13:りょう
08/11/17 16:21:55
<input type="button" class="button" value="編集" onClick="editEmployeeInfo"(<bean:write name="searchList" property="employee_id"/>)
このonclickの所で、employeeId(社員ID)が送られるようになっているらしいんですが、
これをもとに自分のページで社員情報を取得するにはどうすればいいでしょうか?
断片的ですいません

14:デフォルトの名無しさん
08/11/17 16:52:02
annotationが全然理解できないんですが、お勧めサイトないっすか?


15:デフォルトの名無しさん
08/11/17 17:22:56
~ 3分で覚えるアノテーション ~
アノテーションはクラスやメソッド、フィールドなどにつけられるよ。 引数を指定することもあるよ。
@Foo(message = "hello")
public class MyClass { ... }

自作のアノテーションを作るときは @interface を使うんだ。 メソッドが引数に対応するぞ。
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface Foo { String message(); }

RetentionPolicy.RUNTIME が指定されていれば、実行時に取得できるよ。 リフレクションを使おう。
Class<?> c = MyClass.class;
Foo foo = c.getAnnotation(Foo.class);
System.out.println(foo.message());

これであなたもアノテーションマスター!

16:デフォルトの名無しさん
08/11/17 17:43:42
パネルに描画した図形をDeleteキーで消したいのですが、KeyListenerにフォーカスが当たってくれません。
getFocusOwner()を使ったところ、常にボタンにフォーカスが当たっている事が分かりました。
これを描画パネルに当てるには、どのようにすれば良いのでしょうか。

17:デフォルトの名無しさん
08/11/17 18:10:18
panel.setFocusable(true);
panel.requestFocus();

18:14
08/11/17 19:42:55

>>15
どうもです。
しかし、いまいち暗黙の部分が多くなって分かりづらいし、利点がよくわからないんですが。。


19:デフォルトの名無しさん
08/11/17 19:59:12
よくわからないものは必要になるまで放っておくのもひとつの手だよね。
必要になったら自然と理解できる

20:デフォルトの名無しさん
08/11/17 20:08:56
>>18
@Size(16) class MyData {
@Offset(0) int a;
@Offset(4) int b;
@Offset(8) long c;
}
のようにデータをバイト列にパックする際の情報として使ったり

class MyService {
@MsgId(7) void foo() { ... }
@MsgId(42) void bar() { ... }
}
のようにIDとメソッドを紐付けるのに使ったり

といった用途が例えば考えられます
しかし基本的にリフレクションを使わない人には無用

21:デフォルトの名無しさん
08/11/17 20:36:47
Javaをゼロから勉強したいのですが、良い本教えてもらえませんか?
プログラミング経験はないです。
お願いします。

22:デフォルトの名無しさん
08/11/17 20:39:36
>>21
デラべっぴん

23:デフォルトの名無しさん
08/11/17 21:08:12
来春から念願だったソフトウェア関連の会社に就職が決まりました。
JAVA言語をメインにソフト開発をしてるそうなんですが
自分自身のスキルからいって仕事についていけるかとても
心配です。今から勉強でもしておかないととても不安なので
実戦に役立つ書籍があれば紹介してくれませんか?ちなみに
SJC-A程度の知識はあります。

24:デフォルトの名無しさん
08/11/17 21:35:32
>>15
リフレクションですか。
ちょっと勉強してみるっす。thx.

25:16
08/11/17 22:03:57
>>17
出来ました。
有難うございます。

26:りょう
08/11/17 22:33:01
未経験 研修中の者です。
eclipse , Tomcatを使用して、
社員情報管理システムの一部を課題として作成してくれとの事で設計書を渡されました。
自分の担当は社員情報の編集ページで、
社員一覧ページの「編集」ボタンから自分のページに飛び、編集ページで内容を変更したら、
DBに変更したデータを送るという部分の作業をしています。

その中で、社員一覧ページの
<script>
function editEmployeeInfo(id){
document.editForm.employee_id.value = id;
document.editForm.submit();
}
</script>
  省略
.
.
.

<input type="button" class="button" value="編集" onClick="editEmployeeInfo"(<bean:write name="searchList" property="employee_id"/>)
ここの部分で、編集ボタンを押すと社員ID(employee_id)が渡されるようになっていて、
それを利用してその社員の情報を自分の画面の初期表示として表示させたいのですが、
"editEmployeeInfo"(<bean:write name="searchList" property="employee_id"/>)
自分のページでeditEmployeeInfoをどう使えばいいのか分からない状況です。
教えていただければと思い書き込みしました。
よろしくお願いします。


27:デフォルトの名無しさん
08/11/17 23:39:27
>>26
意地悪に響くかも知れないが、「Java」と「JavaScript」の違いは把握してる?


28:デフォルトの名無しさん
08/11/18 02:16:39
Fileクラスの

listFiles() とlistFiles(FileFilter filter) を使ってみたんだけど。

listFiles() だとマイコンピュータとか、マイネットワークを取得できるのに。
listFiles(FileFilter filter) だと取得できないんだ。

FileFilterの中で、自分が作ったソースがはじいてるのかな?とも思ったんだけど、
FileFilter#accept(File pathname)に、マイコンピュータとかマイネットワークが入ってこないんだ。
ふしぎふしぎ

listFiles(FileFilter filter)でマイコンピュータとかマイネットワークを取得できる方法誰か知らないっすかね?

29:デフォルトの名無しさん
08/11/18 04:32:41
>>28
デスクトップ用の情報が取れる ShellFolder extends File ってのがあって、
それだと listFiles() は上書きされてるからマイコンピュータとか取れるはず。
でも ShellFolder でも listFiles(FileFilter) は上書きされないから
通常の File 使ったときと同じでマイコンピュータとかは取れない。

30:デフォルトの名無しさん
08/11/18 08:16:53
>>29
なるほど、Fileだと思って使ってたオブジェクトはShellFolderだったのか。

ありがとう、諦めて自分でいらない物はじくことにします。

31:デフォルトの名無しさん
08/11/18 10:54:53
URLリンク(codezine.jp)

↑のプログラムを実行するとウィンドウがでてアプレットが開始されました。
っとでるんですが、何も実行されません。
同じフォルダにFaces、Temp画像を入れているのですがどうすればいいでしょうか?

32:31
08/11/18 11:49:00
エクリプスで起動したら以下のようなエラーがでました。

Exception in thread "AWT-EventQueue-1" java.lang.NegativeArraySizeException
at Template.searchMatching(Template.java:151)
at Template.paint(Template.java:224)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

よく原因がわからないので教えてくれませんか?

33:デフォルトの名無しさん
08/11/18 12:00:40
画像を読み込めてないんじゃね

34:デフォルトの名無しさん
08/11/18 12:01:22
>>23
就職オメ
会社の方針も様々だろうから、
読んで安心できるような書籍は一概には言えないんじゃないだろうか
来春からなら時間ありまくりだから、
自分でプログラムを組みながら学ぶのが一番。
いくら本を読んでも実際に身に付いてなきゃ意味が無いのもあるし、
作ってる課程で、行き詰まっても自力で調べる力が身に付くから。
多少知識が無くても自力で調べられれば怖いもの無し

と、相談スレにこんなことを書いてみる

35:デフォルトの名無しさん
08/11/18 12:15:23
まずは足腰鍛えるのと同じく基礎固めが大事だからなぁ。初心者用のCの本を軽く一通り読んどいた方がいいかも

36:デフォルトの名無しさん
08/11/18 14:15:44
>>23
とりあえず2ちゃんブラウザを作ってみればいいよ。

37:デフォルトの名無しさん
08/11/18 17:08:03
ブラウザかどうかはともかく、目標があるのは良い事

38:デフォルトの名無しさん
08/11/18 21:05:36
このパッケージを使うとこんなことが出来るインデックスは結構あるんですが
こんなことをしたい場合に、このパッケージが使えるインデックスってどっかに
まとまってませんか?

よその言語から入ってきたとき
「何をどう使っていいかようわからん」
状態を解消する気はないんでしょうか? > Java コミュニティ

# つか, OO 言語全体的にそんな気がするが………


39:デフォルトの名無しさん
08/11/18 21:59:51
ググればいいじゃない

英語で

40:デフォルトの名無しさん
08/11/18 22:04:56
むしろOOではない言語だとそんな気がしない理由を書いてもらえると
具体的にどんなものを求めているのか伝わりやすいのでは。

41:28
08/11/18 22:16:11
>よその言語から入ってきたとき
>「何をどう使っていいかようわからん」

こうならない言語ってあるんですかと、逆に聞きたいです。

しかし>>29はすごいなぁ、FileSystemView#getRoots()で、
File[]を貰って何も疑問に思わないで使ってたのが恥ずかしくなったでござる。

42:デフォルトの名無しさん
08/11/18 22:20:16
ただいまサーブレットの勉強をしています

perform()メソッドがよくわかりません
ご教授お願いします

43:>>42
08/11/18 22:25:25
すいません
perform()メソッドは参考書独自のメソッドでした('A`)

44:デフォルトの名無しさん
08/11/18 22:49:32
performメソッドなんて典型的なダメ設計(もしくは命名)じゃね?

45:デフォルトの名無しさん
08/11/19 00:42:59
>>38
GOF本とかのデザインパターン関連書籍がいいんじゃないか?

46:デフォルトの名無しさん
08/11/19 05:39:03
>>40
C とかアセンブラだと、ほとんど何もないので何かしようと思った場合、それ
に見合ったライブラリを作るなり、どっかから引っ張ってくることになるわけ
だが、その過程で双方向のインデックスができるんだわ

最近の OO 言語の場合、最初から結構膨大な量のライブラリがくっついて来る
ので、何かをしたいと思ったときに何かに対応するライブラリはどれって話に
なる。

つか、使い続けてればそのうち出来てくるんだろうけど、俺の場合、OO言語使
う時って、たいてい消化作業に呼び出された場合なんでインデックスできるま
での期間付き合い続けないってのが原因なんだろうけど………

man -k だとか apropos に相当する機能が "JDK(TM) ? ドキュメント" に付
いてれば問題ないような気がする


47:デフォルトの名無しさん
08/11/19 09:01:38
javadoc読み込んでindexでもabstractでも何でも好きなもん生成するソフト作ればいいんじゃね?

48:デフォルトの名無しさん
08/11/19 09:24:17
>>46
たとえば "site:URLリンク(java.sun.com) hogehoge" でぐぐるとか、
google とかサイト内検索できるところで
公式サイトに置いてある javadoc に検索かけるんじゃだめなん?

49:デフォルトの名無しさん
08/11/19 10:11:38
>>47
火消しに行ってそんなもんかまってたら絞め殺されますぜ

>>48
> 公式サイトに置いてある javadoc に検索かけるんじゃだめなん?
作業現場が隔離されている状況だとそうもいえんだろ


50:デフォルトの名無しさん
08/11/19 10:18:11
インデックスできるまでとは何の事?
もしかしてstrcut構造体のあれとかなのか?w

51:デフォルトの名無しさん
08/11/19 10:59:53
>Java質問・相談スレッド119_920
>CSS Validator(URLリンク(jigsaw.w3.org))をAntで
>コンパイルしたいのですが、antを実行すると以下のようなエラーになってしまいます。

 古い話ですみません。
 ダウンロードのページにある以外に、

 commons-collections-3.2.1.jar
 velocity-1.5.jar

をダウンロードしたら、とりあえずANTは通りました。
 でも、実行すると、mainが見つからないとか言い出すのですが。 

52:デフォルトの名無しさん
08/11/19 12:27:47
URLリンク(www.ne.jp)
ここのサイトでundoの勉強をしてるのですが
自分のテキストエデターに組み込んでもundoされないのです
ほぼソースを丸写ししてるのですが
このページに載っていること意外で何か忘れがちな事ってありますか?

53:デフォルトの名無しさん
08/11/19 12:38:41
>>52
「ほぼ」って書いているので、そこが原因だろうな。

54:52
08/11/19 12:46:40
JTextFieldをJTextPaneにしているのがいけないのですかね
もうちょい試行錯誤してみます

55:デフォルトの名無しさん
08/11/19 16:15:47
初心者から中級者の間だけど、サンプルソース打ちながらやってみて面白い本をおしえて。
サーバサイドJavaは無しで・・

56:デフォルトの名無しさん
08/11/19 16:37:36
あるpngファイルAを読み込み、別ファイルBを生成するプログラムを作ることになりました
以下現プログラムの該当部分です

Iterator readers = ImageIO.getImageReadersBySuffix("PNG");
ImageReader reader = (ImageReader)readers.next();
ImageInputStream iis=ImageIO.createImageInputStream(file);
reader.setInput(iis);
BufferedImage bi = reader.read(0);
Raster raster = bi.getData();
Object obj = raster.getDataElements(0,0,raster.getWidth(),raster.getHeight(),null);

最終的にはObjectをImageIOに食わせてデータ取得できるらしいですけど、
createImageInputStream、getImageReadersではなしのつぶてでした
どのメソッドを使えばいいのか教えて下さい

57:デフォルトの名無しさん
08/11/19 19:22:56
>>56
こんな感じでいいんじゃない

BufferedImage bi = ImageIO.read(fileA);
int w = bi.getWidth(), h = bi.getHeight();
int[] rgb = bi.getRGB(0, 0, w, h, null, 0, w);
・・・・
bi.setRGB(0, 0, w, h, rgb, 0, w);
ImageIO.write(bi, "png", fileB);

58:56
08/11/19 19:43:11
>>57
すっかり言及を忘れてましたが、Bはpngではなくバイナリファイルなんです
>>56プログラムのObjectを何らかの形に変換し吐き出すと思われるのですが、
そこで使用するのがImageIOらしいです

とりあえずおとなしく直に聞くことにします
お手数おかけしました


59:デフォルトの名無しさん
08/11/19 23:21:40
プログラミングに関係ないですが
ブルーレイを購入しようググっててBD-Jを知りました。

で、色々な情報があって混乱しています。

1.まず「BD-Jはブルーレイの仕様でブルーレイプレイヤーなら必ず使える」という情報。
 ・・とすると、PS3やDiGA等でもJavaを実行できるということ?

2.「最近のシステムアップデートでPS3でBD-Jが使えなくなった」という情報
 ・・あれ?BD-Jはブルーレイの仕様なのにPS3はBD-Jが使えなくなったってどういうこと?

思ったのがもともとPS3はUSBからBD-Jが起動できたらしいが、単にこれができなくなったってことでしょうか?
ブルーレイディスクにBD-Jアプリを焼けば現在でもPS3でBD-Jが実行できるのでしょうか?

ご存知の方いましたら教えてください

60:デフォルトの名無しさん
08/11/19 23:32:14
質問です。

HttpServletRequest#getHeader("Cookie")を使用すると
たまーにnullが帰ってくることがあるんですが、どうしてなんでしょうか?

61:デフォルトの名無しさん
08/11/19 23:44:33
凄く初心者な質問をさせてください。
関数ってどういう基準で分割していくのが良いとか基準があるのでしょうか?

自分で書いてたコードなんですが初期化処理Init()の中で更に
ボタンの初期化InitButton()、メニューの初期化InitMenu()とか、
機能毎ってよりコンパクトにまとめるのを目的に小さくするのって
(しかもここでしか絶対使われない)どうなんだろうって気になりました。

62:デフォルトの名無しさん
08/11/19 23:54:02
>>61
Javaに限らず関数分けの目的は2つあります。
1. 複数箇所で使うまとまりを関数化する。
2. ひとつの関数の中のコードが長すぎるので関数化して分割しソースを見やすくする。

61さんの場合は後者ですね。
以前の1メソッド50ステップまでというルールのプロジェクトがありました。
ちなみに、私も61さん同様 2. の分け方はあまり好きではありません。コメントで区分けしておけばいいだけですし。


63:デフォルトの名無しさん
08/11/20 00:08:28
複数個所に同じような処理があっても,それらが複数のクラスにまたがってるときは
関数にまとめるのが必ずしも良いとは言えない
取り回しがしづらくなる

64:デフォルトの名無しさん
08/11/20 01:10:58
入力フォームを作成する

1.氏名を表示させる
2.男性、女性をreslt.phpで表示させる
男性の場合青、女性の場合赤で表示させること

3.趣味を表示させる
読書、ゲーム、映画、旅行、スポーツ 
チェックした項目をreslt.phpで複数表示させる事

チェックした項目には
あなたの趣味は○○と○○ですね。と表示させる

読書、ゲーム、映画、2点以上 のみチェックした場合、「たまには体を動かしましょう」
スポーツ、旅行の 2点チェックした場合 「体を動かすのは良いことです。」
全てチェックを入れた場合には、(5点)「たくさんの趣味がありますね。」
と表示させる

3ができません
助けてください><
URLリンク(www9.uploader.jp)
1,2はできました
C言語が間違ってるんだと思います

友達いないんだ
明日俺だけ出来ないとか担ったらいやなんだ
お願いですから助けて下し亜><

65:デフォルトの名無しさん
08/11/20 03:07:21
>>61
適切な名前がつけられる場合は分割する。
不適切な分割が既にされている場合、あるいは、
昔は適切だったが、今は不適切になってしまった場合は、
一度展開してから整理して分割する。

どのように分割すればいいか良く分からないときは、放置。
事が進むにつれ、だんだん分かってくるかもしれないし、
そもそも何をもってして適切かが変化するかもしれない。

変更後のテストは必須

66:デフォルトの名無しさん
08/11/20 05:57:30
Serializableなんですが、
private void writeObject(ObjectOutputStream stream) throws IOException
を特に定義しなかったとき、フィールドに配列があっても大丈夫なんでしょうか。
それとObject[]とかだとどうなるんでしょうか。

67:デフォルトの名無しさん
08/11/20 08:27:50
GUIの時は特にブロックで分けてるなぁ

68:はんしょう
08/11/20 08:46:29
これまで Jbuilder2005でJPXを開いて、実行させると描画していたのですが
DOCモードでJAVA を動かした(と言ってもなにも描画しないで元のPromptになった)
後、再度Jbuliderで実行させようとすると
-- Java プロセスを起動中に IOException が送出されました -
とエラーになったのです 元のように描画実行するようにするにはどうしたら
良いでしょうか?

69:デフォルトの名無しさん
08/11/20 09:46:15
アプレットでダブルバッファリングを試みているのですが、
createImage(int,int)のシンボルが見つからないという警告が出ます。
importでComponentも読み込んだのですが認識してくれません。

何か他のクラスのcreateImage()と衝突などしているのでしょうか?
わかるかたいらっしゃたらよろしくお願いします。

70:デフォルトの名無しさん
08/11/20 10:20:12
>>64
Cの宿題なら該当スレへ行け

71:デフォルトの名無しさん
08/11/20 10:37:31
>>62
コメント書けばいいとかで巨大なメソッド作るなよ。
読むときどこにそのコメントがあるかも分からなくなるんだからな。
コメントに”○×処理”とか書くぐらいなら、コメントをそのままメソッド名にしろよ。

メソッドを分けるのに苦労するなら、読み物がどう分かれているかを参考にしてみたらどうだ。
最近のプログラミングは、多少の速度アップを求めてソースを汚くするより
人間が読みやすいようにするのが良いという流れもあるだろ。

72:デフォルトの名無しさん
08/11/20 11:28:40
GUIでコンボボックスとテーブルを使って下記のよう動作を実現したい。
テーブルA[A_ID,A_NAME]
テーブルB[B_ID, B_DATA,A_ID]
コンボボックスにA_NAMEの一覧を用意して選択したA_NAMEから
テーブルBのB_DATAをテーブルに表示させる

コンボに一覧を表示させることはできたけど、選択したA_NAMEからB_DATAを
引っ張る方法がわかりません。

考えとしてはコンボにA_ID,A_NAMEを保持させて、A_NAMEだけ表示させようと考えてます。
コンボボックスって表示させるデータ以外のデータも保持できますか?

73:デフォルトの名無しさん
08/11/20 11:30:42
>>60
ブラウザがクッキーを無効にしてるんじゃね
それかまだクッキーを設定してない初回アクセス時とか

74:デフォルトの名無しさん
08/11/20 11:34:55
>>66
大丈夫です
なぜなら配列は Serializable です
Object[] は中身がすべて Serializable または null なら大丈夫です
Serializable でないオブジェクトが混じっている場合は NoSerializableException が投げられます

75:デフォルトの名無しさん
08/11/20 11:41:36
>>69
createImageはComponentのメソッドだから、自クラスがComponentのサブクラスなら
this.createImage(...) あるいは this を省略して単に createImage(...) と書けるが、
そうでないなら対象のコンポーネントを指定する必要があるよ

76:デフォルトの名無しさん
08/11/20 11:49:57
>>72
>コンボボックスって表示させるデータ以外のデータも保持できますか?

そもそも JComboBox は任意のデータを保持できます
addItem 等の引数が String じゃなく Object になってるでしょう
項目をどう表示するかを決めるのは ListCellRenderer であり、JComboBox#setRenderer で設定できます
デフォルトでは単に toString した文字列を表示するだけですが、自分で好きなレンダラを書けばよいです

ところでGUI関連はSwingスレの方がよいかも

77:デフォルトの名無しさん
08/11/20 11:57:17
それで安心しました。rmiもあるみたいですけど、
Serializable はwebアプリのようなデータの転送で使っても実用に得るのでしょうか?

クライアントの設定情報をeventと交えて直列化して、相互に転送するときとかですが、
例えば検索ボタンを押して3秒ぐらいまでなら実用と考えていますが実用的でしょうか。
それとも、上のwebアプリの例えだとメソッド呼び出しじゃないんですが、rmiとかの方がよいのでしょうか。


78:デフォルトの名無しさん
08/11/20 11:59:22
-5.6 % 3.3
5.6 % -3.3
5.6 % 3.3
-5.6 % -3.3

の答えがそれぞれ
-2.3
2.3
2.3
-2.3
なんですが、これをどなたか解説していただけないですか

79:デフォルトの名無しさん
08/11/20 12:02:02
>>76
ありがとうございます。
setRendererでレンダリングを設定ができるんですね。

>ところでGUI関連はSwingスレの方がよいかも
そうですねスレ違いでしたね。ご迷惑をおかけしました。

80:デフォルトの名無しさん
08/11/20 12:14:44
>>78
Java言語仕様書に書いてある通りです
つまり、そういう仕様です
URLリンク(java.sun.com)
> the result of the remainder operation can be negative only if the dividend is negative
(訳) 被除数が負の場合に限り結果が負になります

81:デフォルトの名無しさん
08/11/20 12:19:13
>>77
RMI も中では Serializable 使ってるから同じじゃない?

82:デフォルトの名無しさん
08/11/20 12:28:09
>>80
どうもです

83:デフォルトの名無しさん
08/11/20 13:27:28
[aaaa]ssssssという文字列から
aaaaを取り出したいんですがsubStringを使おうにも、[aaaa]の長さは変動しますので
subStringが使えません。なにかいい方法は無いでしょうか?

84:デフォルトの名無しさん
08/11/20 13:34:07
>>83
String s = "[aaaa]ssssss";
int start = s.indexOf('[') + 1;
int end = s.indexOf(']');
String r = s.substring(start, end);
System.out.println(r);

85:デフォルトの名無しさん
08/11/20 14:18:12
>>84
たすかりました

86:デフォルトの名無しさん
08/11/20 14:37:05
>>83
この機に、java.util.regex 辺りをマスターするんだ

87:デフォルトの名無しさん
08/11/20 14:43:44
swingスレッドがないのでここでお聞きしますが、
guiでのpaintやrepaintはシングルスレッド設計が多いのですがこれはどうしてなのでしょうか?
プロパティに反応してrepaintするときなど、シングルスレッドのままだと順番まちのためpaintがされずに、
ボタンが押されっぱなしのような固まったような状態が0.5秒ぐらいなってしまいこっとの方が大問題だと思います。
似たような現象は今でもfireforxとかでたまにあります。
それでもguiをマルチスレッドにしないのはなにかほかにデメリットがあるのでしょうか。

88:デフォルトの名無しさん
08/11/20 15:30:41
>>87
URLリンク(java.sun.com)
の最後あたりに書いてある

89:デフォルトの名無しさん
08/11/20 15:59:34
個人的には、あらゆるイベント処理を漏らさず synchronized でガードしなければならないことを考えると、今のままでいい

90:デフォルトの名無しさん
08/11/20 16:59:54
>こっちの方が大問題
何と比べて大問題なんだよ。
例えばデッドロックよりも大問題なのか?


91:デフォルトの名無しさん
08/11/20 17:21:56
そのリンクですけど、guiプログラマーにはthreadの深い理解は不要だとかオーバーヘッドどうとかですけど、
プログラム処理でこれといったデメリットではないと思いますがこの程度が原因でマルチスレッドを捨ててるんですか?

これからguiやデスクトップアプリは2dやnetなどの通信などどんどん大規模になっていって、ほとんどの処理にスレッドの同期・非同期処理が必要になるとおもうのですが、
それでもシングルスレッドなのは何か他に理由があるのでしょうか?

jdkがいくら進化してもシングルスレッドのままだと昔のシングルタスクOSの限界と同じかとおもいます。
デッドロックとかcuiでもあるわけでなくなるわけではないし、guiとなにか関係あるんですか。
仮に全てのメソッドをsynchronizedにしても今のCPUなら全く遅くならないんですけど、それよりも先のようにシングルスレッドの処理待ちのほうが大問題だと思いませんか?

92:デフォルトの名無しさん
08/11/20 17:36:40
synchronized万能主義者か
synchronizedで囲うだけでマルチスレッド化による問題が解決すると思っているようなら勉強し直すことだ
フレームワークがシングルスレッドであることによるシンプルさを捨てさせてまで
マルチスレッドヘルに飛び込まないといけないほど反応時間を気にしないといけないのなら
自分が作ろうとしているものの設計の方をこそ見直すべきだ

93:デフォルトの名無しさん
08/11/20 17:40:27
DOMに関する質問です。
あるDTDにvalidなXML文書からDOM木を作成するとします。
普通にXML文書をparseすると文章中の改行やタブもTEXTノード
としてDOM木の中に表現されますよね(規格通り)。

こういった改行等のTEXTノードは削除して、DTD中に定義された
CDATAやPCDATAに対応するTEXTノードのみを残す、小粋な
お掃除方法は無いでしょうか?

94:デフォルトの名無しさん
08/11/20 17:41:46
GUIってユーザープログラムからだけでなく、OSからの処理も受け付けないといけないんだから、
つーかOSの一部の機能を借りている状態で実行してるんだから、
イベントディスパッチがシングルスレッドってのは納得しやすいと思うんだけど。

別にマルチで自前で書いてもスレッドセーフかどうかさえ気をつければ良いんじゃないの?

95:デフォルトの名無しさん
08/11/20 17:44:07
>>91
通信のような処理はGUIと無関係なんだから単純にGUIと別のスレッドでやればよかろう
そのことでGUIをマルチスレッドにする必要はないと思うが

仮にこれからそれらが必要になるとしても、swingが作られたのは10年も前なわけだが、
10年後の未来を予測して設計しておくべきだったと? 設計当時の理由はそのリンク先の通りで、
残念ながら(?) 今後来るかもしれないメニーコア時代のことまで考慮されて作られてはいなかった

synchronizedで遅くなることよりも、synchronizedし忘れてバグったり、デッドロック起きたりする方が俺は怖い
それに単純にすべてsynchronizedするんならシングルスレッドと同じじゃまいか
synchronizedかける場所を慎重に取捨選択するのはなかなか面倒な作業だと思うが

96:デフォルトの名無しさん
08/11/20 17:53:15
最近設計されたGUIでマルチスレッドなものってなにがあるっけ?SubArctic ?
日本語情報が少なすぎて全く使ってないからよくわからん。

97:デフォルトの名無しさん
08/11/20 18:51:20
JTableってデータを更新する際初期化とか必要ですか?
[1111]
[2222]
[3333]
[4444]
こんな感じでデータが入ってて
そこからsetModelでデータを上書きしたら
[5555]
[]
[7777]
[]
見たいな感じになります。



98:デフォルトの名無しさん
08/11/20 19:10:44
>>97
試してみたけど大丈夫だったよ
(import省略)
public class Test{ public static void main(String[] args){
final Object[] columns = { "x" };
final Object[][] dataA = {{ "1111" }, { "2222" }, { "3333" }, { "4444" }};
final Object[][] dataB = {{ "5555" }, { "6666" }, { "7777" }, { "8888" }};
final JTable table = new JTable(dataA, columns);
JButton button = new JButton("update");
button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){
table.setModel(new DefaultTableModel(dataB, columns));
}});
final JFrame frame = new JFrame();
frame.add(table); frame.add(button, BorderLayout.PAGE_END);
SwingUtilities.invokeLater(new Runnable(){ public void run(){ frame.pack(); frame.setVisible(true); }});
}}

99:デフォルトの名無しさん
08/11/20 19:11:48
GUIツールキットの多くがシングルスレッドなのは、伝統だと思います。
非同期にやってくるイベントをキューにためて、後はイベントループを
回して順繰りに処理していく方法は一つの成功した設計モデルとして
とても長い伝統と実績があります。

ソースが公開されているGUIツールキットを幾つかバらしてみれば、
多くの場合はイベントループ等の根っこの設計がどれもよく似通って
いる事が分かるかと思います。
また他の部品の振る舞いをあまり意識せずに個々の部品にイベント
ハンドラを書いてイベントを投げるだけでGUIの振る舞いが定義出来
るのも、イベントがシーケンシャルに処理される事を仮定出来る点が
大きいと思います。
そういう意味では、ツールキットを利用するプログラマに「楽をさせる」
良い設計ともいえます。

時代遅れとの見方もありますが、むしろこれに代わるリーズナブルな
設計モデルがまだ無いという辺りではないかと思います。

100:デフォルトの名無しさん
08/11/20 19:36:48
>>98
すいません・・・別の箇所で問題が原因でした。
ご迷惑をおかけしました。

101:デフォルトの名無しさん
08/11/20 19:55:17
>>99
イベントがどのタイミングで処理されるのかを
マルチスレッドだと制御できるとは思えないからなぁ。
シングルスレッドだからこそ、予測しやすいわけで。
まぁ、予測ができるだけで、確実にシーケンシャルに実行されるかどうかはわからんのだけど。

102:デフォルトの名無しさん
08/11/20 19:56:55
どう考えてもシンプルでコストが安いしな。
今のマシンなら楽勝って考えるてるなら、
自分で作ったらいい。環境はあるんだから。

103:デフォルトの名無しさん
08/11/20 20:19:49
UIがマルチスレッドなら、特別な仕掛けがない限り
UIコンポーネントから取得するデータは、取ってきた時点で
既に古いものになっていると考えなければならない。

こんなもので何を決められようか?

104:デフォルトの名無しさん
08/11/20 21:50:54
複数のインターフェースを使ってボタンをクリックすることで
画面の切り替えをしたいのですが、この場合CardLayoutを使うと思うんですが
本を読んでもイマイチ分からないので、使い方を教えていただけませんか?

それともCardLayout以外にも画面の切り替えを行う方法はありますか?

よろしくお願いします

105:デフォルトの名無しさん
08/11/20 21:57:06
JTabbedPaneはどう?

106:デフォルトの名無しさん
08/11/20 22:29:15
>>105
教えていただきありがとうございます

タブを使うやり方もいいんですが、
できれば、ボタンをクリックしてカードを
切り替える感じのものがいいのですが
ありませんでしょうか?

107:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/20 22:45:57
Javaでどの様にハッキングするの?
どの位の所まで分かる様になったらハッキング系の事出来るの?
JavaでLAN周りを調べる事何て出来るの?
どの様にJavaにネットと通信出来るように書くのか気になる。

109:デフォルトの名無しさん
08/11/20 22:52:45
>>107
TestクラスのTEISUUの値は,インスタンスの状態にかかわらず常に"定数"になるんでしょ?
それならstaticにするのが自然。メソッドの場合も同様の考え方をする。
Test.を省略できるのは同じクラス内だから。そういうルールだから仕方ない。

110:デフォルトの名無しさん
08/11/20 22:53:14
>>107
書けてしまうのは文法的に誤っていないから。
文法的に誤っているということだがJLSのどこに書かれているの?
static finalが付いているものは変更不可のクラス変数。
インスタンスごとの変更不可変数であればstaticは不要。

111:デフォルトの名無しさん
08/11/20 23:39:55
>>109
>>110
ありがとうございます!
自分のクラスのstaticフィールドにアクセスする場合は
クラス名省略できるんですね。知りませんでした。

よく考えてみたらインスタンスごとの定数ってあまり考えられないですね。。
単純に例が少なかったのかな。

112:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/20 23:43:40
定数をインスタンス毎に持っても意味ないからstaticにするぐらいにしか考えてないぜ

114:デフォルトの名無しさん
08/11/20 23:46:52
Javaが趣味って奴いるの?
個人レベルで何する気なんだ?Javaで

115:デフォルトの名無しさん
08/11/21 00:17:07
>>112
待て、おまえはServletにおけるオブジェクトのライフサイクルをちゃんと理解してるのか???
そのHoge testはどこに定義されている?

116:デフォルトの名無しさん
08/11/21 00:43:27
>>115
Hoge testはHttpServletのdoPost内でインスタンス化されて、
threadとして動いてます

117:デフォルトの名無しさん
08/11/21 01:10:01
スレッドってよくわかんねーーー
スレッドセーフなクラスって何だよ…
横槍ごめんなさい。

118:デフォルトの名無しさん
08/11/21 01:19:43
>>116
よくわからん。該当部分のコードを見せろ。Hoge testの定義位置も含めて。
HttpServletRequest/HttpServletResponseの生存期間はHTTPのリクエストを受け付けてからレスポンスを返すまでってことは理解してるよな?

119:デフォルトの名無しさん
08/11/21 01:51:32
>>114
Javaが趣味でもおかしくはないと思うが

それより、趣味の何らかの計算とか集計とかに使うと非常に便利>Java

120:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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
08/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
08/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:デフォルトの名無しさん
08/11/21 04:02:00
万能主義はあなたの方でしょw
実際は、シングルスレッドすることは全てのメソッドをsynchronizedにするのとほとんど変わりませんよ。
それにsynchronizedは同期のことでしょ?あなたはスレッドを分かってないようですね。

勘違いしているようですけど別にswingのスレッドとかの設計に文句があるんじゃなくて、
どうしてシングルスレッドにこだわるのかって事です。もともとswingはコンポーネントなのであってguiが前提なわけで、マルチスレッドで設計するものかと思います。
swingはピュアjavaというよりも全てpaintで済ますって理念なんで分からなくもないんですけど・・・

125:デフォルトの名無しさん
08/11/21 04:11:01
>>95
通信の処理とかがGUIと関係あるかではなくて、処理の結果をGUI(のコンポネント)が受け取ります。
それで、計算や処理など既にハード上の能力は十分ですぐ結果が出ても、肝心の表示の方がイベントまちとか
シングルスレッドで0.5...1秒待たされるようじゃそのコンポネント(swing)を使うにはストレスがあります。
たまに複雑なJTableでもあるでしょ、少しもたつくことが。

swing workerにもありますが、計算結果や通信結果の受信はguiと関係なので次のswing frameworkでは切り離したわけで、
だから描画とは関係ないeventやproperty fireとかもシングルスレッドにしてるのはどうしてなのかということです。
将来が予測できるかどうかじゃなくて、マルチスレッドにしてviewを独立させないことは自分自身で未来を潰しているようにみえませんか。

126:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/21 08:44:26
>>126
お前は、Sunが何故GUIのマルチスレッド化を諦めたのかをちゃんとしらべたほうがいい。
AWTは失敗だった、マルチスレッドでGUIを「正しく」実装するのは現実的には不可能だ、と言ってるんだから。


128:デフォルトの名無しさん
08/11/21 09:23:05
AWTはマルチスレッド対応じゃねーし、
マルチスレッド対応だから失敗したわけじゃないでしょ。

129:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/21 11:16:02
>>129
できますか、ありますかといわれたら、できますありますと答えるしかないw

131:デフォルトの名無しさん
08/11/21 11:19:12
>>130
やり方を教えてほしいです。


132:デフォルトの名無しさん
08/11/21 11:23:06
あげてすいませn

133:デフォルトの名無しさん
08/11/21 11:27:23
Java低速GUI Swing 8
スレリンク(tech板)

134:31
08/11/21 11:35:33
エクリプスにアプレットプラグイン追加してやってみたのですが
>>32と同じエラーがでます。

どうやら画像が読み込めてないようなのですがどうしたらいいのでしょうか?

135:デフォルトの名無しさん
08/11/21 11:44:25
>>127
SUNはどうしてGUIのマルチスレッド化を諦めたんですか?
GUIとマルチスレッドはあまり関係ないんで当然だと思うんですが、何を正しく実装するんでしょうか?

136:デフォルトの名無しさん
08/11/21 11:51:34
起きたばっかりで書き込んで所々重大な誤字がありますね。
少し誤解があるみたいなんで直しておきましたw

計算結果や通信結果の受信はguiと関係ないので、次のswing frameworkでは切り離したわけで、

古いシーケンシャル処理からの分離してコンポネント間の独立で、まさしくOO指向のツールキットでしょう。



137:デフォルトの名無しさん
08/11/21 12:01:27
それでJavaFXの方はJavaとは独立してリッチ何とかと宣伝してるんでけど、結局は新しいツールキットなんですか?
それともswingみたいなコンポネント(デベロパ)の延長なんでしょうか?

nativeピアで透明化が可能なawt.Windowが(ネイティブ依存でも)取得できれば、
awtとjava2d,3dでなんとでも出来る感じがしますけど。ただswingがなくなる事はないでしょうけど、
java seはOS依存と思われるシステムトレイもサポートしたので、そのうちそんなwindowの取得も出来るんでしょうか。

138:31
08/11/21 12:08:34
読み込み方法を変えたら無事に動きました。

139:デフォルトの名無しさん
08/11/21 13:02:16
>>126
webアプリがマルチスレッドになってるのはwebアプリにはクライアントが複数あるから。
基本的には 1クライアントに対して、一度に 1スレッドしか動かないようにするわけで。

140:デフォルトの名無しさん
08/11/21 13:25:22
それと同じような構造でgui toolkit frameworkを作ればいいんじゃないですか?
今のハードならスレッドにしたところでたとえすべて同期にしたとしても全く問題ないわけで。
webやデータベース問い合わせはすぐ処理が終わりますが、paintは少し計算が必要なだけでそんなのは今のハードなら屁でもないでしょw

今の時代のguiコンポネントは、テキストフィールドとか情報表示程度なので多少もたつく程度であまり気にならいのでしょう。
プロパティ更新などのイベントとpaintは全く関係ないのでこの辺りを切り離なせばswingはかなり有用なコンポネントになるんじゃないでしょうか。

問題もわかったことなので作るのはそんなに難しくはないのですが、どっちにしてもこんな根底部分の機構は私一人ではどうにもならないものなので、誰かjava.net辺りのプロジェクトで提案してリードしてくださいなw

141:デフォルトの名無しさん
08/11/21 13:32:07
不満があって知識があって明確な目標があるのに何で自分で実装して提示してみないんだろう。
最初から実用に供することのできるGUIフレームワークなんか期待していないけれど、
スレッドセーフな小規模実装を出して技術的実現性とその有用性を示して見せれば否定的意見は減ると思う。
俺としてはGUIのスレッドセーフ化をsunが諦めたのは分からんでもない。

142:デフォルトの名無しさん
08/11/21 13:33:58
言いだしっぺがやるべき

143:デフォルトの名無しさん
08/11/21 13:38:11
>>140
それを自分自身で提案すればいいじゃないか
文句を垂れてみせるだけでもいろいろ意見が出てくるはずだぜ
だれも>>140自身にコード書いてみせろとは言わんよ

144:31
08/11/21 13:40:14
プログラムは>>31と同じです。

画像を変更したら、うまく赤い枠で囲むことができなくなりました。
もっと精度よく検出するにはどうしたらいいでしょうか?

実行した画像
URLリンク(www2.uploda.org)

145:デフォルトの名無しさん
08/11/21 14:08:09
Executors.newSingleThreadExecutor();で処理すれば
マルチスレッドの勉強しなくてもよくない?って思ったんですけど
考えが甘いですか?

146:デフォルトの名無しさん
08/11/21 14:21:16
勉強しないで取捨できるって天才だな

147:デフォルトの名無しさん
08/11/21 14:21:38
例えば
メッセージ: 「実行時にフォーマットを行いますか?」
ラジオボタン: 「はい(デフォルト)」「いいえ」 ボタン: 「実行」

なんてダイアログがあって、次のイベントが入ってくるとします。

(1)「ラジオボタン[いいえ]をクリック」 (2)「[実行]をクリック」

この場合、入力イベントがシーケンシャルに処理されるのであれば
(2)のイベントを処理する段階では(1)が既に処理されている事を概ね
仮定出来ます。ラジオボタンの現在状況を気にせず、選択状態を示す
内部変数を参照して処理を開始できます。
ところが、このラジオボタンはとても重要なので"シャッキーン"とか
派手なビジュアルエフェクトの後に内部変数を[いいえ]側に倒す実装の
場合はどうでしょう。
となると[実行]ボタンの側では処理を開始する前に、ラジオボタン等々の
処理内用に関連する全てのGUI部品向けのイベントが全て処理済みで
あるか確認する必要があります。
もし個別のGUI部品が非同期にイベントを受領して処理する事が可能
なのであれば、プログラマは常に部品間の依存関係に注意して適切に
ロックなどを設計する必要があります。これが結構大変。

あるいは、高度なユーザーであれば、ダイアログボックスの生成に要
する0.5秒より短い時間でいいえ「付近」と実行「付近」をカンでクリック
してくるかも知れません。
ラジオボタンの生成やpaintが完了する前に[実行]ボタンがイベントを
受領してしまうと、どうでしょう。

148:デフォルトの名無しさん
08/11/21 14:22:41

いずれにしても上記の(1)->(2)というイベント「順」で表現された
「フォーマットはしないで、実行」という「文脈」を正しくとり
扱う必要があります。GUIの側は非同期処理で実装されていてもOK
ですが、その処理内容は常に上記のイベントの入力順番を意識する
必要があります。

まとめると、ユーザー操作のイベントは個々が単発で存在している
のではなく、「[いいえ]をクリック」「[実行]をクリック」とその
イベント列で表現された文脈の中に存在しています。
さらにGUIを持つアプリケーションは、多くの場合内部状態をもって
いるステートフルなアプリケーションです。
ステートフルなアプリケーションは非同期に入力されるイベントを
適切に取り扱うためにキューやロックを慎重に設計する必要がある、
これはGUIのみならずアクセンスカウンターからAmazonに至る
全てのウェブアプリケーションについても同じ事です。

ただGUIは内部状態の更新を引き起こすイベントの粒度がウェブに
比べより細かく、数も多いです。
また前述のようにイベント列は文脈をもっています。
この問題に対してイベント列をキューにためて順繰りに処理を行う
方法がプログラマが管理しやすい「現実的な」解として長らく支持
されてきたのだと思います。

もし現在の実装よりマルチスレッドなGUIツールキットの開発を目指
しているのであれば、個人的には入力イベントの文脈依存性をどの
ように取りさばくのか、その実装アイデアに興味があります。

149:デフォルトの名無しさん
08/11/21 14:57:13
>>147
一つのアイデアとして、そういうことはやらない、ってのはどうかな?

150:デフォルトの名無しさん
08/11/21 15:27:18
>>147
1.フェイルセーフの観点からは、「フォーマットしない」をデフォルトにすべき
2.内部変数のセットは、「シャッキーン」の前に実行すべき

151:デフォルトの名無しさん
08/11/21 16:23:06
>>150
いや・・・全くそのとおりなのですが・・・

要はイベントの入力順を気にせず処理できるものからパクパク
処理していくと時に致命的な結果を招きかねませんよ、という事を
説明するために無理矢理作った例です。寝ないで考えたのに~。

152:デフォルトの名無しさん
08/11/21 16:29:09
マルチスレッドGUI君は、自分の答えやすいレスへしか返事してないな。
なんというチキン。

153:デフォルトの名無しさん
08/11/21 16:49:31
>俺としてはGUIのスレッドセーフ化をsunが諦めたのは分からんでもない。

デッドロックとかも心配しるようですが、スレッドセーフは同期の問題なので、guiのpaintとは全く関係ありませんよ。
これでもまだ分からないなら、たぶんスレッドの本質部分があまり分かってないんじゃないでしょうか。

少なくともguiやpaintを上手く設計したところで、デッドロックがなくなるわけではないでしょw

せっかくOO指向をサポートしている言語なのに、paintを従来型のツールキットにあるイベント処理(ロジック)か何か勘違いしてるんでしょうね。

154:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/21 17:11:25
>>148
あなたに技能があり、そのようなツールを開発してたりオープンソースに多少でも関係してるなら答えてもいいんですけどね。
というよりも、もし個人そういうことをやってたり考えてるなら、オープンソースのグループに参加してみると今までのあなたの狭い見識が一気に変わりますよw
私が見たところ、従来型のシーケンシャル処理とイベントキューから抜け出せず、さらに計算結果とその表示を連動させようと四苦八苦しています。
まさに、cuiやcの時代の思考方法でしょうかw

>さらにGUIを持つアプリケーションは、多くの場合内部状態をもって いるステートフルなアプリケーションです。

例えばこの一文でも、OO的な極端なところでは、その内部フィールドを全てクラスにして同期にすればなんとでもなりますよw
イベントキューの順次処理はそれが一番単純で確実で実装も容易なので問題ないのですが、
この順次処理とguiのpaintは連動している必要はないので、そういった発想の転換が求められてるんじゃないですか?

アイディアとかも、別に私より上の方々が既に実験実装してるんで、そっちに参加した方が面白いですよw
java 2d程度の数学知識があれば、flushのライブラリとかも普通に作れるし、そんなに難しくないんですけど、
とにかくイベントキューでpaintがもたつくのは数学では解決できずawtやswingなどツールキットの問題です。

156:デフォルトの名無しさん
08/11/21 17:39:39
swingの設計について不満があるのはわかったが、
ここで何を言っても開発者に届くわけじゃないし意味ないと思うよ

157:デフォルトの名無しさん
08/11/21 17:48:28
swingの開発者にこんな訳分からんのが届いちゃってもマズいと思うが。
時間の無駄だしストレス増加するだろうし。
swing開発者がハゲちゃったらどーすんだよ。

158:デフォルトの名無しさん
08/11/21 18:04:23
>>155
う~ん、なので私自身は最初に「伝統です」と答えたのです。
正直あなたがどの程度の知識を持ち合わせているのか分からなかった
ので、「どうしてそのような伝統なのか」という事情を具体例を挙げて
説明しようと試みました。
どうやら完全にスキルを読み違えた返答になってしまったようで申し訳
ありません。

確かに私はGUI方面からは暫く離れた古い人間で、しかも当時の専門
はどちらかというとVRとかいったやや特殊な表示方面でした。
ちょっと昔の事例ですが、CaveLib辺りを弄くっていました。
で、同期には大変苦労しました。

確かに仰る通り計算と表示は必ずしも同期する必要はありません。
(特にVRでは「しない」前提でないと設計できない事が多いです)
問題は、ユーザの操作シーケンスと計算(というかアプリケーションが
実現する処理一般)の内容は一致させる必要がある、という点です。

で、これを実現するためには描画は別CPUに丸投げ、とは案外いか
ないなというのが実感でした。
少なくとも再描画周りであればLayoutまではきっちり首に縄を付けて
おかないと、「座標xyzをクリック」というイベントを「部品Aをクリック」
といった論理イベントに解釈するところで大いにハマります。
でも分散しないとフレームレートが上がらない、ので苦労しました。

なので、仮に最近のOOを用いたアプローチでより洗練された設計
モデルが実現されているのであれば大変興味があります。
(興味、ですよ。今はこの分野からは離れているので。)
もしある程度確立したモデルがあれば教えていただけると幸いです。
あるいは参考になる実装なりプロジェクトがあれば幾つか挙げて
もらえないでしょうか?

159:デフォルトの名無しさん
08/11/21 18:05:52
なんで2chでやるかな

160:デフォルトの名無しさん
08/11/21 18:13:46
やっぱSwingよりSWTだよね!
・・・SWTに詳しいサイト教えてください><

161:デフォルトの名無しさん
08/11/21 18:14:28
「Java並行処理プログラミング」に、その辺の事情が説明されている
イベントドリブンモデルでは、リソースに適切な順序でロックをかけるのが非常に難しい

Swingも当初はマルチスレッドを狙ったらしいが、
途中で無茶だと分かりシングルスレッドに変更とのこと
「マルチスレッドのGUIフレームワークは、非常に慎重に設計すれば無理ではないだろうが、
マルチスレッドの専門家しか扱えない代物になるだろう(大意)」とは、Sunの偉い人の弁

162:デフォルトの名無しさん
08/11/21 19:33:38
>>161
どこで読んだか思い出せず、よーやく発掘したと思ったら先を越されたorz
まー、これだけでは何なので、p.214より一部抜粋。
> マルチスレッドのGUIフレームワークを作る試みは過去にいろいろありま
> したが、どうしても競り合い状態やデッドロックの問題に付きまとわれる
> ので、結局全員があきらめてシングルスレッドのイベントキューを使う
> 方式に落ちつきました。《略》(AWTは最%8

163:162
08/11/21 19:37:11
途中で切れたorz 以下続き。
>《略》(AWTは最初、相当本格的なマルチスレッド
> アクセスをトライしましたが、その失敗の経験に基づいてSwingはシングル
> スレッド方式になりました。)
何故うまくいかなかったかについては、上記以降のパラグラフに書いてある
が、ここに引用するには量が多いので、詳しくは該当書籍をあたってくれ。

まぁ、上記の問題については、>>140が画期的な案を持っているようだから、
ここで開陳すると乗ってくるやつがいるかもしれんぞ。過去のGUI専門家が
皆諦めたくらいだし。

164:デフォルトの名無しさん
08/11/21 20:09:19
おまいら、
>実際は、シングルスレッドすることは全てのメソッドをsynchronizedにするのとほとんど変わりませんよ。
こう書いてある時点で、釣りであることに気づけ。

165:デフォルトの名無しさん
08/11/21 21:05:38
マルチスレッドなGUIのメリットってなんだろ??
シングルスレッドなデメリットってほとんど回避できそうなんだけど。

166:デフォルトの名無しさん
08/11/21 21:32:02
結局そこに尽きる
苦労しても実入りが少ないから誰もやらない

167:デフォルトの名無しさん
08/11/21 22:52:17
>>135
素人考えだが、マルチスレッドにしたらそれぞれがフリーダムに動いて
フリーダムなの動きがお互いに悪影響で、
それを回避するためにあれこれしてたらあはーんなんじゃないだろうか

168:デフォルトの名無しさん
08/11/21 22:56:38
どうでもいいことで盛り上がってるな!

169:デフォルトの名無しさん
08/11/21 23:38:36
マルチスレッドはマルチコアと関係ありますね?

170:デフォルトの名無しさん
08/11/22 00:27:36
>>118
今手元に無いのでちょっと出せませんが
>生存時間
これを理解してなかった・・・。

Hoge testが動き始めたときには、すでに呼び出し元の
Servletはレスポンスを返し終わってるから、だめってことか。
ありがと

171:デフォルトの名無しさん
08/11/22 02:34:23
オブジェクトの再利用ってのは
test a = new test()
test b = new test()

っていう風に同じオブジェクトをインスタンスしたということですか?

172:デフォルトの名無しさん
08/11/22 02:37:47
スレッドだいぶ勉強したんで、なんかソースみたいんだけど
あんまりネット上にないね。マルチスレッドを実務でつかうことも
ほとんど俺の場合ないから、無駄というか、不満なんだ。

スレッドを使った面白いアプリを組んでみたいなあ。だれかソースくれ。

173:デフォルトの名無しさん
08/11/22 02:39:31
>>171
毎回newし直さずに一度newしたインスタンスをずっと取っておいて何度も使いまわすことを指すんだと思いますが

174:デフォルトの名無しさん
08/11/22 03:16:32
>>172
つWebサーバ
……に限らず、Javaで書かれたサーバ系のソフトはふつーマルチスレッドと思われ。

175:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/22 05:25:20
>問題は、ユーザの操作シーケンスと計算(というかアプリケーションが 実現する処理一般)の内容は一致させる必要がある、という点です。

3Dとか複雑なアプリを作るぐらいになっているなら、プログラムをその場しのぎの独学でやるんじゃなくて、
ちゃんと数学知識の裏づけを持って作ってみたらどうでしょうか。
たぶんこの一文から見てもあなたは小技をいっぱい知ってるが・・・って程度なのが分かります。
例えば、1秒で60フレームとかにこだわらず、10フレームでいいんじゃないでしょうか。それが今のソフト上の限界なのかもしれませんが、あなたの発想は、数学ではなくて、その限界を飛び越えようとする哲学か何かをもってるんじゃないですか?

しかしその小技もシーケンシャル処理だと通用しても、オブジェクト指向だとまったく通用しなくなるんで、その辺りの発想が抜けてないんじゃないかと思います。
別に小技がダメだとかOOがいいんだとか言うのじゃなくて、class数が多くなったアプリだと一人のデベロパがそれを理解することや管理するのが不可能で、もう既にシーケンシャルの発想のままじゃ無理ですよ。

>なので、仮に最近のOOを用いたアプローチでより洗練された設計

javaなら、javafxとかですかねwまだアルファみたいですけど、このプロジェクトが完全中止になる事はないでしょう。
他には、頑張ってるみたいですけど、adobe flashとかも正当な2d guiの進化をしている気がします。


177:デフォルトの名無しさん
08/11/22 05:26:47

>イベントドリブンモデルでは、リソースに適切な順序でロックをかけるのが非常に難しい

だから、コンポネントを「情報表示のコントロール」と考えるとイベントと連動する発想で実装したくなりますが、
「コンポネントは独立していて、一種のアニメーションである」とかだと発想も変わるんじゃないですか。
旧来の発想ではいくらハードが進化しても描画イベントまち(paint)でもたつくわけで、これはソフト(toolkit)の描画機構の問題です。
つまり「コンポネントはイベントと連動して表示しなければならい」という発想が今の限界になってるんじゃないでしょうか?

これだけ問題点が出てきてるんで、後はこれを解決するような設計や機構をUMLとかで作るだけですよw
いくらguiが2dや3dを容易に扱えるようになっても、情報結果表示専用コントロールなどといった発想のままでは今後もテキストエリア程度のまま次の10年がすぎるんじゃないかなと思います。


178:デフォルトの名無しさん
08/11/22 05:31:11
質問させて頂きます。
仮に
KeisanというClassに
public int add(int x, int y){
return x + y;}
というメソッドがあるとし、このメソッドをKeisan以外のクラスで使用するにはどうすればいいのでしょうか。
よろしくお願いします。

179:デフォルトの名無しさん
08/11/22 05:45:42
なんか勘違いしてたのですが、オーメンじゃなくてエクソシストの少女でしたw
最後は神父さんが興奮のあまり2階の窓からダイブしちゃうアレですw

URLリンク(images.google.co.jp)


180:デフォルトの名無しさん
08/11/22 06:09:00
>>178
インスタンス化してaddメソッド呼び出しするんじゃないの?

181:デフォルトの名無しさん
08/11/22 06:10:33
並列処理の人もいるみたいなんでコメントしておきますが、

>イベントドリブンモデルでは、リソースに適切な順序でロックをかけるのが非常に難しい

これもすぐにソリューションが浮かびますよw
ただ私は仕事や専門でやってるわけでも報酬をもらってるわけでもないので、それをお答えするつもりはありません。

一番大事な事は、その問題の効率的・合理的な答えが存在することじゃないですか?
たぶん、並列処理のツールを実際何かで使ってみたり、簡単なGCを実装してみたりすると、あなたもよいアルゴが浮かんでくると思います。

今作ってるのはグラフ理論ですかね。
URLリンク(bkv.so-net.ne.jp)
URLリンク(iv.xight.org)
みたいのでしょうかw
というよりも、今までの私たちの発想になかった次世代のコンポネントの感じがしませんか?


182:デフォルトの名無しさん
08/11/22 06:13:24
インスタンス化する方法を教えてください。もしくはTUTORIALなどのリンクなどでも結構です。

183:デフォルトの名無しさん
08/11/22 06:14:51
new か?

184:デフォルトの名無しさん
08/11/22 06:18:34
>>175

>たぶんどんなに有用なりソースを紹介したところで、あなたの脳みそが
>順次処理(フローチャートw)に染まってるようなのでいくらUMLやOOを
>勉強しても無駄だと思います。

またまた、そんな出し惜しみせずにw
無駄かどうかは自分で判断しますし、少なくともコードは読めますから、
まずは具体例を列挙してもらえると大変助かります。
特に「実験実装」事例に興味があります。

>>adobe flashとかも正当な2d guiの進化をしている気がします。

幸いFlashについてはFlexについてライブラリの構造やイベント処理周りに
関してある程度理解があります。これまでの議論と関連して、どの辺りが
特に優れていると感じられますか?

一つ気になったのは、重いイベントの破棄や、フレームレートの程度や、
コンポーネントと描画の連動の是非は基本的にアプリケーションの仕様
で決まるものであり、OO等の設計論とは別の問題ではないでしょうか。

もう一つ判然としないのは、マルチスレッドの適用範囲です。意図されて
いるのは全体をざっくりMVCに分けたとして、MとVとCの間の結びつきを
非同期にすることを考えられていますか?
それともV相当の部分もより細かく分割して、内部を非同期で処理する
ことを目指されているのか、どちらでしょうか?

185:デフォルトの名無しさん
08/11/22 06:30:10
>>182
Keisanクラスをimportして普通にnewじゃないかな?
間違ってたらごめん。

186:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/11/22 08:17:45
最近の情報視覚化やってる連中って「グラフ理論やってる」って自称するもんなのか?

188:デフォルトの名無しさん
08/11/22 08:21:12
>いま自作でグラフ論理ライブラリを作って

ええと、ここは多分グラフ「理論」の事ですよね。グラフ論理だととても
意味が変わってくるので一応確認します。
つまりこれは、グラフ理論を用いて例えば描画にまつわる依存関係や
制約問題を解くライブラリという事でしょうか。

あるいはばねモデルによるインタラクティブなグラフ表示のような、
グラフ「を」描画するライブラリの事でしょうか。
TouchGraphやPrefuseといったライブラリに相当するものでしょうか?

あとFlashがMVCに完全に分離されている、というのは正直どのような
視点から述べられているのか不明確です。MVCのそれぞれに対応する
Flashの構成要素を具体的に示してもらえますか?

189:デフォルトの名無しさん
08/11/22 08:24:02
>>185
Thanks!やってみる。

190:デフォルトの名無しさん
08/11/22 08:53:53
これ人工無能だったら良い出来だよな

191:デフォルトの名無しさん
08/11/22 09:06:18
初心者の質問が無くなるから他でやれ

192:デフォルトの名無しさん
08/11/22 09:29:45
どこいっても迷惑がられると思うんだが

193:デフォルトの名無しさん
08/11/22 10:07:23
デバッグってなんですか。

194:デフォルトの名無しさん
08/11/22 10:38:15
>>193
鞄の中身を取り出して、
要らない物があったら棄てて
また入れ直す作業の事です。

あ、depackかorz

195:デフォルトの名無しさん
08/11/22 10:49:39
livedoorブログを使ってます。
Javaのソースコードをブログの記事に載せたいのですが
如何も奇麗に載せられません。

ソースコード HTML化 コンバーター「唐辛子」も
使ってみましたが奇麗に表示しません。
使い方が間違ってるのでしょうか?

何方かlivedoorブログでソースコード等を奇麗に表示されてる方及び、
奇麗に表示させる事をご存知の方教えて頂けませんか?
よろしくお願いします。

196:デフォルトの名無しさん
08/11/22 11:11:40
>>182
x = new Keisan();
int y = x.add(1, 2);

197:訂正
08/11/22 11:12:23
>>182
Keisan x = new Keisan();
int y = x.add(1, 2);

198:デフォルトの名無しさん
08/11/22 12:38:48
>>188
あなたの文章を読んでいると、あなたは根っからのPG職人ってところですかねw
もし興味あるなら、まずはGraphcis2Dを使えるように勉強したらどうですか?
それと、あなたはいつまでも自分の意見を変えない宗教っぽい人だとおもんですけど、
一筆書き問題を計算して、その結果を表示する事、さらにどの位置にどのような表現で表示するかは、全く別ってことでわかるんじゃないでしょうか。

今作ってるライブラリは根底部分はjdk1.1のアプレットで動かすためにコレクションもMyHashtable, MyVectorとかで自作してるし、
classファイルが100を超えてるんで、UML知ってるかどうか以前にOO指向じゃないと一人では管理する事は明らかに無理です。
というか、こういう苦労話を聞きたいわけじゃないでしょw

199:デフォルトの名無しさん
08/11/22 13:24:55
人工無能のソフトウェアパターンとして、
「はい」か「いいえ」かで答えられるような質問に対しても明示的に答えず、
駄文で文字数稼いで如何にも答えているかのように見せかける
というのがあるのでしょうか。

200:デフォルトの名無しさん
08/11/22 13:27:55
>>186
お前、以前ここで、JFrameが数十回に1回白くなるのはバグだとか
アホを晒してみんなに呆れられてた奴だろ?w

201:デフォルトの名無しさん
08/11/22 13:54:09
>>198
いやぁ、宗教ぽいというより、単に疑問点に対してしつこいだけですよw
どうもあなたのレスの中には次々と新鮮な視点が提示されるため、それらに
対する疑問が解けないうちは意見も変えようが無いじゃないですよね。

特にFlashとMVCの対応は是非とも説明していただけると有り難いです。
これは個人的にはとても新鮮な視点で、故に理解が難しい点も多いです。
例えばFlash界にもCairngormやPureMVCといったMVCフレームワークが
存在します。しかしそもそもFlash自体が明確なMVC構造を持っているので
あればこのようなフレームワークは屋上屋を重ねるものでは無いでしょうか?

一筆書きを解くのと描くのは別問題なのはその通りだと思います。
で、現在開発中のライブラリの目的はどちらなのでしょうか?

202:デフォルトの名無しさん
08/11/22 14:05:39
しまった、真面目に相手して馬鹿を見た……。

203:デフォルトの名無しさん
08/11/22 14:34:14
中二でC言語遣らないで、
Javaから手出して配列とかやってる奴って凄いの?

204:デフォルトの名無しさん
08/11/22 14:47:50
>>200
反応ないところを見るとたぶんそのアホなんだろうなww
こんな鼻糞みたいな奴はほっといて俺達の初心者ちゃんの質問に答えてやろうぜ!

205:デフォルトの名無しさん
08/11/22 15:17:37
>>201
今までの伝統的な手法であったから行き詰まったんでしょう。
ということは全く別な始点でソリューソンする必要があるんじゃないでしょうか。
私から見ると、adobe flash, javafxなんかはtcl/tkの再来(だいぶ違うが)にしか見えないんですけど、
guiのコンポーネント操作(イベントとかも含めたツールキット)は、jvmをプラットフォームにして、java langとanother scriptに分けるぐらいにしないと自然な分離はできないんだなと思います。
つまり、VとCは別のものとして作っても全く問題ないってことです。この辺りに気がつくかどうかは、数学とかパズルのセンスが必要なのかなっておもいます。
逆にいえば、swingはシングルスレットであるって事が強みなんですけどね。

外部調達ならjavax.scriptサポートが必然的に必要だし、invokedynamic bytecodeも必要になってくるって事ですかね。
あまり深く追いかけてませんが、jdk1.1 applet用のライブラリを作っているとEnumerationとEnumeration用の内部クラスばかりなので、
どのjdkでも頻出イディオムだし、クロージャは早いところ仕様をまとめて導入して欲しいところです。

とうか、私はCとかポインタとかもバリバリ使えますよww
ライブラリですけど、アスペクト指向はまだ良く分かってないんでまだですけど、プロトタイプ指向はもう既に実装して実験的ですがライブラリに組み込んでますよ。
描画の方はもう弱点がわかったんでソリューションもできたし、今のところはレイアウトマネージャをどうやって実装するかってところです。

いくつかあるんですけど、グラフ理論に興味があるなら本格的なライブラリならこれですかね。
URLリンク(jung.sourceforge.net)

206:デフォルトの名無しさん
08/11/22 15:22:22
あなたはまず改行を覚えた方がいいですよ

207:デフォルトの名無しさん
08/11/22 15:23:31
トリ付けろ
相手したい奴だけが相手したらいい
それ以外の人に迷惑だ

208:デフォルトの名無しさん
08/11/22 15:28:55
デッドロックを気にしている人もいましたけど、自分で実際に問題となる小さいプログラムを作ってみると上手いソリューションが浮かんでくるんじゃないでしょうか?
MVCのそれですけど、先も書きましたがflashはアニメーションから始まってることを知ってれば、従来のコンポネントとは違うってことを自然と分かるんじゃないでしょうか。
もしくは、>>201はアプレットでアニメーションとか作ったことあると、たぶん今までのイベントモデルでやるんじゃ難しすぎるって事がわかるんじゃないかと思います。
小さい脳みそで考えてばかりいないで、サルみたく手を動かせってことでしょうかww

209:デフォルトの名無しさん
08/11/22 16:01:59
もう俺にはおなかいっぱいw
本とキモイから死んでくれよw

210:デフォルトの名無しさん
08/11/22 16:25:24
やっぱり人工無脳なのかなぁ

211:デフォルトの名無しさん
08/11/22 16:28:01
初心者が質問しにくいナガレだな

212:デフォルトの名無しさん
08/11/22 16:28:31
人工無能でこれぐらいできるなら音声認識&読み上げ機能組み込んで
ボケ老人の相手とかさせたらビジネスになるんじゃないかと思ったりする

213:デフォルトの名無しさん
08/11/22 17:09:45
もうJAVAは難しすぎる!おれはC#にする!絶対!!

214:デフォルトの名無しさん
08/11/22 17:46:39
>>212
それは既に初ねミクで実装されてるよww
おまえ、頭大丈夫か?

215:デフォルトの名無しさん
08/11/22 17:51:38
あぁ、人工無脳を疑うコメにこれまた人工無脳で生成されたかの
ようなツッコミが。頭痛くなってきたよ~

216:デフォルトの名無しさん
08/11/22 18:20:54
ジャバなんか鼻糞じゃんか。オレは最強のMVCであるMICROSOFT.NETをすすめる!

217:デフォルトの名無しさん
08/11/22 18:29:02
ありゃ。一気に脳みそレベルが下がっちゃったみあいw

218:デフォルトの名無しさん
08/11/22 18:49:18
もう次から次から新しいことなんか覚えられないよ
やっぱり俺はC#でいいや
マイクロソフトと俺は心中することに決めた

219:デフォルトの名無しさん
08/11/22 19:06:14
知ってたら教えて欲しい。

javaからクラスパスを取得する方法ってあるかい?

ClassLoader.getSystemResource("hogehoge.ini")
こんなコード書いてるんだけど、nullしか返ってこないんだ。

だから、クラスパスを表示してみてみたいと思ったんだ。

220:デフォルトの名無しさん
08/11/22 19:21:34
System.getProperty("java.class.path")
自己解決した、これで取得できた。

System.out.println(System.getProperty("java.class.path"));
これで表示できた。

ちょっとググルキーワード変えたら出てきた。

221:デフォルトの名無しさん
08/11/22 20:59:08
どうでもいいけど、>>200>>204
とてもわかりやすい自演をみた。

222:デフォルトの名無しさん
08/11/22 21:09:00
エスパーさんこんばんは

223:デフォルトの名無しさん
08/11/22 21:38:15
あの・・・エクソシストって映画なんですね・・・その首の女の子がこっち見てるんですけど・・・・

224:デフォルトの名無しさん
08/11/22 22:35:50
Javaの勉強してだいぶ立つんだけど(俺は超底辺のブラック勤務)
独学だからいかんせん抜けが多い。でも市販の書籍だけではとてもきちんと
知識をつけることはできない。色々ググってたら、URLリンク(www.rsch.tuis.ac.jp)
っていうページみてとてもうらやましく思った。で、大学の教科書が欲しくなった。
どうやったら大学の教科書って手に入るの?

225:デフォルトの名無しさん
08/11/22 22:40:33
amazon

226:デフォルトの名無しさん
08/11/22 23:06:11
質問です
文字列の中で変数を使いたいのですが
どのようにしたらよいのでしょうか?

227:デフォルトの名無しさん
08/11/22 23:14:52
変数らしきものを自力で探し出して置き換える
簡単な方法はない

228:226
08/11/22 23:21:20
>>227
そうだったのですか・・・
では面倒ですけど、地道に変数の値を文字列に入力していくことにします。
ありがとうございました。

229:デフォルトの名無しさん
08/11/22 23:30:57
ん?

単純に
int a=3;
String str = "1足す2は" + Integer.toString(a);
System.out.println(str);

とか↑こんな感じのことをいってるんじゃないのか?

230:226
08/11/22 23:44:34
>>229
まさにそんな感じでした。
いま試してみたらばっちり上手くいきました。
ありがとうございました!

231:デフォルトの名無しさん
08/11/22 23:49:38
>>229
String str = "1足す2は" + a;
でいいじゃん。文字列に+するときは自動的にtoStringされる。


232:229
08/11/23 00:45:58
>>231
そうなのけ?Javaはもう4年くらいやってないからよくわからん。。

勉強になったよ。ありがとう。質問者さんも解決したみたいでよかった。

233:デフォルトの名無しさん
08/11/23 01:27:55
>>232
Javaでは、String自身を除く全てのデータ型(nullも含む)について、Stringへの変換が規定されてる。で、+演算子の前後どっちかがStringなら、もう一方もStringに変換される。(Java言語仕様第3版5.1.11, 5.4, 15.18.1参照)

234:デフォルトの名無しさん
08/11/23 03:14:13
String a=10; エラー
String a=""+10; OK

235:デフォルトの名無しさん
08/11/23 05:01:11
>>234
で?

236:デフォルトの名無しさん
08/11/23 10:21:50
沖縄に外国人3000万人受け入れ計画
URLリンク(life.bbs.thebbs.jp)

こんな法案が可決したら日本は破綻する
(ちなみに東京の人口は1280万人)
選挙権がある方は良く考えて投票してください



237:デフォルトの名無しさん
08/11/23 15:06:46
あほみたいな質問なんですが、javaのパスは通るのですがjavacのパスだけ通ってくれません。
使用しているOSはwindows XP HE SP3
インスコしたのはver6のup10

パスの記述は間違っていませんし、実際にその階層にjavacもあります
OSを再起動をしてみるのですが、ずっと迷子のままです

wikiもggrksもしてみましたが、解決法にたどり着けずに苦しんでます
だれか、こんなあほの子に救いの手をください。

238:デフォルトの名無しさん
08/11/23 15:32:06
>>237
「パスが通らない」という意味がわからん。パスは通すもんだ。
マイコンピュータで右クリックメニューを出して「プロパティ」を選択
→「詳細設定」タブで「環境変数」ボタンを押す
→上半分の「xxx のユーザー環境変数」(xxx の部分はお前のユーザー名)のところに、変数「PATH」がないか探す
→→変数「PATH」がない場合は、「新規」ボタンを押して、変数名に「PATH」、変数値に「C:\Program Files\Java\jdk1.6.0_10\bin」を記入し、「OK」→「OK」と押す
→→変数「PATH」がある場合は、PATHの行をダブルクリックして、変数値の末尾に「;」(セミコロン。コロンと間違えないように)で区切って「C:\Program Files\Java\jdk1.6.0_10\bin」を記入し、「OK」→「OK」と押す
→コマンドプロンプトを開いて、「echo %PATH%」と入力してリターンを押す。表示される中に上で記入した値が入っていれば、設定が反映されている
→「javac」と入力してリターンを押し、使い方のメッセージが表示されれば、記入した値が正しいことが確認できる。そうじゃなければ何かミスってる


239:デフォルトの名無しさん
08/11/23 15:55:23
>>238
それでもうまくいかなかった
#echo %path% で通っているにも拘らず

ので、一度windowsから復元をかけてインスコ前にして、
再インスコしました。再インスコしたらうまくいったので、
インスコに失敗していたのかもです。どもです。

240:デフォルトの名無しさん
08/11/23 16:16:04
JSPでフォームに入力したテキストをMySQLに入れるプログラムを作っているのですが、
登録しても登録されていない。
MySQLのログを見ると確かにINSERT文がMySQLに送信されているのですが……
そのINSERT文を丸ごとコピペしてコマンドラインでmysqlコマンドを使って直接ぶち込むと
きちんと登録されます。
エラーログには何も残っていません。
これは何が原因でしょうか?

241:デフォルトの名無しさん
08/11/23 16:20:38
RMI(りもーとめそっどいんヴぉけーしょん)のサンプルをたくさんやってみたいんだけど
オライリーの本しかない(´・ω・`)
でも、オライリーは昔からあんまりすきじゃない(´・ω・`)ピアソンエデュケーションとかがすき。

そういうことでRMIのオライリー以外の本とかRMIのことが割合詳しく載ってるWebページしってるひといたら
おしえて(´・ω・`)

242:デフォルトの名無しさん
08/11/23 16:22:29
オライリーの本って、くどくど長たらしいよね(´・ω・`)

かといって、面白そうなページからやろうとすると、くどくどした
説明のところを何ページもやらないとできないようになってる(´・ω・`)

クックブックとか別だけど。

243:デフォルトの名無しさん
08/11/23 16:36:51
>>238
>javaのパスは通るのですがjavacのパスだけ通ってくれません。
使用しているOSはwindows XP HE SP3

javaは最初からパスが通ってる。だから、パスを設定しなくても実行できる(JVMをインストールした時点で)。
で、パスが間違いなく通っているのにjavacが使えないというのは、100%ない。だからパスが間違ってる。
1)パスとパスの区切りにセミコロンはいれたか?要するに前のパスとの区切りでセミコロンはいれた?
2)パスはエクスプローラ(マイコンピュータなど)を開いて、必ずアドレスバーを表示するようにして
  jdkのインストールディレクトリ\binまでたどっていき、アドレスバーの文字をコピーしてパス設定のダイアログに貼り付ける
  この際、今まで記述してあったパスとの区切りにセミコロンを必ずいれること。アドレスバーの出し方は↓
URLリンク(www.progless.com)



244:デフォルトの名無しさん
08/11/23 16:41:29
javaの勉強始めようと思ってる大学生です。
まともに使える言語がないので勉強しようと思ったんですが、どのような方法で
勉強するのがお勧めですか?
2週間ほどWebで教えてくれるサイトを巡って、書いてあることをひたすら読んでいるんですが、
正直スキル向上する気がしません。

for,ifなどの基本的な命令は使えます。

245:デフォルトの名無しさん
08/11/23 16:48:53
>>240
ちゃんと MySQL に接続できてるか、とか DB 名(っちゅーか DSN)間違ってないか、とか
テスト用にローカルに立てた MySQL につないでないか、とか調べろ。それ以上はエスパーに頼め。

>>241
2年前に仕事で RMI やったけどあんまり Web に情報無いよね。本もないし…。
仕事ではクライアント側が自分の RMI オブジェクトをサーバに登録して、サーバから呼び出してもらう
ってのを作ったけど、ググった情報だけでなんとかなった。
そもそも RMI って結局はメソッド呼び出しの遠隔版だからそんなに情報必要じゃないんだよね。
まあがんばれ。

246:デフォルトの名無しさん
08/11/23 17:07:30
>>244
ソースコードを読んで書く。適当なサンプルプログラムをひっぱってきて、読む。読んだらちょっと自分で機能を追加したり変更しりして動かしてみる。
動かすときは、デバッガで1行ずつステップ実行したり、要所要所にprint系の文を突っ込んで変数の値がどのように変化していくのかを見てみる。
何をどうやったらプログラムがプログラムとして成立しているのかを理解したら、1から書いてみる。


247:デフォルトの名無しさん
08/11/23 17:17:51
>>246
やっぱりソースコードを自分で作成することが大事なようですね。
自分も今の方法で勉強するか、その方法で勉強するか迷っていたんです。
ありがとうございます。

質問追加してしまって申し訳ないんですが、その勉強方法をするためのソースコードとして
勧められるようなものってなにかありますか?

248:デフォルトの名無しさん
08/11/23 17:44:21
>>243
そりゃもう何度もやってましたよ、と
おかしいから質問したのであって、記述ミスとかの話じゃないです

249:デフォルトの名無しさん
08/11/23 18:24:34
>>248
なぜ環境変数等を晒さないの?
echo %PATH%とdir "C:\Program Files\Java\jdkxxx\bin"の出力結果
cmdがおかしいとか、記述ミスじゃないと判断する前に当然自分では確認したんだよね?


250:デフォルトの名無しさん
08/11/23 18:37:59
>>248
とりあえず絶対pathで使えるかやってみたら?
c:\ほげほげ\javac なんとか.java
が動くかどうか。

251:デフォルトの名無しさん
08/11/23 19:08:19
なんですぐ入れ食い状態になるの?

252:デフォルトの名無しさん
08/11/23 19:09:45
puts("'javac' は、内部コマンドまたは外部コマンド、\n操作可能なプログラムまたはバッチ ファイルとして認識されていません。\n");
だったらうけるw

253:デフォルトの名無しさん
08/11/23 19:44:05
javaスレだし、Cはいらん
勉強するならCからだけどなw

254:デフォルトの名無しさん
08/11/23 20:41:43
>>249,250
239にも書いたように、再インスコで動くようになりましたよ、と。
どもですどもです。

255:デフォルトの名無しさん
08/11/23 20:57:19
iアプリのプログラムを書いたりしてみてるんですが…

これの際にわざわざ
「どこかの鯖にそのjarをUL⇒携帯電話端末でそれをDL」
ってやらないと自分のケータイで実行することってできないの?

256:デフォルトの名無しさん
08/11/23 20:59:37
>>255
iモード携帯電話用Java(iアプリ) Part18
スレリンク(tech板)

257:デフォルトの名無しさん
08/11/23 21:01:51
>>256
スレ違いすみません。
早速除いてみます

258:デフォルトの名無しさん
08/11/24 01:29:09
jdk1.6.0_07をインストールしたのですが、環境変数の設定が解らず困っています。
参考書を参照しているのですが。
新規CLASSPATH
新規path
新規jAVA_HOME
何を入れたらいいのでしょうか?
OSはXPです。

259:デフォルトの名無しさん
08/11/24 01:32:09
>>258
可愛いこと言うな!コノヤロー

260:デフォルトの名無しさん
08/11/24 01:36:18
>>259
どういう事でしょうか?

261:デフォルトの名無しさん
08/11/24 01:49:45
 >>258
多分、その参考書には載ってないと思う。

262:デフォルトの名無しさん
08/11/24 02:32:20
パーティ用にクイズゲームを作ろうとしていますが、
スコアボードとして「+」や「-」をクリックすると数字が増減するjavaのプログラムを組もうと試みています。しかし、テキストボックスを利用すると文字が小さすぎてパーティで利用するには不向きです。

・テキストボックスのフォントサイズを変える方法
・無理なら、数字の書かれた画像を+-クリックで増減させる方法
・それも無理ならクリックするごとに☆画像を増やす方法
・javaで無理ならFLASHのサンプルなどあればご教示いただけると幸いです。

OSはXPです。ブラウザは今のところIE6ですが、特に何でもかまいません。

263:デフォルトの名無しさん
08/11/24 03:19:42
>>262
画面の解像度を VGA にするとか。

264:デフォルトの名無しさん
08/11/24 03:49:53
JAVA?アプレット?javascript?

エスパー的にはjavascriptはスレ違いとしか応えようがないぜ

JavaScript
スレリンク(tech板)
ここで質問するといいんだろうか

265:デフォルトの名無しさん
08/11/24 06:06:02
①Map.Entry<String, Integer> x 
②y=y+x.getValue(); 
③System.out.println(y); 
④bw.write(y);
①のようにマップのエントリを行い、
②でintで宣言したyとxの値を足した場合
DOS画面では結果が表示されるのに(③)、ファイルに保存した場合(④)■的な文字化けになってしまいます。
MAPの値を直接足すのはダメなのでしょうか?文字コードも色々変えてるのですが変わらず困っています。
心当たりのある方お願いします。

266:デフォルトの名無しさん
08/11/24 06:16:56
バイナリで書き込んでると予想

bw.write(""+y);

こんな風に""+を追加したら文字列として書き込んでくれるかもしれない

267:デフォルトの名無しさん
08/11/24 06:23:09
>>266
て…天才だ!!!!!
しかも即レスでありがとうございます!!感動しました。
仕組みはよく分からないんですがバイナリになるんですね。
ここで聞いてよかった…。感謝します。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch