【初心者】Java質問・相談スレッド109【大歓迎】
1 :
デフォルトの名無しさん :
2007/11/25(日) 12:36:51 プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。
http://pc10.2ch.net/hp/ 過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
【初心者】Java質問・相談スレッド108【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1194442749/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝のう存じます。
次スレは
>>980 あたりで。
Jarを作ろうとしてますが、マニフェストに、javaコマンドへのオプションをどう指定したらいいか分からない ぐぐって仕様っぽいのを見たけど書いてないし、ひょっとしてないのかな? -Xmx512Mを指定したいんだけどどう書いたらいいかご存じだったら教えて下さい
>>2 無理。
Jarのマニフェストファイルに記述された内容は【Runtime起動後、アプリ軌道前に適用される】んだから、渡せる方がおかしいだろ?
起動用のbatファイルを提供するのが一般的。
どうしてもダメならばJava内でRuntime.exec() あたりを使い、別のVMを起動する(この時に-Xmx512M等を指定する)
携帯電話のアプリを作りたいのですが何を用意すればいいですか?
作りたいキャリアのSDK持って来る。
>>3 Thx
>どうしてもダメならばJava内でRuntime.exec() あたりを使い、別のVMを起動する(この時に-Xmx512M等を指定する)
これでいってみます。
>渡せる方がおかしいだろ?
そうかも知れませんが、(Winでは)ダブルクリックで起動出来ることを謳っているわけですし
内部的に上記のようなことをしてくれる仕様があってももよさげに感じます
>>6 ダブルクリックで起動は、Windowsの機能であるから、
その機能で補完するのが筋ではないか?
8 :
デフォルトの名無しさん :2007/11/25(日) 14:47:33
右クリック開くのほうが多用する
Java3Dを勉強しはじめたんですが、アニメーションをしてみたいとAlphaについてみてみたら 周期的な動作でなんか違うと思いスレッドを用いたアニメーションしたいなと考えているのですが そこらへん解説してるサイトとかありませんか? それらしい単語でググっても見つからなくて困ってます。
>>6 winなら、exewrapを使うとか
VMの引数も指定できたはず
windowsしか触ったことが無いんだけど他のOS―例えばLinuxは ダブルクリックで起動できないの?逐一java Hoge?それともbatファイルみたいなの書くのかな。
Linuxは知らんが、macはjarダブルクリックで起動できるね
>>12 CUIからどうやってダブルクリックするの?
>>14 だれも CUI の話なんてしてないわけだが。
「ダブルクリックで起動」ってのはOSのインターフェイスなわけで、そこに起動引数を追加したりするならばOS側に依存する(exeなりbatなり)って話でしょ。 CUIのようにダブルクリックというインターフェイスがない事もあるわけで、>7の言うようにOSの機能で補完するのが筋ってこと
>>14 ,15
かまととぶった嫌味ったらしいレスにわけだが反論・・・・!・!?
この何百回繰り返されたかも分からないやりとり・・!!
お前らこそム板住人の・・鏡・・だ!!
マウス使える CUI があるのも知らんようだが。
取れてない揚げ足取りほど寒いものは無いな
m9(^Д^)プギャー
問題はOS側の話かJava側の話かも切り分けられない連中が増えたという事だ
×(Winでは) ○ファイルの関連付けが出来るGUIを持つOSでは
ジェネリックに関する質問です。 static <T> T as( Object o ) { return (T) o; } というコードの動きがよく解りません。 Tという総称型にキャストし、<T>が戻り値の型となることは解るんですが、<T>の後ろのTが何を意味しているんでしょうか?
<T>の後ろのTはそのメソッドの戻り値の型で<T>はメソッドのみ総称型を使うときのおまじない。
テキストファイルのInputStreamを入力として受け取って、 a行b列から、c行d列までの文字列を読み取る処理をしたいんです。 readLine()とread()を使って実装するしかないでしょうか…? よろしくお願いします。
>>25 逆でしたか・・orz
<T>がどんなおまじないなのかが知りたいんですけど、教えていただけませんか?
<T> は、Tが総称型であることをあらわしている 単に static T as( Object o ) { return (T) o; } って書いたら、T が何のことかわからんだろ クラス T が見つかりませんってエラーになる
>>26 Q. 標準API で一番楽な方法は?
A. BufferedReader.readLine() 使え
Q. 行文字列作るオーバーヘッドが気になります
A. FileChannel でバッファに読み込んで先頭から改行の数数えれ
30 :
デフォルトの名無しさん :2007/11/25(日) 17:39:25
SQLデータベースについての質問なのですがjava.sql.Connectionのインスタンスで データベースに接続しますよね?そのConnectionのインスタンスでStatement のインスタンスを作るわけですが、これに使用限度あります? (例えば一度Statementインスタンス作ってから同じインスタンスで2度execute メソッド実行するとそのインスタンスは無効になるとか・・・)
>>30 closeするまでは有効じゃね?
とはいっても一般的にはトランザクション単位で破棄して作り直すか、その辺はフレームワークに任せてしまうだろ
>>30 128 回以上実行すると 1 回例外になっただけでゲームオーバーになるから注意しろ。
33 :
デフォルトの名無しさん :2007/11/25(日) 17:52:22
>>31-32 通常の使用では無問題って事ですね。どうもありがとうです。
>>29 ありがとうございます。FileChannnelで実装してみようと思います。
しかしやはり改行を数えるしかないのですね…
LineNumberReaderを使えば内部でカウントするだろ?
改行数判定しなきゃいけないのは変わらんのでは。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>think a style :: 8.5</title> <link rel="stylesheet" href="script/css.css" type="text/css"> <script src="script/java2.js" type="text/javascript"></script> </head> <body onLoad="MM_preloadImages('image/bbs_ura.gif','image/about_ura.gif','image/top_ura.gif','image/bookmark_ura.gif')"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td width="417" align="center" valign="top" bgcolor="#EFEFEF"><img src="image/diary_top_aug.gif" alt="AUGUST" width="417" height="80"><br> <table width="384" border="0" cellpadding="2" cellspacing="0"> このソースってどうなんですかね。古いページのソースなんですが・・・。 ばれると嫌なので所どろ削ってありますけど何かあるでしょうか?
すっげぇスパイコードだな。
言語はhtmlなのかな? javaをかじった人が作ったのかどうかがよく分からないんですけど。
>>37 どうなんだ?って何を突っ込んでもらいたんだ
HTML を見せて書いた人間をプロファイルしてみせろと言うことか?
45 :
デフォルトの名無しさん :2007/11/25(日) 19:39:16
きっとjavascript
46 :
デフォルトの名無しさん :2007/11/25(日) 20:21:29
JavaBeanを標準機能でXMLに落とすことが出来ると聞いたのですが どうすれが出来るでしょうか。
java.beans.XMLEncoder かな
enumでエラーになるバグは直った?
49 :
デフォルトの名無しさん :2007/11/25(日) 22:09:37
クラスmain内で、 クラスAをインスタンス化して、 aa = new A(); クラスAのインスタンスを引数にクラスBのメソッドinBを呼び出し、 B.inb(aa); クラスBのメソッドinb内でクラスAの変数int hoge[i][j];を A.hoge[i][j]のように使うと.シンボルが解決できないとエラーが出ます。 クラスAの変数int ohen;をA.ohenとするとエラーがでません。 なぜこうなるか教えてください。
C言語のgetpass()みたいに、標準入力に入力したパスワードをechoしないで受け取ることってできますか? apidocで探しても、getpassと同じような機能のメソッドを持つクラスが見当たりません。
できます
>>49 そのA.hoge[i][j]は
クラス変数ですか?
それともインスタンス変数ですか?
A.hoge[i][j]でOKなら前者
aa.hoge[i][j]でNGなので前者w
A.ohenでも同じかな?
53 :
49 :2007/11/25(日) 22:24:51
すみませんA.hoge[i][j]じゃなくてaa.hoge[i][j]。 A.ohenじゃなくてaa.ohenでした。
>49 ソース示せ 解決できない理由はスペルミスからアクセス修飾子まで色々ある Aの変数int hoge[][] の部分だけでもコピペしてくれ。 ついでに言えば、int[][] hoge と書こうな
>>50 java.io.Console#readPassword
そんなんあったかと思ったら 6.0 か。 主要 AS で 6.0 対応してるのってもうあんのかな。
readPasswordは初めて知った 問題は7への移行タイミングだな、5と6はそこまで大きく変らないが7でまた大幅に変るらしい ASってアプリケーションサーバーの事か?
58 :
49 :2007/11/25(日) 23:46:40
>>52 ,
>>54 部分的に抜き出したものです。
class A{
A(){
int[][] hoge = {{ 0,0}, {-12, -15}, { -1, -3} };
int ohen = 1;
}
}
class B{
static int inB(A aa){
int ae = aa.hoge[1][1]; // aa.hogeをA.hogeにしてもエラー
int ao = aa.ohen; // 同様
return ae;
}
}
class Main{
static void main(){
int b;
A aa = new A();
b = B.inB(aa);
System.out.println(b);
}
}
コンパイルできませんでした。シンボルesbd1、ohenが解決できません。
初歩的なことが分かってなくてエラー出してる気がしますが、よろしくお願いします。
>>58 最初にローカル変数・インスタンス変数・クラス変数の違いを勉強してください
てか、クラスの基礎の部分すっとばしいてコンパイルできねぇじゃねえよw
>>58 Aクラスのコンストラクタで何をかいてるの
入門書にあるクラスの章から勉強しなおしっ
61 :
デフォルトの名無しさん :2007/11/26(月) 00:05:21
ひどいな
62 :
49 :2007/11/26(月) 00:13:20
勉強してきます。 ありがとうございました。
63 :
デフォルトの名無しさん :2007/11/26(月) 00:15:50
ソース自体を出力するにはどうしたらいい? 当たり前だが↓みたいなのはダメだった class test1{ public static void main(String args[]){ System.out.println("class test1{ public static void main(String args[]){ System.out.println("Hello World!"); } }"); } }
"class test1{"+ "public static void main(String args[]){"+… みたいに繋げば
>>63 ソースファイルをFileReaderで読むくらいじゃね?
変数宣言でinterfaceを型に指定したとき、変数に収まる物の実体っていうのは 何になるんでしょうか?インターフェイスのインスタンス? インターフェイスのインスタンスを引数に持つメソッドがあったりするんだけど そのインスタンスを渡されてどういう用途にするのかわからない… これが委譲ってこと?
>>66 一言で言えば、変数の型は抽象的な型でおkという事
山田さんってインスタンスは、日本人型でもOKだし、人間型でもOK、でも猫型には入らない
インターフェイスはインスタンスを生成できない
でも、型としては有効。
ただそれだけ。
インターフェイス型を引数に持つってことは、インターフェイスで定義されたことを満たしていればどんな変数でもOKという事だ。
引数がListであれば、ArrayListのインスタンスを渡しても、LinkedListのインスタンスを渡しても動作が保証される。
だが、ArrayList型を引数として指定されていると、LinkedListは渡せない。
>>63 test1.class と test1.java を同じディレクトリに置いておいて
Reader in = new InputStreamReader(test1.class.getResourceAsStream(test1.class.getPackage().getName() + "/test1.java"));
>>66 型というのは、のぞき窓のようなもの。実体は生成されたときのまま。
型に入れられた実体は、型の部分だけ見えるようになっている。
委譲というのは、継承ではなく、求める機能を持つ実体を、メンバとして保持し、
必要に応じて、それを参照するようにメソッドを実装すること。
二度手間のように思えるかもしれないが、継承では得られない利点があるため、
広く利用されている手法。
>>67 >>69 ありがとうございます。ずいぶん視界が開けた感じがしました。
メソッドの引数にinterfaceがある場合、それを受けたインスタンスには
そのinterfaceの実装がある、ということになりますか?
>>70 メソッドの引数にあるインターフェイスとクラスの違う点は無い。(通常は無いはず。ごめんよ)
どちらも、その実装か、それ自身もしくは継承された"クラスの実体"を求めている。
メソッド実装側で仕様として決められて、そのとおり実装されている場合は、
引数で指定された型のサブクラスにキャストされ、それらのメンバが利用されることもある。
>>71 ははぁ、なるほど、わかってきました。
これは一種のキャストっぽいイメージなんですかね。
あるオブジェクトに対してinterfaceを渡す事で、それ自身、もしくはその親に
定義されたメソッドと指定型のクラスを保持する、みたいな。
この辺のお話をもとに自分でinterfaceとclassつくって実験してみます。
ありがとうございました。
serialVersionUID ってserialver 使わなくてもクラスの内部フィールドやメソッドなんかの インターフェースに基づいて自動で付けてくれるし、それが変わったら直列化された データに互換性がないってのは分かるけど、わざわざプログラマに互換性を選択する 余地を残したのは ・メソッド名やパラメータが変わったりメソッドの追加/削除はあったけど内部フィールドは 変わっておらず、直列化されたデータに互換性があると保障できるとき。 ・内部フィールドは変わってないけどそこに持つデータの定義が変わったから以前に直列化 されたデータが使えなくなったとき。 を考慮したって事? クラスに修正が入ったのに直列化されたデータに互換性があるなんてどうやって 保障するんだろ。世の serialVersionUID は全て直列化の仕様を理解してる人が付けてるんだろうか。
serialVersionUIDが異なると読み込むことさえ出来ないから フィールドが追加になったり意味や有効な値が変わったりした場合は readResolveで対応するとかして以前と互換性がありますよと プログラマがそれを保証できる場合に以前と同じserialVersionUIDを付ける わざわざ対応する必要もないようなささいな修正(バグfixとか?)や 単なる機能(メソッド)追加の場合もあるし そのたびにいちいち以前のデータを読み込めなくなってたら永続化になんか使えない
Effective Java 読もうぜ
クラスAがクラスBのオブジェクトを集約するときは、 クラスAのフィールドにBのコレクションを用意しますよね…? そのフィールドがnullで初期化され、オブジェクトが割り当てられる 保証が必ずしもないときは、クラスAの利用側(仮にクラスC)は 毎回nullチェックすることになると思うんですが、煩わしいです。 こういう場合にもNullオブジェクトを使ってもいいんでしょうか? -- class A { public java.util.Vector<B> vector = null; } class B { } class C { public static void main(String args[]) { A hoge = new A(); if(hoge.vector != null) <なんらかの処理> } }
>>77 vectorがnullでないことが自然なのなら、
Aのコンストラクタでvectorをnull以外に初期化しておけばいい。
vectorがnullであっても構わないのなら、
nullチェックの煩わしさを避けるのにnullオブジェクトパターンを使う手もある。
でも、そもそもvectorフィールドがpublicになって外部に見えているのが問題な気がする。
vectorに何かの処理を行うのはAにやらせるべきだと思う。
その何かをやらせるメソッドでnullチェックをやればnullチェックが分散することもないし、
nullの時にvectorlazy initializeするとかの処理もひとつにまとめられる。
読み取り専用でvectorを外部で使いたいのならvectorのコピーを外部に出せばいい。
> vectorlazy vectorをlazy
>>78 >vectorに何かの処理を行うのはAにやらせるべきだと思う。
なるほど。それだと利用側がVectorを知ってる必要もなくなるんですね。
addやremoveなどの公開メソッドをAに置いて、それが呼ばれたら
nullチェックしたあとにvector本来のメソッドに委譲するように書いてみます。
レスありがとうございました。
>>77 そのアクセス修飾だと、他から null を代入出来てしまうので
仮にNullオブジェクトを使っても nullチェックを無くすことができない。
あくまでも、アクセス制御を完璧にした上で、null値の替わりに用いる。
nullチェックを減らすこと等を目的としている。
>>81 >仮にNullオブジェクトを使っても nullチェックを無くすことができない。
実際はpublicではなかったのですが、アクセッサを通してそのまま
Vectorのインスタンスを返したり代入できたりしていたので仰る通りの問題が…。
勉強になります。レスありがとうございました。
コレクションをフィールドに持つクラスは、コレクションに対する外部からの
アクセスを許さずに、コレクションが提供するメソッドを全てラップすべきなのですね。
Javaにも(C++みたいな)const修飾子が欲しい……
84 :
デフォルトの名無しさん :2007/11/26(月) 13:24:41
すみません。JSP/サーブレットの本を1冊買ってやっているんですが、本のソースをアレンジしたところで 躓きました。 <% ソース %>のスクリプトレットが2箇所あります。JSPのソースの上のほうと下のほうにあるんですが、 上のスクリプトレット内で宣言・使用した変数を下のスクリプトレット内で使用したいとおもい使用したんですが エラーになります。 自分でしらべたところ、<%! 各宣言 %>とすればどこのスクリプトレット内でも使用できるそうですが、 これはサーブレットでのグローバル領域での変数宣言と同じで各ユーザーから使われてしまうものとおもわれます。 サーブレットでのdoGet()内と同様に各ユーザー別々に使用できる(スレッドセーフな?)使い方をしたいんです。 どうすればいいでしょうか?ご教授願います。一応次のレスにソースも載せます。
85 :
84 :2007/11/26(月) 13:28:20
<%@page contentType="text/html; charset=Windows-31J"%> <%-- <% String flag = request.getParameter("flag"); if(flag.equals("true")) { String numberStr = request.getParameter("number"); String error = null; int number; if(numberStr==null || numberStr.length()==0) { error = "なにか入れてね"; } if(error == null) { try { number = Integer.parseInt(numberStr); if(number<0 || number>9) { error = "0〜9までの数字を入れてね"; } } catch(NumberFormatException e) { error = "数字を入れてください"; } } } %> --%> <HTML> <BODY>
86 :
84 :2007/11/26(月) 13:29:32
<H2>数当てゲーム</H2> 0〜9の数字を入れてください <FORM ACTION="../servlet/reqattr.GuessServlet"> <INPUT TYPE="TEXT" NAME="number"> <INPUT TYPE="SUBMIT" VALUE="送信"> </FORM> <%-- <% if(flag.equals("true")) { if(error==null) { out.println("はずれ。数字 = " + String.valueOf(number)); } else { out.println(error); } } %> --%> </BODY> </HTML> 下のスクリプトレット内でerror変数とnumber変数がエラーを起こしますので コメントアウトしています。
どこに質問していいのか分からなかったので、ここに書きます
スレが違っていたらすいません
このサイトを参考にして
ttp://www.thinkit.co.jp/free/article/0606/13/3/ eclipse+ibatis+abator+DB2で実行しようと思ったのですが、以下のエラーが出てうまくいきません
Table configuration with catalog null, schema public, and table SHAIN did not resolve to any tables
どなたかよろしくお願いします
>>84 私はJSPはまったくやらないが、本で勉強してるレベルなのに、
いきなり知らない文法を試そうとするのかな。
やりたいことが載ってる別の本を用意したほうが勉強になると思うのだが。
89 :
デフォルトの名無しさん :2007/11/26(月) 14:06:29
>>84 これがコンパイル通らない理由が分からないのかな?
if(num < 0) {
String msg = "error";
}
System.out.println(msg);
普通session変数使うよな
初期化されていない可能性があります
>>88 でもさー、これがこうだったら、あれがこれでもできるんじゃね?
って勘でいろいろ試さない?俺はいろいろ試していいと思うんだけどなー
93 :
デフォルトの名無しさん :2007/11/26(月) 16:41:51
てかそうしないと上達しないし 自分のライブラリも増えないだろ
文法もまともに学ばずにいきなりJSPに手を出し、はまるのはただの馬鹿
っつーかどんな種類の変数が存在するか説明せずに いきなりサンプルから始まる本の方が悪いだろ
96 :
84 :2007/11/26(月) 17:15:01
すみません。みなさん。ちょっと家事をやってたらわかりました。
>>89 さんのおっしゃるとおり、ifブロックの中で宣言してました。。
ですから、ただ単にifブロック外で使えないという単純なミスでした。
なんというか、お粗末な結末で大変申し訳なくおもっております。
考えて労力を使ってくださった方々、たいへんありがとうございました。
97 :
デフォルトの名無しさん :2007/11/26(月) 21:49:24
private static ResourceBundle Property_File = resourceBundle.getBundle(PROPERTYFILE); private static final Properties property = new Properties(); static { initialize(); } public static void initialize(){ prpper.clear(); for(Enumration e = Property File.getKeys();e.hasmoreElements();){ String Property = (String)e.nextElements(); property.put(PropertyKey,Property_File.getString(PropertyKey)); System.out.println("変数名="+PropertyKey); System.out.println("内容="+Property_File.getString(PropertyKey)); } }
98 :
デフォルトの名無しさん :2007/11/26(月) 21:51:58
>>97 です、質問なのですが
Forループを抜けた後にファイルの内容を変数ごとに個別に出力させるにはどうすればよいかいいですか?
//ad.propertiesファイル
ad.pathname1=c:AAA/BBB/CCC;
ad.pathname2 =c:DDD/EEE/FFF;
ad.pathname3=c:GGG/HHH/III;
上記のプロパティファイルの内容を個別に出力させたいです。
>>98 forループ抜けた後に…云々というのは、ループ外で定義した変数に
読み込んだ「ファイルの内容」を保持しておけば良いんじゃないの?
あとは日本語が理解できないのでパス
100 :
デフォルトの名無しさん :2007/11/26(月) 22:46:09
>>99 さん
for文を抜けた後の処理にfor文内で読み込んだファイルのパスをpathname1、2、3と個別に出力させたいのですが、
わかりますでしょうか?
>>100 「ファイルのパス」「個別に出力」等の単語が指し示すモノ・状態が分からない。
java.util.List<String> list = new java.util.ArrayList<String>(); // ループ外で定義した変数
for (...) { list.add( Property_File.getString(PropertyKey) ); } // 読み込んだ「ファイルの内容」を保持
...Arrays.toString(list)...等、希望の出力書式と出力先に。
日本語でおk
103 :
デフォルトの名無しさん :2007/11/26(月) 23:16:01
>>101 さん
失礼しました、ad.propertiesファイル にあるpathname1、pathname2、pathname3
の内容を出力させたいです。
>>103 三回目なのでそろそろ当たりを引きたいのだが…私、ESPレベル低いから
「ad.propertiesファイル」に記述されている3つのファイルパスを取得、
それらのパスが示すファイルデータを、何らかに表示したい。
ということかしら。
で、File(String) に突っ込んで、StreamかReaderで普通に読み込めば良いんじゃない?
107 :
デフォルトの名無しさん :2007/11/27(火) 00:17:37
>>106 さん
解釈有難う御座います、その通りです。pathname1等には、
デスクトップに貼り付けてあるファイルまでのパスが記入してあり、pathname1に入っているファイルパスにアクセスログ等を記述するようにしたいです。
わかりますでしょうか?
やっぱり日本語で(ry
109 :
デフォルトの名無しさん :2007/11/27(火) 00:22:27
質問です。jarファイルでハマっています。 バッチからjavaプログラムを起動するときに、MySQLに接続するjarファイルが上手く使えないです。 エクリプス上では上手く接続できます。 (実行>起動構成の実行>クラスパス>ユーザーエントリー>プロジェクト名>外部JARの追加 にて設定) このエクリプスの起動オプションと同じようなものをバッチに付け加えれば上手くいくかなと思いますが、そこが上手くいかないのです。 現状では、 java -classpath . -jar "C:\Program Files\Java\mysql-connector-java-5.0.4\mysql-connector-java-5.0.4-bin.jar" プロジェクト名.hoge で起動すると Failed to load Main-Class manifest attribute from・・・ のエラーが出ます。 また、-jar 以下のオプションを外して実行すると java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver・・・ のエラーが出ます。 ちなみに、echo %classpath%をしてもクラスパスは通っています。 詳しいかた、よろしくお願いいたします。
111 :
デフォルトの名無しさん :2007/11/27(火) 00:23:08
>>108 さん
「やっぱり日本語で(ry 」とはどういうことでしょうか?
112 :
109 :2007/11/27(火) 00:27:57
ちなみに、 System.getProperty("java.class.path") ; の一行を加えても変化なしでした。 また、Failed to load Main-Class manifest attribute from・・・ ではjarファイルの中にメインクラスがねーよというエラーと推測しますが では何故エクリプス上では問題なく動く(DBの中身の出力可)のかが分かりません・・・
114 :
109 :2007/11/27(火) 00:42:28
>>113 ありがとうございます!
そのページは見たつもりでしたが、見落としがありました。
クラスパスを2個以上設定し、区切るときはセミコロンで区切れば良かったのですね。
java -classpath .;"C:\Program Files\Java\mysql-connector-java-5.0.4\mysql-connector-java-5.0.4-bin.jar" プロジェクト名.hoge
これで実行成功しました!
jarファイル壊してるような気がするのは漏れだけ?
>>115 どのあたりが気になるところなのだろう。
第二東京弁護士会は男性差別です。
http://niben.jp/02topics/2007/070327.html [抗議内容]
女性専用休憩室
http://niben.jp/02topics/2007/070327.html はいったいそういうつもりなのか?
このような男性差別は憲法14条に違反し、不法行為となる。
第二東京弁護士会が昨今問題となっているかかる男性差別を行うのはどういうつもりなのか?
[返答]
ご意見拝見しました。当会では司法改革の一環として女性における司法アクセス障害の解消のために男女共同参画に取り組んでおります。
そして、男女共同参画を促進するための積極的是正措置を憲法第14条の性差別禁止に反するものではなく、
むしろ憲法第14条に定めた男女平等を積極的に実現するためのものと考えております。
政府も女性差別撤廃条約の批准を行い、国内的には男女共同参画社会基本法を制定し、
基本法では積極的是正措置についても検討すべきことを定めています。
当会の女性専用室は、これまでの会員室は男性会員の利用者がほとんどであり女性会員が使いづらいという問題点を是正し、
会館において仕事の合間に産前産後の場合をはじめとして休憩を取ることができるようにした積極的是正措置にあたるものです。
その広さも会館のごく一部を女性専用としており男性会員の利益を著しく損なうものとはいえない範囲で設置しました。
ご参考までに、東京弁護士会では会館建設時から女性会員室をゆったりと設けております。
何とぞご理解賜りますようお願い申し上げます。
↓のコードを実行するとすごく時間がかかってしまうのですが、変なことしちゃってるのでしょうか? BufferedReader br = new BufferedReader(isr); String strLine, source = ""; while((strLine = br.readLine()) != null){ source += strLine + "\n"; } 開いているファイルのサイズは170KBで、このコードを実行しきるのに5秒以上掛かります。 速度を改善する方法があれば教えてください。よろしくお願いします。
ファイルがネットワーク上にあるとか
>>118 String + Stringをするたびに新しいStringインスタンスを生成するため、
Stringの加算はコストが高くつく。
StringBuilderかStringBufferを使ってappendしていき、
最後にStringに変換する。
例えば、
BufferedReader br = new BufferedReader(isr);
String strLine;
StringBuilder sb = new StringBuilder();
while((strLine = br.readLine()) != null){
sb.append(strLine);
sb.append('\n');
}
String source = sb.toString();
あとは、ストリームの正体によるけどストリーム自体が遅いとか。
Java が起動する時間も込み、だとか 後、ループ内での String の連結は StringBuilder にしたほうが… 一応メモリーと複製速度が増える要因ではあるが…170kB程度じゃなぁ
>>118 わざわざ1行ずつに分解したのを改行付加しながら連結って、すごく無駄のような
改行コードを統一したいとかなのかな
>>121 ないので、for(int i=0; i<size; i++)でまわすか、カウンタ変数使うか好きなほうをどうぞ
独自のIteratorでも作成すれば可能だけど、可読性損なうから意味無し
RubyはRuby、JavaはJava。
すみませんが、質問です。 Java5以降の拡張for文では、: の右辺にイテレータを取ることはできません。 java.lang.Iterableインターフェースを実装したクラスのインスタンスのみが 受け取れます。 既存のライブラリにあるAClass(修正できない)に、イテレータを返すメソッ ドAClass#iterator()があるのですが、このAClassはIterableインターフェー スを実装していないので、拡張for文で利用することはできません。 どうするのが一番良いでしょうか?Iterable<T>を実装したアダプタクラスを 作るのが良いのかなと思いますが、もっと良い方法があるなら知りたいです。
拡張for文を使いたいがためにIterableを実装するというのも本末転倒な気がしないでもない iterator()が返すIteratorを使って普通のfor文なりwhile文なりを書くのではだめなの?
>>126 アダプタでいいんじゃないかな
class AClassAdapter implements Iterable<?> {
private AClass a;
public AClassAdapter(AClass a){this.a=a;}
public Iterator<?> iterator(){ return a.iterator(); }
}
AClass a = ...;
for (Object o : new AClassAdapter(a)) {
...
}
継承できるなら
class IterableAClass extends AClass implements Iterable<?> {
}
でも俺なら単純に
for (Iterator<?> i = a.iterator(); i.hasNext(); ) {
...
}
と書く
>>128 単にテキストファイルをそのまま読み込んで全体を文字列にしたいだけなら、
行単位で読み込むのでなく、
char配列を引数に取るreadメソッドがあるので、
これを使ってもっと大きな単位で読み込んで、
最後にchar配列をStringにすればいい。
極端なことをするなら、char配列をファイルの文字数分用意して一気読みをする。
131 :
デフォルトの名無しさん :2007/11/27(火) 14:28:16
getNameとか、getとかsetは小文字なんですか? そのような名前の付け方の規則がよくわからないのでおしえてください。 どうしてもわかりません。よろしくおねがいします。
>>131 別にgetとかsetだけじゃなくて、メソッド名は全部、先頭は小文字
文字列を定数にすることってできますか? 例えばINTERRUPT_MODEって定数があったら "INTERRUPT_MODE"って言う文字列を INTERRUPT_MODEにする方法みたいなやつです。
enum Mode { INTERRUPT_MODE, OTHER_MODE }; String s = "INTERRUPT_MODE"; Mode mode = Mode.valueOf(s);
136 :
121 :2007/11/27(火) 15:09:21
>>124-
>>125 そうですか...。ありがとうございました。
>>131 君だけが勝手に大文字で始めると他の人が混乱するから
>>134 Enumでもいいけど、static final String MODE = "MODE";じゃ駄目なのかい?
>>126 AClassが対応するまで拡張for文を使わないが正しい
>>137 それでOKでした。
有難うございます。
140 :
デフォルトの名無しさん :2007/11/27(火) 15:29:56
【質問テンプレ】 [1] 授業単元:プログラム言語2 [2] 問題文:課題A で作成したプログラムを以下のように修正する. * gcc kadai08b.c でコンパイルすると5パーセントの商品価格だけ表示される. * gcc -DZEI=*** kadai08b.c でコンパイルすると***パーセントの商品価格だけ表示される. * gcc -DDEBUG kadai08b.c でコンパイルすると5パーセントの消費税と商品価格が表示される #include <stdio.h> #include <stdlib.h> #define a 5 #define TAX(x,y) (x+y)*a/100 #define PRICE(x,y) (x+y)+(x+y)*a/100 int main(void) { int x,y; printf("tax of x+y %d \n", TAX(x,y)); scanf("%d",&x); printf("lnput an integer y:"); scanf("%d",&x); printf("tax of x+y: %d \n",); printf("price of x+y %d \n", PRICE(x,y)); return0; } [3] 環境 [3.1] OS: (Linux/) [3.2] コンパイラ名とバージョン: (gcc) [3.3] 言語: (C) [4] 期限: ([2007年11月28日まで] [5] その他の制限: (Cプリプロセッサぐらいまで) 課題Aはなんとか出来ましたが、課題Bがわからないので、宣しくお願いします。 貼りつけたプログラムは、課題Aが完成したものです。
141 :
デフォルトの名無しさん :2007/11/27(火) 15:34:02
貼るところ間違えました。 すみませんでした。
142 :
デフォルトの名無しさん :2007/11/27(火) 15:37:57
javacについて(というより環境変数についてになると思いますが)質問です。 普段はC:\Program Files以下にjdkをインストールするのですが、 今回外付けのHD上にインストールしてみました。 インストール先dirは「E:\10_ProgramFiles」以下で、 パスも「E:\10_ProgramFiles\Java\jdk1.5.0_14\bin」に通しました。 で、ここからが問題なのですが、コマンドプロンプトで 「java」コマンドは認識されるのですが「javac」コマンドが認識されません。 メッセージはお約束の 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 です。 「javac」ではなく、フルパスで 「E:\10_ProgramFiles\Java\jdk1.5.0_14\bin\javac」と打つと認識されます。 同じようなことでお悩みになった経験のある方いらっしゃいませんか?
143 :
デフォルトの名無しさん :2007/11/27(火) 15:42:31
JSPの<%@ page contentType="text/html; charset=Shift_JIS" %> って何のためにエンコーディング設定してるの?フォーム情報をShift_JISで送れって言う命令? これ指定してもutf-8とかでページが表示されることあるんだけど。だとしたら、ページの エンコードを指定してるわけじゃないよね。ページのエンコ指定ならhtmlのmetaタグで指定すればいいわけだし。
>>142 単純にパスが通ってません。
java.exeは実行できるのは、単にwindowsのシステムフォルダにjava.exeがコピーされているからです。
パスの指定でJAVA_HOMEとかを使ってませんか?
>>143 HttpResponseのヘッダ情報じゃね?
実際のエンコとHTMLmetaのエンコ指定とヘッダと混在するのがカオス
146 :
デフォルトの名無しさん :2007/11/27(火) 15:54:00
>>144 142です。
一発で解決しました。
ありがとうございます!
147 :
143 :2007/11/27(火) 16:12:27
>>145 どうもありがとうございます。そうなんですね。よく覚えておきます(`・ω・´)
148 :
126 :2007/11/27(火) 16:49:38
>>127 ,
>>129 ,
>>138 そうなのですか…。どうも従来のfor文が冗長に見えて仕方が無いのですが、
それをそのまま使うべきなのかもしれません。ありがとうございました。
149 :
デフォルトの名無しさん :2007/11/27(火) 20:48:18
継承関係にある2つのクラスのインスタンスってどの様にメモリーに確保されますか?
>>149 そりゃインスタンスが別なら軽症関係にあろうがなかろうが別々の領域に確保されるよ。
152 :
デフォルトの名無しさん :2007/11/27(火) 21:42:08
ありがとう サブクラスをnewするとスーパーとサブで2こ出来るよね
>>152 できねーよ。同じインスタンスだろーが。
だから質問の意図がわかんねーと言ってるんだ 変数ごとにメモリは別の領域に確保される インスタンスごとにグループ化はされている。 あとはどんな型で見るかによって見える範囲が違う
155 :
デフォルトの名無しさん :2007/11/27(火) 21:54:42
でもコンストラクタは上から実行されてインスタンスは下から出来るってどこかに書いてあったけど
インスタンスってのはメモリレベルで見れば変数(領域)を幾つかまとめたもの その確保の順番がスーパークラスからって話で何か問題ある?
そのどこかが何を意図して 「インスタンスは下からできる」 と書いたか分からないが間違い。 new A() とすれば A に必要な領域がスーパークラス分も含めて確保される (VMの実装によるが その領域は連続している)。
領域の確保は宣言した瞬間に全部まとめて。 でも、初期化はスーパクラスから
159 :
デフォルトの名無しさん :2007/11/27(火) 22:14:23
でも、スーパークラスにprivateフィールドとpublicのアクセサ作ってサブクラスに継承するとsuper付けないとアクセス出来なくなるような?
publicアクセサを上書きしてないなら super 付けなくてもアクセスできるし、 privateフィールドには super 付けてもアクセスできない。
アクセス制御とメモリのモデルは全くもって無関係だよ superを付けるのは、同じ名前のメソッドやフィールドがあった場合に、コンパイラに対してどのメソッド(フィールド)を使うかを明示する為でしかない。
162 :
デフォルトの名無しさん :2007/11/27(火) 22:29:41
こういう細かいところ書いてある仕様書ってある?
163 :
デフォルトの名無しさん :2007/11/27(火) 22:36:49
なんとなく分かった。 154のがわかりやすかった。全部入ってる下からグループ化されるし。
>>162 JavaVM仕様
概念的なものであれば、言語仕様でも充分に書いてある
Aというベースクラスを継承したB、Cというクラスがあったとして、 分岐を使わずB、Cで処理を分ける方法ってありませんか? A、B、Cともに生成は別ライブラリなので弄れないです。
>>162 ないと思うけど。実装依存な部分の話だし。
>>165 そりゃポリモーフィズムのことをいってんのか?
文脈からすると、A,B,Cのクラスは全部固定に聞こえる。
もしその前提で行くとなると、instanceofで分岐するしかないと思うんだが・・・。
>>167 ジェネリックとかでできないかなぁと思ったんですが。
>>165 サブクラスで挙動変えるのは A, B, C のクラス設計変えないと無理。
もし A がインターフェースなら動的プロキシ使え。
使う側で仕分けするというのはパターンマッチとか関数型言語には良くあるやり口だけど Javaは継承での仕分けしかサポートしてないからね…… 場合によってはVisitorパターンで代用できるが、それを使わずに設計されたライブラリに対しては無力 結局instanceofで手動分岐するしかない。
弄れないならどうにもならんな 最初から分ける処理の部分を分離できるように設計されてなきゃ
>>168 GenericはErasureだから実行時はないものとされるよ。
だから分岐には使えないと……
Classオブジェクトを同時に渡して手動キャストみたいな荒業は出来るがあんまり意味ないか。
>>169 >動的プロキシ
その発想があったか
>>168 ああ、それなら関数のオーバーロード使えばできるよ(たぶん見にくいけど)
一つの関数の名前でA,B,Cそれぞれのクラスについて定義すればいい。
ただし、このメソッドはクラスのインスタンスの型ではなく、変数の型に合わせて呼ばれるから、
クラスAの変数にクラスBのインスタンスを入れたとしても、
void func(A a){〜}
void func(B b){〜}
A b_as_a = new B();
func(b_as_a); //<-呼ばれるのは上
となる。インスタンスの型によって処理を変えたいなら、ポリモーフィズムか前述のinstanceofしかない。
やりたい事が思い切りずれているような気がしてならない俺
>>173 オーバーロードとオーバーライドの違いで苦戦する未来が見えた
176 :
デフォルトの名無しさん :2007/11/27(火) 23:25:23
逆コンパイルは駄目?
良いよ。
なんかここの流れ見てると久しぶりに言語作りたくなってきた 名前はJapaにしようか
>>178 NihongoDeOK をつくってくれ
この流れでどうして言語を作りたくなるのかよくわからんが、名前はNyphon(ニフォン)で頼む。
言語作るなら 1 バイトのプリミティブ型を符号付と符号なしに明確に分けてくれ。 いちいち 0xFF でマスクするの面倒だし、なんかそこだけ気持ち悪ぃ。 byte → 8bit 符号なし (0〜255) → バイナリデータに使用 tiny → 8bit 符号付 (-128〜127) → 整数値として使用
>>181 データ型の要素はすべて直行してるのに、いちいち固有の名前が与えられてるのが不自然なんだよ。
整数型も浮動小数点型も符号のあり/なしと使用バイト数を自由に決められる型にすればいい。
Integer<false, 4> みたいな感じで。もしくはさらに拡大してVar<Numeric.Integer, false, 4>みたいにして全部の型を定義すれば
全部の問題が片付く。頻繁に使うタイプは標準ライブラリで先に定義し解けばいい。
まあ、今のJava言語の使用では到底不可能だけどな。
183 :
デフォルトの名無しさん :2007/11/28(水) 00:21:59
意外に継承ってインターフェイスより難しくないか?
浮動小数点に符号なしなんて作ったらコプロ使えなくなるじゃん。 コプロってもう死語か?
>>184 (先に断っておく、マジレスしてすまん)
コプロってコプロセッサのことであってる?GPUみたいなもんだと解釈していいんだろうが、
それならGPUの指定する型に合わせたサイズと型をライブラリで指定すればいい。
実際、DirectXは標準のD3DXMatrix型じゃなくとも、byte[8]の構造体で処理できる。
ローテート演算子を頼む。 なんでCにはなかったんだろう。
>>185 FPU の事。今はもう CPU にビルトイン状態になっているが、IEEE 754 規格に合わない
浮動小数点形式なんか採用したら FPU 殺してるも同然。
言語作るならばExcelで仕様書を書けばアプリに変換されるコンパイラを付けてくれ
>>187 そうだったのか。それなら、最低限FPUでサポートされる型を標準としてライブラリで定義したらいいんでない?
それとも、FPUで扱えない型があるだけでプログラム全体のスピードが落ちるんだろうか。
190 :
デフォルトの名無しさん :2007/11/28(水) 00:57:25
ユーティリティクラスを作るとき、publicなstaticメソッドを作成して 外部から呼び出す、見たいな事をやってるコードをよく見るんですけど あんなことして遅くならないのですか?
>>189 Java VM は C で書かれてるから Java プログラムで double や float 使わなければ問題はないが、
シミュレーションや数値解析、グラフィック処理やり始めたら他言語にめちゃくちゃ水を空けられる結果になると思う。
ハードウェア未対応な動きをさせる方を BigDecimal のようにライブラリ提供すべきでは。
>>190 そうしない方が速いと思う理由は何ですか?
>>190 どのくらい遅くなるんだい?
1ミリ秒以上の差が出るならば次から考慮するよ
>>191 まあ、現状で特定のサイズ/型に特化したオペレーションがCPU周辺にあるんだから、そうするのが妥当なんだろうけど。
でもそうなると、結局PCの環境によってdoubleやintのサイズが違うとかいう馬鹿なことが起こっちゃう。(Cだけか?
・・・とはいうものの、有効な対策があるわけでもないし、しょうがないのかなあ。
>>190 インスタンス参照してクラス解決してから呼び出すよりは速い。
>>121 亀レスだが、Commons Collectionsってのがあって内部イテレータ用のインタフェースが用意されている。
また、JDK1.7ではクロージャが追加されるとの話もある。
197 :
デフォルトの名無しさん :2007/11/28(水) 01:30:10
>>190 static自体が実行速度が速いんじゃなかったかな?
198 :
190 :2007/11/28(水) 01:50:33
多数のレスありがとうございます。 privateメソッドよりpublicメソッドのほうが遅いってことは、globalに近い 別のクラスのメソッドなんてさらに遅いのではないかと思ったりしたわけです・・・
>>194 C で int のサイズが違うのは 「2 バイト以上 (でその環境でもっとも効率の良い幅)」 という
最低限の保障しか規定していないから仕方がない (double って IEEE 754 準拠だったと
思うけど幅変えられたか?)。あっちは実行効率重視なんだし。
>>198 伝聞を元に推測を展開するより、まずはその手で試してみたほうが良いと思う。
プロマネ志望とかなら良いんだけど。
>>198 > privateメソッドよりpublicメソッドのほうが遅いってことは
そもそも、この部分の根拠は?
private / public で速度の差は考えなくていいと思う C / C++ / Java での差はかなりあるよ
>>198 Ruby みたいに動的に探しに行く言語なら遅くなるかも知れないけど
Java はコンパイルしてしまえば同じ(コンパイル時に見えるか見えないかの違いだけ)
>>203 いやまぁ private は継承の影響を一切うけないから静的で
public は動的ってのはあるから、同じじゃない。
「動的」っても Ruby の動的ってのとは程度が違うけど。
でもまぁ、JITがインライン展開するかの判断には private か public かよりも
メソッド自体の長さとか、使用するスタックサイズとかの方が重要っぽいし、
private だから速いってのは final すれば速くなるって都市伝説と同レベルだと思うぞ。
205 :
デフォルトの名無しさん :2007/11/28(水) 02:24:10
入門書の最初の方にはしょっては有るけど書いてある内容だよね
>>204 staticついてなけりゃだけどな。
private/publicでinvokespecial/invokevirtualの差がつくのは。
JDBC で PreparedStatement 使って前方一致検索するときってワイルドカードのエスケープ しなきゃならない仕様だっけ? PostgreSQL 8.2 だと下のが全件検索になってしまうんだが。 PreparedStatement stmt = con.prepareStatement("SELECT * FROM FOO WHERE NAME LIKE ? || '%'"); stmt.setString(1, "%");
"SELECT * FROM FOO WHERE (NAME LIKE ?) || (NAME LIKE '%')"
javax.xml.xpathの使い方教えてください。
import javax.xml.xpath.*;
211 :
デフォルトの名無しさん :2007/11/28(水) 11:19:08
其れ使い方って言うか?
Jakarta プロジェクトで J2EE コンテナを作ると言う計画がだいぶ前にあったと 思うんですけど、その後どうなったかご存知ですか?
214 :
デフォルトの名無しさん :2007/11/28(水) 17:13:40
下記のプログラムの意味を教えてください。 よろしくお願いします。 import java.util.Comparator; class A { public static final Comparator<A> COMPARATOR = new Comp(); private static class Comp implements Comparator<A> { public int comparator(A d1, A d2) { ---------------------- } } }
javadoc嫁
>>214 Aというクラスがある
Aのstaticな内部クラスとして、Compがある
CompはAクラスのComparatorを実装している
Aクラスには静的変数(定数)としてCompが定義されている
という意味だ。
>>214 そのCompクラスはAの中でしか使わないからAの中で定義されてる
>public static final Comparator<A> COMPARATOR = new Comp();
は、毎回Compクラスのインスタンスを作らなくてすむようにするためのおまじない
Comparatorを『staticネストクラス』として定義しておくと差し替えが利きやすい。 たとえば複素数の比較に『絶対値で比較』『実数部で比較』みたいな複数の比較演算を用意できる。 しかもインスタンスさえあればprivateなフィールドやメソッドにも触れるので実装を隠蔽したままメソッドを書ける。
219 :
217 :2007/11/28(水) 17:33:49
String.hashCode()は、遅延計算(?)してるにも関わらず、 計算時に同期処理をしていませんが、何故問題が起きないのでしょうか。 また、それで問題にならないのにconcurrent.utilの AtomicIntegerが用意されたのはどんな理由からでしょうか。
>>220 String#hashCode()は、何回計算しても毎回同じ結果にしかならないので、同期してなくても問題ない
あるスレッドが計算完了した結果が他のスレッドに伝わってなくても、
再計算することになるので効率は悪いが、計算結果はいつも一緒
AtomicInteger は、そういう単純なケースじゃ済まないときのため
あぁ、あと、最終結果が代入されるだけで、計算途中の中間結果は保存されないからだな。 他のスレッドから見えるのは、初期値のゼロか、最終結果かの2択しかない。 別のスレッドが計算した結果がまだ自分のスレッドには見えてなければ、再計算。 別スレッドの方が先に計算完了しても、そのフィールドには結局同じ値しか書き込まれないので、混乱はまったくない。
AtomicIntegerが必要なのは値のインクリメントっていうか、 getやset単体ではvolatileつけるだけでスレッドセーフになるのに『getして+1してsetする』という お決まりの動作は手動でsynchronizedしないとスレッドセーフになってなかったから出てきた。 AtomicIntegerを使えば、システム側がその『getして+1してsetする』みたいな単位で メモリの処理をやってくれるからsynchronizedしなくても自動的にスレッドセーフになるような、まぁそういうもの。
224 :
デフォルトの名無しさん :2007/11/28(水) 20:46:02
はじめまして。 質問があるので書き込みさせていただきます。 現在アプリケーションを作成していて、AWT/Swing/SWTが混在しています。 元がSWTなんですが、Swingで作っているパネルをSWTと連携させるためにSWT_AWTを利用して SWTに貼っています。 Swingのpanelは連携するときにAWTのFrameになるため、3つが混在している状態になります。 ここで本題なのですが、Swingのpanel部分にスクロールバーをつけることになりました。 普通ならSwingなのでJScrollPaneを利用したらいいのはわかるのですが、AWTのFrameが挟まれているため上手く出来ません。 対処方法などはあるのでしょうか?
AWT/SwingとSWTまぜんなよ
226 :
デフォルトの名無しさん :2007/11/28(水) 21:11:41
>>225 すみません。
Skype apiを利用しているため、SWTありきなんです。
AWTのScrollPaneを使うか、Java7を待つ
ならばSWTだけで組めばいいじゃん
トリプル混ぜは初めて聞いたな。 その発想はなかったわ。 というかSWTはネイティブ依存しすぎてるからAWTより混ぜるな危険なんじゃない? というかSWT使うならAWT/Swing要らんだろ。
混ぜるな危険 いや、マジでちゃんぽんはろくなことないぜ
将来それらが大丈夫だとしても、まず保守性を考えた時点で実務じゃやらないなぁ。 似通ったAPIを3種も混ぜるとかちょっとありえない。 awtにFileChooserが登場したら、それだけは使うかもだけど。
平気でまぜちゃう神経が怖い
Skype API → SWT 必須 プログラマ → SWT 分かんねー、必要最小限にとどめたい というありがちな構造なのでは。サーバサイドの業務システムでもよくあるし。 Wrapper や Facade で何重にも包んだクラスたちが脳裏に浮かびます。
WrapperやFacadeで包むくらいの能力があれば、SWT覚えるだろw もっとカオスなコードだと思われ
担当者のリビジョンが 6 くらいで 3 世代目以降は管理されてないとか。 何で POI の JAR が入ってるかさっぱり分かんないけどとりあえず現状維持みたいな。
そういやJSR-198ってどうなったんだろう。IDE共通のプラグイン規格のやつね。 SunもIBMもExpert Groupだったはずだが、可決後もさっぱり音沙汰ないね。
>>130 ありがとうございます!↓のような感じで出来ました。
{char source[] = new char[4096];
int len;
while((len = br.read(source)) != -1){
sb.append(source, 0, len);
}}
改行文字をわざわざ付けなくても良くなったのでスッキリしました。ありがとうございました。
ApacheのHttpClientを使いmultipartのリクエストを投げたいと考えています。 が、昔あったCommonsの頃にあったクラスがなくなってしまったようで、途方にくれています。 解決策ありましたらばご教授願います。
239 :
デフォルトの名無しさん :2007/11/29(木) 00:34:43
エスパー募集中
宿題スレも手伝って〜
見てきたが宿題スレはちゃんと機能してるじゃないか。
/⌒ヽ / ´_ゝ`)すいません、ちょっとテストしますよ・・・ | / | /| | // | | U .U public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world!"); } }
すいません。教えて下さい。 例えば System.out.println Systemはクラス outはフィールド(java.io.PrintStreamのインスタンス) printlnはメソッドですが このように A.B.C の形をしたものというのは、クラス、フィールド、メソッドと思っていいのでしょうか? また、outはフィールドだけど、java.io.PrintStreamのインスタンスというような使い方 はjavaで何か特別な方法として名前がつけられてるんでしょうか? (継承、インタフェース、みたいな名前がつけられてる?) 質問がわかりにくいかもしれませんがお願いします
> A.B.C > の形をしたものというのは、クラス、フィールド、メソッドと思っていいのでしょうか? よくありません。 > また、outはフィールドだけど、java.io.PrintStreamのインスタンスというような使い方 > はjavaで何か特別な方法として名前がつけられてるんでしょうか? 特別な方法ではありません。
Systemクラスのoutフィールドにはstaticという識別子が付いています。 staticの付いているフィールドはインスタンス化しないでも使えます。 定数にメソッドが付いているって感じです。以下、サンプル。 import java.io.*; class MySystem { static int HOGEGE = 12345; static PrintStream out; static { try { out = new PrintStream (new FileOutputStream("output.txt", true), true); } catch (IOException e) { e.printStackTrace(); } } } public class HelloWorld { public static void main(String[] args) { for (int i = 0; i < 10; i++) { MySystem.out.println(i + " " + MySystem.HOGEGE + " " + "Hello, world!"); } } }
>>244 Javaの場合は命名ルールに従っていれば簡単に見分けが付く
最後に()がついている単語はメソッド
付いていない場合、大文字から始まればクラス名、小文字から始まれば変数名(ローカル変数orインスタンス変数orクラス変数)。
System.out.println() である場合、
Systemはクラス名。
outはフィールドになるが、クラスに紐付いているのでクラス変数と判断できる
println()はメソッドであるから、outの型(クラス)のメソッドと判断できる
〜秒後に計算結果を表示させるにはどんな コマンドを使ったらいいですか?
Timer クラス 単に処理を止めるだけなら Thread.sleep()
>>249 ScheduledExecutor使え
staticな変数の名前は全部大文字&アンダースコア単語区切りにするってのが共通認識だと思っていたんだけど、 最近は普通のインスタンスみたいに先頭小文字方式にするようになったの?SystemクラスしかりColorクラスしかり。
Javaではあんまりしないんじゃないの?Eclipseでも警告されるしね。
>>252 最近つってどちらも JDK 0.9 の時代からそうなんだが。
>>252 どこの共通認識だよw
public static finalだったら大文字&アンダースコア単語区切りだろうけど。
256 :
252 :2007/11/29(木) 10:33:31
>>255 System.out の事だろう
outはいまさらOUTに変更できないから仕方なし
ColorはredとREDの両方が定義されているので後者を使うほうがベターかね
259 :
デフォルトの名無しさん :2007/11/29(木) 10:56:32
ねえ。プログラマやめて5年くらいたつんだけど、またやりはじめたんだけど、 Struts勉強したいんだけど、だいぶ前に買ったStrutsの本で大丈夫かな?Struts1.1ってかいてあるけど。 Struts2系は本がないんで、とりあえずStruts1.2くらいの知識をつけたいんだけどさ。 だめかな?やっぱり。
プログラマ?うそつきめ
疑問なんだが、strutsを使うような場面って少なくない? 小さいwebサイトをstrutsを使って作るとか言ってるマネージャーがいたら、 俺はそいつを信用しなくなるぜ。 スポーツハンティングに出かけると言って、戦車で出かけるようなもんじゃないか?
262 :
デフォルトの名無しさん :2007/11/29(木) 11:04:33
>>260 ほんとだよ。トヨタ系で働いてたよ。
5年にもならないかな4年位かな。まだ、Strutsとか出始めたばかりで
Web+DBPressもNo.4からNo.12くらいまで買ってたよ。
T●Sでやってたもん。
263 :
デフォルトの名無しさん :2007/11/29(木) 11:06:15
ぼくはでんせつのぷろぐらまだったんだ。 そんなことはいいけど、Struts1.1でもいいか教えてよ。
>>261 世の中には髪のとがった上司が多いのですよ。
phpぐらいでいいような気がするけどね。普通なら。
265 :
デフォルトの名無しさん :2007/11/29(木) 11:27:56
javaで連想配列使いたいんですが Hashtable<String, Integer> table = new Hashtable<String, Integer>(); table.put(byteFrequency1[j-1],1); このように変数と変数を引数にとるとエラーでます。。。だめなんですかね??
HashMap<String, Integer> hashMap = new HashMap<String, Integer>(); hashMap.put("key1", 1); hashMap.put("key2", new Integer(2)); hashMap.put(obj.toString(), 3); hashMap.put(obj.toString(), new Integer(4));
Strutsって「戦車」と例えるほどたいそうなフレームワークか? Webアプリケーションのテンプレート(ひな形)が用意されてるだけってだけじゃん。 慣れていれば、小さいアプリにだって使うよ。 Validatorとか画面遷移とか自分たちで作ってバグ仕込んでたらバカみたいだし。 あるものは使う。車輪の再発明はしない。
byteFrequency1[j-1] ここがやばそうな気がする。 何が入っているのかは知らんけど。
>>265 どんなエラーだい?
byteFrequency[j-1]というのは String ?
>>267 慣れていればでしょ?
昔、覚えさせられたんだけど、新しいところは誰も使えないからなぁ。
sevletとかjspを知っているのなら、1日で使えるようになると思うけど、
1からやるのはあまり宜しくない気がする。
java使えるだけの人なら、1週間ぐらいは拘束されるんじゃない?
まぁ、俺はロジック担当なんであまり詳しいことは知らん。
何回か使ったことがあるという程度の知識なんで、間違ったことを言っていたらスマソ
>>265 ループを使ってるのなら、
チェックのために、一度
byteFrequency1[j-1]
を出力させてみたら?
たぶん、nullとかが混じってるんじゃない?
というか、HashMapを使うべきだよね。
273 :
デフォルトの名無しさん :2007/11/29(木) 12:59:02
265です。たくさんのレスありがとうございます。 エラー内容は test.java:39: シンボルを見つけられません。 シンボル: メソッド put(int,int) 場所 : java.util.Hashtable<java.lang.String,java.lang.Integer> の クラス table.put(byteFrequency1[j-1],1); ^ エラー 1 個 です。byteFrequency1[j-1] には0〜255の数値がはいっているんですが・・・。 hashmapとhashtableは何が違うんですかね??
String str = null; str = byteFrequency1[j-1]; これがコンパイル通るかどうか解るか?
WebLogicなんですがwarをデプロイしたときにJSPもコンパイルされるように 設定する方法はないでしょうか? 初回アクセス時が遅いので困っています。
276 :
デフォルトの名無しさん :2007/11/29(木) 13:10:14
>>273 int⇒int のマップをしたいのに、なんで Hashtable<String,Integer> なんだい。
278 :
デフォルトの名無しさん :2007/11/29(木) 14:21:13
>>277 Hashtable<Integer,Integer>にしたらコンパイル通りました。
みなさんありがとうございます。
279 :
デフォルトの名無しさん :2007/11/29(木) 14:50:34
ファイルから16バイトずつを読み込み配列にいれていきたいのですが 今 InputStream bin1= new FileInputStream(new File(FileName1)); ループ Value[i++]=bin1.read(); で、1バイトずつの読み込みはうまくいっているんですが・・。 InputStream bin1= new FileInputStream(new File(FileName1)); byte[] data = new byte[16]; ループ Value[i++]=bin1.read(data); ではだめなのでしょうか??
>Value[i++]=bin1.read(data); そのValueは何よ?
281 :
デフォルトの名無しさん :2007/11/29(木) 15:03:34
>>280 すいません。Valueはint型の配列です。
javaでメール送信すると下記のエラーメッセージが出ます。
どうすればよいのでしょうか?
Caused by: javax.mail.SendFailedException: Sending failed;
nested exception is:
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
javax.mail.SendFailedException: 550 5.7.1 <
[email protected] >... Relaying denied. IP name lookup failed [xxxx.xxxx.xxxx.xxxx]
at javax.mail.Transport.send0(Transport.java:219)
>>281 16バイトずつ読み込むのに、4バイトしかないint型に格納しようっていう、その時点で疑問に思わない時点で問題
コンストラクタと継承について教えてください。以下のようなプログラムを書きました。 A1|public class Oya { A2| protected int v1; A3| public Oya () { A4| v1 = 10; A5| } A6| public void printValue() { A7| System.out.println("v1=" + v1); A8| } A9|} B1|public class Ko extends Oya { B2| public Ko () { B3| } B4|} C1|public class Main { C2| public static void main(String[] args) { C3| Ko ko = new Ko(); C4| ko.printValue(); C5| } C6|} 実行すると v1=10 となるですが、これがよくわかりません。 私は以下のように考えていました。 ・Koのスーパークラスの Oya のインスタンス変数v1が、int なので 0 で初期化される ・Oyaの引数なしコンストラクタ内では、v1 に 10 を代入しているが、 Ko の引数なしコンストラクタが呼ばれていて、Oya の引数なしコンストラクタを オーバーライドしているので、v1 は 0 のままのはず ・printValue() では、v1=0 が表示されるはず サブクラスで引数なしコンストラクタを定義していて、そのなかで super() を書かなくても、スーパークラスの引数なしコンストラクタが呼ばれるのでしょうか?
>>284 そういう事。
コンストラクタの1行目にsuper(xx)が明示されていない場合、暗黙的にsuper()が実行される。
ためしに、Oyaクラスのコンストラクタに引数を追加してみよう
Koのコンパイル通らなくなる。
ちなみに、コンストラクタはメソッドではないので、オーバーライドじゃない(できない)。 それぞれのクラスに定義されるので、staticメソッドに近い存在。 でも、引数が異なる場合はコンストラクタのオーバーロードと呼ぶ
287 :
284 :2007/11/29(木) 15:38:02
どうもありがとうございます。そういうものということで理解しました。
>>285 やってみました。コンパイルできなくなりました。
1行目に super() を書くかどうかで挙動が変わるのか・・・・
>>286 > ちなみに、コンストラクタはメソッドではないので、オーバーライドじゃない(できない)。
なるほど。オーバーライドという考えを捨てないとだめか。
Oya に String name という属性を追加して、 public Oya (String name) { this.name = name; }
という引数アリコンストラクタを定義し、Ko では引数ありコンストラクタを定義しないでおいて、
>>284 の C3行目で
Ko ko = new Ko("tarou");
とやっても、コンパイルエラーがでる(Ko に引数ありコンストラクタがないといわれる)のが
わかりました。
# やるまえは、Oya の引数ありコンストラクタの振る舞いが継承されると思っていた。
すみません、スレッドダンプの取得方法について質問です。 普通のjavacであれば、javaのプロセスに対してSIGQUIT(kill -3)を 送ってやれば標準出力にダンプが出るのは解ったのですが、 CentOS5のjavacは GCJ(GNU Compiler for the Java?) とかいう シロモノらしく、SIGQUITしてもダンプが出力されません。 GCJでスレッドダンプを出力する方法をご存知のエロい方 いらっしゃいましたらぜひご教示ください m(__)m いま、涙目でGCJのドキュメントを読んでいるのですが… ポインタだけでもいいのでなにとぞよろしくお願いします。
解らんけど、JConsoleあたりで覗くとかじゃ見えないか?
291 :
288 :2007/11/29(木) 16:13:01
>>290 さん
スレッドダンプが見たいのはコンソールアプリではなくTomcat上の
プロセスなんです。あとバージョン1.4.2ってのもあって
JConsoleは使えなさそうです。
情報不足でした、ごめんなさい。ご返答ありがとうございました。
>>282 「SendFailedException invalid address」でぐぐると良いかもしんない
294 :
288 :2007/11/29(木) 16:57:55
>>293 さん
なるほど。gdbで稼働中のjavaプロセスをアタッチして、signal 3すれば
よさそうな気がしてきました!
java専用サーバってことでgdb入ってなかったので、まずはそこから… orz
レスありがとうございましたー
>>294 ユーザが gdb 入れてもいいレン鯖なら、gcjじゃなくて本物の java 入れたほうが早くないか?
スレッド(のライフタイム・状態)を可視化する無料のツールってない? ・既存のコードにあまり改変を加えなくて済む ・いつからいつまでどのスレッドがアクティブ・wait状態だったかが一目でわかる 理想はこんな感じ -----------------------------------------------> time Thread1 +++++++++++++-----------++++++++++++ Thread2 ++++++++++ Thread3 +---------------+++++++++++++++++ ・・・ Threadn +++++++++ (+:active, -:wait)
297 :
デフォルトの名無しさん :2007/11/29(木) 17:24:45
本に乗っていたサンプルコードに 引数が四個と2個のコンストラクターしかないのに 引数3こで呼び出していました。 これはどういう意味ですか?
299 :
デフォルトの名無しさん :2007/11/29(木) 17:43:34
本に乗ってたソース書きます public TimerCallback (TimerObserver g, Object o){ setCallback(g,o); } public TimerCallback (int iv, int flg, TimerObserver g, Object o){ setCallback(iv,flg,g,o); } ↑コンストラクタ これを使う奴 ↓ TimerCallback c1= new TimerCallback(interval, Timercallback.ONESHOT, this );
>>299 お前が何か見落としてるか、本が間違ってるか
無いものは呼べない
本はあなたのコードを賢くするデザインパターンという本です。 この本はとても途中から解りにくくて難しいので初心者にはお勧めしません。 いまは他の本を買えばよかったと思ってます。
出版元に問い合わせたら? 正誤表すらない本だけどなw
>>245 ありがとうございます
調べているとたしかにA.B.Cの形で、クラス.クラス.フィールドというのがありました
>>246 ありがとうございます
たしかにstaticのついたクラスはインスタンス化せずに呼べましたね
見落としてました
>>247 ありがとうございます
まずは、命名ルールから見るのが良さそうですね
A.B.Cなんていう形から見るもんじゃありませんでしたね…
最近JAVAでテキストファイルの入出力覚えたんですけど javaプログラムから任意のディレクトリに指定した名前のファイルを生成してそこに書き込み、っていうのはどうやるんですかね? ただ単に出力しても「ファイルがない」ってエラーになりますよね
306 :
デフォルトの名無しさん :2007/11/29(木) 21:13:24
File#createNewFile()みたいなのがなかったっけ? 任意ディレクトリの存在チェック、作成も忘れずに〜
307 :
デフォルトの名無しさん :2007/11/29(木) 21:29:07
LinkedList foo[] = new LinkedList[3]; これだと 警告:[unchecked] raw 型 java.util.LinkedList のメンバ としての add(E) への無検査呼び出しです。 とでてしまうので2.0対応に書き換えたいのですが ListedList<int> foo[] = new ListedList<int>(); ではコンパイルが通りませんしぐぐっても1時配列の例しかのってませんでした。 やりたいことはArrayそれぞれの中にLinkedListを格納する操作です
>>305 俺も変わらないレベルの初心者だけど
if(!file.exists()){
if(!file.getParentFile().exitsts()){
file.getParentFile().mkdirs();
}
file.createNewFile();
}
こんな感じ?
どう書けば良いのでしょうか?
>>307 @SuppressWarnings("unchecked") を付ける
あと、<int> じゃなくて <Integer> な
>>305 ならないよ
ディレクトリさえ存在してれば、ただ単に出力すればファイルが出来る
ディレクトリが存在してなかったら、ディレクトリは作る必要がある
ApacheHttpComponentを使い、multipartでPOSTするプログラムを作っております。
http://jakarta.apache.org/httpcomponents/ HttpEntityを生成するところなのですが、リクエストは投げられるもののサーバーで解析に失敗するようです。
なにかヒントはないでしょうか?
File file = new File(imageUrl.toURI());
String boundary = "aab03x";
int length = (int) file.length();
byte[] bytes = new byte[length];
FileInputStream input = new FileInputStream(file);
if( input.read(bytes) != length) {
throw new IOException("Cant read:" + file);
}
String boundaryLine = "--" + boundary + "\r\n";
String boundaryEnd = "\r\n--" + boundary + "--";
StringBuilder data = new StringBuilder();
data.append(boundaryLine);
data.append("content-disposition: form-data; name=").append(file.getName()).append("\r\n");
data.append("content-type: image/jpeg\r\n");
data.append("\r\n");
byte[] charBytes = data.toString().getBytes(); ByteArrayOutputStream out = new ByteArrayOutputStream(length + charBytes.length + boundaryLine.length()); out.write(charBytes, 0, charBytes.length); out.write(bytes, 0, bytes.length); out.write(boundaryEnd.getBytes(), 0, boundaryEnd.length()); ByteArrayEntity entity = new ByteArrayEntity(out.toByteArray()); entity.setContentType("multipart/form-data; boundary=" + boundary); out.close(); input.close(); アップロード先はアップローダーなので、詳しいエラーは不明です。 レスポンスはINTERNAL SERVER EROOR
>>307 2.0対応って?C#2.0を言ってる?Javaは5からなんだけど。
>>313 パケットキャプチャしてIEでアップロードしたときと
同じになるように調整したらうまくいくよ。
318 :
121 :2007/11/29(木) 23:23:39
友人とjavaでゲーム製作している者です。 プロジェクトを定期的にjarにしてバックアップをとってるんですけど、 jarファイル同士を比較して、差異のあるクラスを出してくれるようなソフトってありませんか? ソースまで復元して差異を見れるとより良いんですが。
それくらいなら自分で作ってみればよくない? 逆コンパイルならjadを呼び出せば可能だし。
へー、クロージャーってのができるんだ。まぁシンタックスシュガーだけで実現できそうだが。
>>319 SVNなりバージョン管理ツール導入した方が楽だし早い
>>311 できれば新しい書き方に対応させたく思います
>>315 1.4の次だから脳内でかってに2.0にされてました…. orz
>>319 Eclipse の比較は Jar や ZIP の中を見てくれる。それにしても CVS で管理してなきゃ
ローカルヒストリーでだけだが。
>>323 っつっても、Genericな配列を作ることはできないので、@SuppressWarnings を付けるしかないんだよ。
警告抑止するくらいなら <?> で良いんじゃん。
PixelGrabberを使ってある座標(1ピクセル分)のRGB値を取得しようと思うんですが、どうすればよいのか分かりません。 座標は分かってるものとして、赤、緑、青の値をそれぞれint型にして取得する、というものです。 よろしくお願いします。
そりゃあ <?> で済むのならいいけどな。 add を呼べないだろ。
>>328 PixelGrabberのJavadocに書いてあるサンプルを見れば出来ると思うが
>>326 そうなんですか。まだ難しいことはできないので
今回は素直に警告抑止しておきます
あれ、総称型の配列って作れないんだな。 まぁリストのリストで 2 次元, 3 次元実現すりゃ良いじゃん。 ArrayList ならどうせ配列の Wrapper なんだし。 List<List<Integer>> hoge = new ArrayList<List<Integer>>();
Genericsなんだけど、obj instanceof T って出来ないんだな 型チェックが必要な時ってどうしてる?
>>333 どーにかして Class<T> c を渡して c.isInstance(obj)
335 :
デフォルトの名無しさん :2007/11/30(金) 02:12:15
class.getName()
>>333 try {
T t = (T) obj;
} catch (ClassCastException e) {
e.printStackTrace();
// ハズレの処理
}
>>336 嘘を教えないように。(T)obj は無検査キャストだから
あんまし意味の無いコードになる。Tの範囲にもよるけど。
338 :
デフォルトの名無しさん :2007/11/30(金) 03:09:54
スーパークラスのスタティックフィールドは、同じスーパークラスを持つ サブクラス共通のスタティックフィールドになるんですか?
>>339 根本的な部分で誤解していると思うが、共通のスタティックフィールドという概念はない。
スーパークラスにあるstaticフィールドに対してて、サブクラスから「スーパークラス名.」を省略して使うことができる。
privateで宣言しているならば使えないけどな。
なので、共通とか云々の問題じゃなくて見えるかどうかの問題。
Aのstaticフィールドhogeはどんな場合でも1つしかない
>>337 私の不勉強で恐縮ですが、できましたら、
意味の無いコードになる例を挙げていただけませんか?
>>333 型チェックが必要な場面ってどんな場面だ?
型チェックが必要ないようにジェネリクスを使うんじゃないの?
343 :
デフォルトの名無しさん :2007/11/30(金) 13:27:55
スーパークラスのコンストラクタが自動的に呼び出されるときは 引数が同じ奴がよびだされるんですか? スーパクラスにサブクラスのコンストラクタと引数が違うコンストラクタしかないときは 何もよびだされませんか?
>>343 自分で実際にやってみれば解決する問題だろアホかこいつwww
もしかして、それも出来ないとか?
>>343 引数の無いやつが呼び出される
引数の無いコンストラクタが無い場合はエラー
>>341 実際にやってみればわかる
ClassCastExceptionは起きない
public class Test<T> {
public static void main(String[] args) {
new Test<String>().foo(new Integer(1));
}
void foo(Object o) {
T t = (T) o;
}
}
>>345 引数のないスーパークラスのコンストラクターに何もして貰いたくない場合
はサブクラスはどうしたらいいですか?
>>347 スーパークラスを作る人に、コンストラクタで何もしないように頼む
>>346 ありがとうございます。確認しました。
お騒がせしてすみませんでした。
// 余計な戻り値を付けて、さらにその型に代入していたからなんて....アハハハ_no
Generics はバカに使わせるとバグだらけでみょうちくりんな設計になりそうだなと 昨夜からの一連を読んでて思った。
クラスのクラスメソッドの並べ順の規定を教えてください。
ない。自由。
いちご、すいか、ぞう、みかん、りんご が良い順番だとは思えないw
変数をまとめて初期化するとき。 それぞれに別々の数で初期化する方法と 全部に同じ数で初期化する方法ありますか?
ローカルシステムのクロックに惑わされずに時刻間隔を知りたい場合は RuntimeMXBean の getUptime() の差を使えば良いですか?
>>355 別々の数で初期化する方法
x = 1;
y = 2;
z = 3;
同じ数で初期化する方法
x = 1;
y = 1;
z = 1;
x = y = z = 1;
>>333 こんな場面.
public T<T> getInstance(Class<?> clazz) {
return (T) containor.getInstance(clazz);
}
このままだと、未検査キャストでWaring出るだろ?
Anotationで黙らせてもいいけど、型チェック可能ならしたい所。
>>359 public T<T> getInstance(Class<T> clazz) {
? return clazz.cast(containor.getInstance(clazz));
}
Java5以上ならこれでいけね?
>>360 thx!
そんなメソッドが追加されていたとは気がつかなかったぜ
JSP の式言語でコレクションのサイズを参照する方法ないですかね? 空かどうかは ${empty col} でできるのは分かったんですけど。
>そのせいで今もどんどん文化と国そのものがぶち壊されちまってる べつに問題ないだろ Java的には
関数から2つの戻り値が欲しいときはどうするのが 普通ですか?
366 :
デフォルトの名無しさん :2007/11/30(金) 19:06:14
>>364 実生活のないお前には何も関係ないだろ。もうそろそろお母ちゃんが
ご飯もってくる時間じゃねwww。
Beanを作る。Mapを詰める。多値用Genericクラスを作るなど。
static private int i= 4; のようにスーパークラスAにクラス変数を作って Bをサブクラスとすると A a=new B(); でインスタンスをつくってaのiを調べると0になってます。 どうしても解りません教えてくださいよろしくお願いします。
教えてやるからAクラスとBクラス、それからどのようにiの値を調べたかを教えてくれw
370 :
デフォルトの名無しさん :2007/12/01(土) 00:40:32
明解Java入門編で勉強している超初心者なんですが… この本の演習がわかんなくてイライラして苦しんでます。。 「要素型がint型である配列を作り、全要素を1〜10の乱数で埋め尽くすプログラム」 は作成できたんですが、その次の 「このプログラムを異なる要素が同じ値を持たないように改良しなさい。」 という方ができません。。。 どういうふうに考えたらいいんでしょうか? よかったらどなたかご教授御願いしますm(_ _)m
>>370 どういう所まで勉強しているのか解らないので回答が難しいが、配列でそれをやるのは面倒だと思う(特に改良だと)
配列が10で1〜10の乱数であると仮定しておく。
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(適当な回数) {
// ランダムでi番目とj番目をスワップ
}
が一番簡単な方法かと思うぞ
強引にやるならば、確定した所まで重複チェックして、重複していたら乱数を入れなおす・・・ってのも出来るけど、激しくバカらしい
別の方法として、ArrayListなどに乱数をぶちこんでおいて、ランダム番目から取得して(remove)、埋めるってのもあり。 いわゆるトランプのシャッフルに近いわけで、それをプログラムでどう書くか考えるべし。 ・・・・問題悪いね、それ
>>370 補足というか重要なヒント
・重複しないように乱数を発生する ⇒ 難しい
・重複しない整数を作成 ⇒ 簡単
・整数をランダムに入れ替える ⇒ 簡単
プログラムを学んでいく課程で重要なのはいかに簡単な処理に分解できるかってコト
>>370 配列のサイズが11以上なら不可能乙wって書いた人を煽ってみるとか。
0〜9じゃないなら hit & brow(というゲームがある)の演習でもないしな。
375 :
デフォルトの名無しさん :2007/12/01(土) 00:57:49
376 :
デフォルトの名無しさん :2007/12/01(土) 01:15:52
宿題スレの方の867です。どなたか助けては戴けないでしょうか…orz
自分でやれカス
378 :
デフォルトの名無しさん :2007/12/01(土) 01:24:32
>>377 迷惑なのは百も承知です。これが一番最後の宿題なのですが、
まったくできないので…。やり方だけでも教えて戴けるとありがたいです。
お前が助からなくても、誰も困らない
mixiでも無視され、Schecter涙目wwww
>>371 簡単だが、繰り返し回数に関わらず一様な期待値で順列が発生しない
>>378 課題スレで待っておけ 土曜だし暇な人がやってくれるだろ
てか、質問あるんならどこが分からないかだけでも書けよ
383 :
デフォルトの名無しさん :2007/12/01(土) 01:46:47
370です。 アドバイスしていただいてからだいぶかかりましたが やっとできましたっ!(><) また一つ勉強になりました。 ほんとにありがとうございましたm(_ _)m
384 :
デフォルトの名無しさん :2007/12/01(土) 01:53:45
>>372 だがちょっと待って欲しい。
ArrayListに突っ込むのなら、Collections.shuffleを使うべきではなかろうか?
そんなのがあるんだ じゃあ Collections.shuffle(Arrays.asList(array)); で完了じゃね
今晩わ。 今プログラムしていてコメント付けようと思ってどうせならJavadoc対応にしようと 思ったんですが、javadocのコメントって/** 〜 */じゃないですか。 でも、/** 〜 */って自分的にあんまり使いたくないんですよ。 理由としては、使わなくなったメソッドやクラスをコメントアウトするときに /* 〜 */ を使うので、javadocのコメントがあると邪魔になるし 見た目も***アスターが並んでなんか見難いという感じがします。 基本//の方が見やすいしメソッドとかも頭に一行コメントつければ だいたい事足りますし。 自分はエクリプスとかいう高度なエディタは重くて使ってないので そういう専門のエディタなら賢くやってくれるかもしれませんが、 今のエディタも軽くて気に入っているので手放せません。
>>387 の続き
そういうわけで、ここからが本題ですが、
新しいコメントタグを考えてみました。
クラスとかメソッドの先頭コメントは
//@
// コメント
// @author 俺
// @version 1.0
///
public class XXX ・・・
//@ 一行コメント
private int iXXX;
↓ フィルタ
/**
* コメント
* @author 俺
* @version 1.0
*/
public class XXX ・・・
/*** 一行コメント */
private int iXXX;
こんな具合に変換されるようにしたらいいんじゃないかなと思っています。
というわけで、こんなことしてる人他にいますか?
もっといい方法があったら教えてください。
>>388 doxygenを使うといいんじゃない?
///でコメント書けた気がする
doxygen使うまでもなくその程度なら正規表現とかで実装できるんじゃないか?
392 :
デフォルトの名無しさん :2007/12/01(土) 04:00:27
>>389 レス、ありがとうございます。ただ、サラっと書かれても何をどういじれば良いのか分かりません…orz
>>390 ありがとうございます。
自分としては簡単なロジックなんてフィルタ作った方が楽な気がしました。
>>391 意味がわからなかったんで、javadocのオプションかソースの改造でもするのか
と思って探しちゃいましたよw
どうやらフィルタの実装の話みたいですね。
そうですね、javaで作ろうかとも思いましたが
バッチでもできるかもしれませんね。
ただバッチはあまり詳しくないのでjavaフィルタ書いてみます。
ありがとうございました。
>>393 自己レスです
@もうざかったんで
>>390 の///を参考にして
/// コメント
// @author 俺
// @version 1.0
public class XXX ・・・
/// 一行コメント
private int iXXX;
なのを変換するようにしました。
本当にありがとうございました。
>>394 便利そうでいいね。その書式をeclipseなんかでも使えればいいんだけど、さすがに無理か。
>>394 ぶっちゃけ好みで一般的に定められたフォーマットを崩されるのは迷惑極まりない
個人的に作っているソースで誰も見ないというなら勝手にやって構わないが
他人が読む可能性があるならばヤメレ
>理由としては、使わなくなったメソッドやクラスをコメントアウトするときに
>/* 〜 */ を使うので、javadocのコメントがあると邪魔になるし
消せ。
コメントアウトの用途で/* */を使う方が邪魔
>>397 ガソリンを保存するタンク、タンクを持つ自動車およびガソリンスタンドを表すプログラム
>>387 > 使わなくなったメソッドやクラスをコメントアウトするとき
/* 〜 */ を使うと
System.out.println("*/");
なんて処理が途中にあったときにエラーになるじゃないか。
全部 // にしとけばそういう問題はないが。
ならねーよw
/をエスケープしとけばいいんじゃね? "*\/"って。
>>384 テクスチャを反映させたいだけなら、
TexCoordGeneration texGen = new TexCoordGeneration();
texGen.setPlaneS( new Vector4f( 1.0f, 0.0f, 0.0f, 0.0f ) );
texGen.setPlaneT( new Vector4f( 0.0f, 1.0f, 0.0f, 0.0f ) );
Appearance app = new Appearance();
TextureAttributes textureAttributes = new TextureAttributes();
textureAttributes.setTextureMode( TextureAttributes.REPLACE );
app.setTextureAttributes( textureAttributes );
app.setTexCoordGeneration(texGen);
app.setTexture( texture1 );
--
roll.addChild(new Shape3D(new Torus2()));
↓
roll.addChild(new Shape3D(new Torus2(), app));
でも課題の内容からすると、
TexCoordGenerationは使わないで、Torus2クラスの中で自前計算しろってことですな。
続く。
↓これはコメントアウト //TexCoordGeneration texGen = new TexCoordGeneration(); //texGen.setPlaneS( new Vector4f( 1.0f, 0.0f, 0.0f, 0.0f ) ); //texGen.setPlaneT( new Vector4f( 0.0f, 1.0f, 0.0f, 0.0f ) ); //app.setTexCoordGeneration(texGen); Torus2クラスの中の修正 super(Torus.NUM_POINTS * 2, GeometryArray.COORDINATES | GeometryArray.COLOR_3, Torus.NUM_POINTS * 3 * 2); ↓ super(Torus.NUM_POINTS * 2, GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.TEXTURE_COORDINATE_2, Torus.NUM_POINTS * 3 * 2); 以下を追加 float[] tex = new float[Torus.NUM_POINTS * 3 * 2]; for (int j = 0, count = 0, count2 = 0; j < Torus.NUM_POINTS_OUTER; j++) { ↓ for (int j = 0, count = 0, count2 = 0, count3 = 0; j < Torus.NUM_POINTS_OUTER; j++) { ループの中に追加 tex[count3++] = ほげほげ tex[count3++] = ほげほげ tex[count3++] = ほげほげ tex[count3++] = ほげほげ tex[count3++] = ほげほげ tex[count3++] = ほげほげ setColorIndices(0, ind)の下の追加 setTextureCoordinate(0, 0, tex); setTextureCoordinateIndices(0, 0, ind); ほげほげの部分は自前計算。どうマッピングするかの座標を計算するだけー。
宿 題 ス レ で や れ
向こうは丸投げ推奨なので 自分で宿題やりたいけど色々解らないので教えてもらいたい人は こっちでお願い
あっちは練習ドリル的なスレなのか
つか、マルチじゃねーかよw
丸投げマルチをこっちで答えるのは好ましくない
デザインパターンを適用したプログラミングをしたいです。 お題をだしてくれて添削してくれるスレないかな?
ここでいいんじゃね? だけどデザパタを適用するにはある程度の規模でないと意味がないから、長いソース読んでくれる暇人がいるかどうかはシラネ お題はどんな感じがいいのか、あと>409のスペックを書いておくべし
>>411 Javaで実装したいならばこのスレでいいと思うが?
デザパタスレに特定の言語の実装を持ち込まれても困る
>>405 丸投げ推奨なのは課題文の話。
ただでさえ屑講師の意味不明な課題なのに
それを生徒がさらに意味不明な解釈して何したいかさっぱり分からなくなることの防止策。
それを全部他人がやってくれると勘違いしたバカが現れるだけ。
要するに宿題スレどんだけエスパーそろってんだよ!ってことだ。
double型の値xにおいて、[-x,x]の範囲の乱数を出力させるにはどうすればいいんでしょうか?
0〜2xまでの乱数を発生さて、xを引けば?
中三レベルの数学だぞ
標準packageの各々のメソッドの中身を知りたいのですが何か良い方法はありますか?
>>419 すでにソースコードは公開されてるだろ。かってに落としてきて見れ。
javaの固有の実装なんて見ても意味ないだろ
司会がお題出してそれに答えたプログラム提出するってスレあったらおもしろそうだな。
423 :
デフォルトの名無しさん :2007/12/02(日) 09:06:48
配列を引数にとる関数を使いたいのですが その関数内では配列の値を変えたくありません。 そこ以外では変更を行います 呼び出された関数内でだけ 変更できないようにするには どうすれば良いでしょうか? コピーを渡すのは処理速度が落ちるので それ以外でお願いします 今のところの対処法は 関数のコメントに //引数の値変えるな! と書いてるだけです
>>423 基本的に、今のところ無理。
将来的には @ReadOnly ってアノテーション付いてたら変更不可能にするみたいな事も検討中らしい。
プリミティブ型の配列じゃないなら java.util.Collections#unmodifiableList(List) 使えって感じだけど、
プリミティブ型の配列だと java.util.List で代用するのは、ちときつい。
手間かけてもいいなら @ReadOnlyArray みたいなカスタムアノテーションと、
カスタムアノテーション付きの配列を変更したらコンパイルエラー出すような APT を自作して
ビルド時に必ずAPTチェックにかける、とかすればチェックできるけど。
425 :
デフォルトの名無しさん :2007/12/02(日) 09:22:00
文字コードについて質問があります。 vine4.0 vi編集環境で両方文字コードをEUC_jpにして System.out.println("ああ"); を表示するだけのプログラムをコンパイルすると HelloWorld.java:3: ')' expected System.out.println("ああ"); ^ HelloWorld.java:3: ';' expected System.out.println("ああ"); というコンパイルエラーがでてしまいます。 ShiftJISにしても同じ現象になってしまうの ですが、何が原因なのでしょうか?
>>410 ,
>>412 さんありがとうございます。
業務でjava使ってて2年になります。
レベルとしては入門書を卒業してつぎのステップに進みたいところです。
ソースの可視性、メモリ効率の向上、クラス間の依存度が低いコーディングができるようになりたいとデザパタ勉強してみたいと思いました。
webアプリを開発しておりました(servlet,jsp,EJB)。
質問があります。 あるディレクトリのなかにあるファイル名を取得するメソッドがあるじゃないですか? File dir = new File("ディレクトリのパス"); String[] fnames = dir.list(); これって日本語のディレクトリやファイル名も普通に扱えますか? 与えるディレクトリが半角スペースやら日本語を使っていたり、 中のファイルも日本語になっています。 昨日試したら、nullが帰ってきていたんで、ちょっと困っています。 ディレクトリ数もファイル数も数千なので、自力で変更は辛い。 あと、DBにデータも残すので、限りなくオリジナルに近い形がいいです。 これに、パスを加えて、ファイルをフェッチしていくのがプログラムの目的です。 実行環境 Mac OSX Eclipse 3.3 Java 5.0 よろしくお願いします。
428 :
デフォルトの名無しさん :2007/12/02(日) 11:36:34
初歩的な質問で申し訳ありませんが・・、 Servlettを作るときって、1つのJSPファイルに1つのServletを用意するものなんですか? 複数のJSPファイルからきたリクエストを1つのServletで対応するクラスへ切り分ける 典型的な手法でもあるのでしょうか?
>>426 デザインパターンを適用する場合、
・ソースの可視性 パターンを知らない人(例:上司)にとっては読みにくくなる
・メモリ効率の向上 一概に向上するとは言えず、むしろパフォーマンスは低下する
・クラス間の依存度 低くなる
もし、ソースの可視性を高めたいコトが一番であれば、パターンよりもリファクタリングの勉強をする方がいい。
リファクタリングとパターンは色々と繋がる部分もあるので、パターンの習得にも役に立つしな。
自分が教育の中でパターンに触らせる題材として使うのは、CSVファイルの入出力APIの作成、SwingでのGUI作成って所。
>>428 ちゃんと勉強している人の質問で感動した!
異なる処理(リクエスト)毎に別のServletを用意するってのはServletの設計思想にはあっていた。
でも、疑問に思うように無駄が多いと、先人達は思ったわけだ。
そこで生まれたのがStrutsとかのフレームワーク。
Strutsなどに代表されるフレームワークの場合、リクエストを処理するSevletは原則として1つしかない。
全てのリクエストは、そのServletのdoGetに渡され、前処理を行った後に、実際に処理を行うクラス(Action)クラスが呼び出される
(呼び分ける方法はパラメータだったり、URLの末尾だったり)
細かい差はあるものの、今日あるWebアプリケーションフレームワークはほとんどこの仕組みをとっているので、典型的な手法といえる
>>427 使えるはず
Macの構成は良く解らんけど、Windowsで言うところのC://(ルート)直下に「ほげほげ」ってディレクトリつくり、ルートのlist()で出てくるか確認してみてくれ。
>>425 コンパイルはjavacかい?
日本語無しでコンパイルは通るか?
最近使用していないから忘れ気味だけど、デフォルトはOS依存の文字コードでソースを読み込むはず。
異なるならば、-encodingオプションを指定する。
ダメならUTF-8にしてみれ。
433 :
428 :2007/12/02(日) 11:53:13
>>430 即レスありがとうございました。m(_ _)m
>>431 そうですか。
やっぱりプログラムのバグですかね?
ディレクトリのパスが間違っていれば、上のFileのところでエラーがでると思うんです。
今自宅なので、後で試してみます。
とりあえず、日本語を使えそうだということを聞いて安心しました。
ありがとうございました。
>>434 >ディレクトリのパスが間違っていれば、上のFileのところでエラーがでる
出ません。
エラーになったら、新しいファイル作れませんからw
>>429 依存性が低いクラス設計ができるようになることが一番です。
実際にどのようにデザパタを適用できるのかを勉強したくてカキコ。
適用した簡単なをもの作ってみたいなと思いました。
>>435 !!
そういえばそうですね。
IO系とは違いますもんねwww
意外と初歩的なところで引っかかっていたみたいなんで、
とりあえずテスト用のプログラムをきちんと作ることにします。
先ほどのコードの上に、パスがディレクトリかどうか調べる文を追加するべきですね。
いやはや、本当にありがとうございます。
438 :
デフォルトの名無しさん :2007/12/02(日) 12:14:00
>>432 >
>>425 > コンパイルはjavacかい?
> 日本語無しでコンパイルは通るか?
> 最近使用していないから忘れ気味だけど、デフォルトはOS依存の文字コードでソースを読み込むはず。
> 異なるならば、-encodingオプションを指定する。
> ダメならUTF-8にしてみれ。
ご指導ありがとうございました。
日本語無しなどコンパイルは通ります。(コンパイラはjavacです。)
encodingオプションをUTF8,UTF16,EUC,EUCJP,SJIS等のメジャーなもの
で試して見ましたがやはり同じコンパイルエラーが出ます。。。
>>424 なるほど、ありがとうございます
しばらく現状維持でどうしても必要だと思ったときは
その案をもう一度思い出させてもらうことにします
>>437 ああ、IO系ってのは
この場合、ファイルの読み込み書き込みのことです。
紛らわしかったですね。
BufferedInputStreamでこれから読む位置をストリームの先頭位置まで戻す方法はありますでしょうか? fseek(fp,0,SEEK_SET)のような処理をしたいのですが。 よろしくお願いします。
>>441 markとresetを使うか、開き直す
>>436 Swingで書いてみるとよろし。
・親フレームに子フレームを2つ以上用意する(入力エリア+表示エリア)
・子フレームで起きたイベントは子フレームで処理せずに親フレームに通知する(ここでMediatorパターンを使う)
・親フレームで処理したイベントはデータに反映されるが、子フレームの更新はデータに登録したリスナー経由で行う(Obseverパターン)
簡単な為、入力フレームはボタン1つ、表示フレームはラベル1つでやってみるといい。ボタンを押すと表示が+1されるみたいな
>>441 用途的にStreamは一方向に読むもの
ランダムアクセスしたいならば、RandomAccessを使え
>>444 ありがとうございます。
いろいろやってみます。
447 :
デフォルトの名無しさん :2007/12/02(日) 18:22:53
以下の挙動で、困っています。これは、JNLPのバグでしょうか…。 JNLPでデスクトップにショートカットアイコンを作成し、 そのアイコンに何らかのファイル(何でもいい)をドラッグアンドドロップすると、 「このアプリケーションは起動できません」「詳細」「了解」というダイアログが表示される。 ここで「詳細」ボタンを押すと、次のような情報が表示される。 ※C:\Users\hoge\Desktop\新しいテキスト ドキュメント.txt をドラッグアンドドロップした場合。 InvalidArgumentException[ 無効な引数が指定されました: {C:\Users\hoge\Desktop\新しいテキスト ドキュメント.txt, C:\Users\hoge\AppData\Local\Temp\javaws12 }] at com.sun.javaws.Main.launchApp(Unknown Source) at com.sun.javaws.Main.continueInSecureThread(Unknown Source) at com.sun.javaws.Main$1.run(Unknown Source) at java.lang.Thread.run(Unknown Source) で、問題なのは、この後。 ここで「了解」」を押すと、ドラッグアンドドロップしたファイルが、 いきなり削除されてしまうのです。 1.6.0_03, Vista,XP,UbuntuLinuxのいずれにおいても再現しました。
448 :
デフォルトの名無しさん :2007/12/02(日) 18:25:10
FランではないけどFランに近い大学の情報科に在籍している者です。 が、実際に入ってみると周りはPC詳しい&プログラミング言語の経験のある人ばかり。 Javaのクラスを取っているけれど、俺は簡単な宿題をクリアするにも最低1-2時間はかかる。 単純に数値を入力してください→課題に沿った計算→結果を出力 といったここの住民ならば 5分-10分程度で終わる課題をだ。一緒にクラスを取っている人も同じくらいのスピードで終わらせて、 こんなの簡単すぎるよなw と笑っている始末。どうにか最初のJavaクラスは単位を貰えそうだけど、 次に取るクラスが不安でならない。いったいどうすればプログラミングが得意になるんだろうか…。 どうすればクラスメートやここの住民みたいに最速でどんな風に組めば良いかというアイデアをたたき出せるようになるんだろうか。
>>448 回答にはなってないけど、情報科は地頭スペックによってやる内容が違うだけで
Fラン大とかは関係ないと思われる。大学のレベルを超えた凄み(留年率)がある。
1.登場人物を洗い出す。 2.フローチャートをイメージする。 3.そのイメージをコードに落とす。 このサイクルが重要。コードを弄りまくらないと2が身につかないこともあるけど、 Javaのような言語は大抵、文章がそのままコードに落ちるから直ぐ慣れるよ。
>>448 周りの経験者もはじめのうちは1-2時間悩みながらコーディングしてきたんだ
プログラミングに慣れるまではそれが普通。
初期はとにかくコードを書くしかない。
あとは知っているパターンをどう組み合わせるか、って作業になる。
Javaだったら俺は独習Javaをやれと思う。
問題量とサンプルが糞多いけど、サンプルを全部打ち込んで、問題も全部解いてみる。
軽く3ヶ月はかかると思うが、終わったときには周りのクラスメートと同じレベルに立っていると思う
演習問題の添削とかならばこのスレに投下すれば住民も協力してくれるぜ
>>448 慣れだよ、慣れ
何度も繰り返し練習して量をこなすことで、やり方が身に付く
>>448 みんな最初はそんなもん。
情報科は商業・工業高校出身の人が多いから慣れてる人が多いだけ。
だから1,2年の講義は基本的なものが多く、工業高校出身の人には物足りなく感じるんだろう。
(プログラムが書けても、問題解決能力がなければプログラムに落とし込む事すらできないわけで)
(プログラムの前にアルゴリズムやスタックマシンがなんぞやってところを勉強すべきだと思ってるけど、)
プログラミングの上達のコツは、
作ったプログラムを改造して、その変更によってどう動作が変わったかを把握すること、
コピペはしないこと
かな・・。
>>448 本気でプログラミング力を付けたいなら、SICPとCTMCPを読むことをお勧めする
Flashでも買って遊んでみるのも手だな。 あれは飽きずにプログラムを楽しむには良い教材。
456 :
448 :2007/12/02(日) 19:33:38
(´;ω;`)ぶわっ お前らのヌクモリティに泣けてきた。
授業内容や課題が分からないとき、クラスメートに聞いたら
「お前、こんなのもわからねえの?」と言われたり、
「基本情報技術者試験を来年受けてみようと思うんだけど」と言ったら
「高校の時に取ったぜw 持ってないの? 少し勉強すればバカでも受かるぜ」と言われる始末。
サーセン 普通科高校文系出身が情報科に進んでサーセン でもパソコン好きだったんだ。
>>449 きっと俺はFランでも毎日がいっぱいいっぱい。文系の友達が合コン行くんだって時も課題やってた。
>>450 そういう考え方はなかった。未熟すぐる。
>>451 独習JavaをAmazonで見たらレビューが最悪だったんだけど、俺でも大丈夫なんだろうか。
>>452 独習Javaというやつを買ってやってみようかな。学校で使ってる教科書はやさしいJavaという本なんだけど、
書いている内容のレベルと課題のレベルがあってない。もはや、講義ですら使っていない。
457 :
448 :2007/12/02(日) 19:37:39
>>453 たしかに商業高校の情報処理科出身が多い。みんな簿記、シスアドなどの資格を持ってる。
高校では情報処理科のエリートとして推薦で大学に来た人ばかり。
俺は英検2級と漢字検定2級しか持ってない。情報とまったく関係ない。
アルゴリズムやスタックマシンなど本当の計算機科学の分野は未知の世界。
>>454 ググったらMITで使う教科書という事で萎えた。
これを履修するMITの1年生ってうちの大学の4年と比べても完全体セルとヤムチャ位のレベル差があるのでは。
>>455 アカデミック版でも3万以上するんだけど…
SI系で業務システム開発をしているのですが、わからない事があるので質問させてください。 インターフェースとその実装クラスに関することです。 ArrayListを使う場合、↓のように宣言する事が多いけど、これはListであればArrayListだろうがLinkedListだろうが良い場合ですよね。 List list = new ArrayList(); たとえばArrayListにしかないtrimToSize()を使いたい場合は上記の場合ダウンキャストしないといけないから、↓のように書くと思います。 ArrayList list = new ArrayList(); JDBCでMySQLに接続したい時は、 registDriverなりClass.forName()すればDriverManagerのgetConnectionがMySQLのJDBCの実装クラスを返してくれるけど、 java.sql.*に定義されているインターフェースのみで操作できますよね。 com.mysql.jdbc.Connection、com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource みたいに実装クラスをソース上に記述して使用するメリットとデメリットを教えていただけませんか? com.mysql.jdbc.*にしかないメソッドを使いたい場合は前述のArrayList.trimToSize()みたいになるから理解できるのですが、 最適化のために使うと教えられました。 どういう最適化がなされるのでしょうか。識者の方々ご教授くださいm(。_。)m
>>458 ここでいう最適化っていうのは、
標準的でないが実装に依存した、よりパフォーマンスの良いメソッドが呼び出せる
ということじゃないかと、エスパーしてみる
>>457 プログラム関係の資格?は、法的に有利にならないのであまりクリティカルじゃない
それに、良かれ悪しかれ、プログラム関係の知識は、すぐ陳腐化する
プログラムの勉強は書く前にまず読めと思う
読んだ本より書いた本が多いなどという人でなければ
>>459 回答ありがとうございます。
でもそれはArrayList.trimToSize()と同意ですよね・・。
他にいったい何があるのか・・。
>>458 色々と誤解してんな。
>ArrayListを使う場合、↓のように宣言する事が多いけど、これはListであればArrayListだろうがLinkedListだろうが良い場合ですよね。
>List list = new ArrayList();
これは間違いというか、使い方を間違えている。
例えばあるクラスのprivateフィールドでListを持ちたいのであれば、ArrayListのままで何も問題ない。
Listとして利用しなければならないとしたならば、それはクラスの外。
つまり、
public ArrayList getList()
と宣言するよりも
public List getList()
と宣言する方が、クラスの内部を変更(ArrayListをLinkedList等)にするなどの変更が容易に出来る(外のクラスに影響がない)
内部的にはListに制限したところでメリットは少ない。
JDBCDriverの場合もそういうこと。
あるインタフェースのあるメソッドを呼ぶとき、そのインタフェースを実装するクラスが複数あったとすると、 どっちのクラスのメソッドを呼ぶか渡されたインスタンスの型を見るまで判らないので、 その分のコストがかかるし、どっちを呼ぶかわからない以上 最適化して無駄な処理を消し飛ばしてしまうわけにもいかない 呼びうるメソッドが唯一に絞られる場合は、devirtualizationしてインライン展開してエスケープ解析して ヒープオブジェクトをスタック上に割り当てたりとかsynchronizedを省略したりとか色々最適化が効くかもしれない でもJDBCだったら、そんな些細な最適化よりもデータベースにアクセスするコストの方が巨大なので、 気にしても意味ないと思う
>>462 なるほど、外部への影響を無くすためですね。
つまりJDBCの場合も、
MySQLに接続する場合はその内部はcom.mysql.jdbc.*のクラスをバリバリ使っていても、
insertData(int data1, int data2)
みたいになっていれば内部で↓のようになっていても、そんな気にするなって事で良いですか(クラス名は適当です)
MySQLPreparedStatement pst = conn.preparedStatement("***");
pst.setData(1, new MySqlData(data1, TYPE_INT));
pst.setData(2, new MySqlData(data2, TYPE_INT));
これをOracleに接続する事になった場合は
OraclePreparedStatement pst = conn.preparedStatement("***");
pst.setData(1, new Datum(data1, INT));
pst.setData(2, new Datum(data2, INT));
と変更しても使う側は気にしないで良いと。
どこを外部とするかによると思いますが。
>>464 そういう事。
内部では専用のメソッドを幾ら使おうが、外部提供されているインターフェイスの振る舞いが変わらない限りはOKってのがポイント。
どこを外部とするかってのはまさにインターフェイスで決まっているし、これは有識者が議論して落とし所を決めているわけだ。
実プロジェクトではまともにインターフェイスをきらずに丸投げするから火を噴くんだけどねw
>>463 実行時に検索処理みたいなものが走ってしまうのですか?
実行時には変数にインスタンスが割り当てられる時点でインターフェースの情報は使われないものだと思ってました・・・orz
もっとVMの動作を勉強すべきですね・・。
>>465 OracleやMySQL, PostgreSQLに接続する事が決まっているのに、
ResultSetを扱う共通ユーティリティ的なクラスがOracle依存バリバリに実装進められてるのは、
火を噴く前兆ですかね(;−;?
>>466 好ましくはないけど、Oracle以外のDBは考慮しないで、かつバージョンアップもしないという状況なら問題はない。
他のDBに接続する可能性が0.01%でもあるならば今からでも方針を変えるべき
こういう時ってO/Rマッピング使うもんなんじゃないの?
最適化がどうのとか言ってるくらいだから、余計なオーバーヘッドかけたくないんじゃない
>>467 バージョンアップの可能性もあるし、他のDBにも接続します・・。
>>468 >>469 共通ユーティリティ的なものが自前O/Rマップもどきになってます。
リフレクションバリバリで。
O/Rマッパーは一長一短あるから適合するかは判断できんな
最近はiBatisのが評価高いな。テキストファイルに分離できるだけで十分ってことか。
t=2〜4、6〜8、10〜12、以降無限に続くときに Aの符号を反転させるにはどのような文にしたらいいですか?
数学弱いからAが誰なのかわかりません。
日本語でおk
A の符号を反転させるには -A でいいんじゃない
Aじゃなくて速度=vです わかりにくくしてしまってすみません
修正しました t=2〜4、6〜8、10〜12、(以降無限に続く)の時 速度vの符号を反転させるにはどのような文にしたらいいですか?
>>478 だれか黒魔術でエスパーを召喚してくれ。
-v
v の符号を反転させるには -v でいいんじゃない
if (t % 4 == 1) { v2 = v; } else { v2 = -v; } まあ、内容は分からんけどこんな感じか
時間が決まってるなら初速が分かればVが求まるから出てきたVを-Vで良いんじゃないのか?
vが-vになるのは分かります ifの条件がわからないんです
この条件文ってtが4の倍数の時って意味じゃないんですか? tが2から4、6から8…の間の速度の符号を反転したいんです
住人総苦笑なレスですね
リア中か釣りかどっちかしかありえんな
すみません余り1でしたね
中学生でもわかるだろ・・・
ゆとり世代だとこれは高校の物理の範囲。
>>457 分野にもよるけど、ある程度まで行くとプログラムの壁より英語の壁にぶちあたると思うw
君が言う推薦で来たエリート様の半分以上は英語で躓く事になるよ。
普通科と工業科じゃ英語の下地が違うからな・・。
英検2級って事は、技術書レベルの英語ならスラスラ読めちゃうな。
翻訳を待たずに最新の技術に触れられるってのはアドバンテージがデカイわな。
うん
495 :
デフォルトの名無しさん :2007/12/03(月) 11:15:14
すいません連想配列の実装について聞きたいのですが、 ファイルから文字列を読み込みハッシュテーブルを作っていきたいのですが 例えば ファイル abcdea というファイルを読み込んだとき普通なら a=1 b=2 c=3 d=4 e=5 a=6 というテーブルができるのですが、これを a=1,6 b=2 c=3 d=4 e=5 といったように同じ文字列が出てきた場合はキーを追 加するといったようにしたいのですがどのクラスを使うのが望ましいでしょうか?
496 :
デフォルトの名無しさん :2007/12/03(月) 11:15:45
すいません連想配列の実装について聞きたいのですが、 ファイルから文字列を読み込みハッシュテーブルを作っていきたいのですが 例えば ファイル abcdea というファイルを読み込んだとき普通なら a=1 b=2 c=3 d=4 e=5 a=6 というテーブルができるのですが、これを a=1,6 b=2 c=3 d=4 e=5 といったように同じ文字列が出てきた場合はキーを追 加するといったようにしたいのですがどのクラスを使うのが望ましいでしょうか?
497 :
デフォルトの名無しさん :2007/12/03(月) 11:17:00
連投すいません。
>>495 とりあえず。つ Map<String, List<Integer>>
Javaでは配列の途中からをメソッドに渡すってことが可能ですか? byte[] buf = new byte[256]; とか宣言したときに、あるメソッドにbuf[127]からを渡したいのです。
500 :
499 :2007/12/03(月) 12:10:56
すみません自己完結しました。
>>500 わずか6分で完結してワロタが、良ければ後続のためにも解決策を書いておいてはくれまいか。
初質スレでは同じ質問が何度も繰り返すことは日常茶飯事だから、それだけで無駄な質問がなくなる。
502 :
デフォルトの名無しさん :2007/12/03(月) 12:21:46
やさしいJava 活用編 第2版って買う価値ある?
503 :
499 :2007/12/03(月) 12:37:39
>>503 java.util.Arrays#copyOfRange
offsetを引数に渡すと渡されたほうは範囲チェックとか必要になってマンドクセ
最初から処理範囲だけに絞り込んで渡せば、メソッド側は最初から最後まで処理すれば済むのでシンプル
ただし、privateメソッドに渡すのならばoffsetでも問題無
使わせる側に手間かけさせてどうすんだこのバカ。 総コード量は増えるわメモリフラグメント作るわ使う手間増えるわの 糞ライブラリでも作る気か。
APIとして公開するならばコピーして渡すほうがいいんじゃね? 総コード量 → 変わらない メモリ → 効率は悪くなるが、それで?ってレベル。フラグメントってのは意味不明。 使う側の手間 → 使われる側の手間も考えればどっちもどっち
508 :
デフォルトの名無しさん :2007/12/03(月) 16:09:25
JAVAとJAVAアプレットってまったく違うんですか?
509 :
デフォルトの名無しさん :2007/12/03(月) 16:27:03
java∋あぷれっと
使われる側は 1 箇所の手間で済むが、使う側は利用箇所倍の手間に 増加するという事も分からんのか。 呼び出し前にオフセットと長さを指定するコードは減らないし、 メモリ効率悪いし、デメリットだけでその設計を採用する価値がまったく見いだせない。
511 :
デフォルトの名無しさん :2007/12/03(月) 19:11:26
SwingやAWTなどについて質問です。 ものすごく速いタイミングで2つのイベントが発生した場合でも、 実際に発生した順序でイベントが処理されることは保証されていますか?
AWTは知らないが、Swingはシングルスレッドモデルだし、そうなんじゃない?
だからAWTとSwingはAWT/Swingスレに行けとry
別にいいじゃねーか、たいした流量じゃないしスレ違いってわけでもない
>>511 イベントの発生にバグを仕込まない限り、Swingは保証される。
AWTはシラネ
515 :
デフォルトの名無しさん :2007/12/03(月) 21:15:59
質問なのですが、 import クラス と記入すると new宣言 しなくてもimportしたクラスのメソッドを呼べるようになりますが、 他にも何かメリットはあるのでしょうか?又、なぜnewを使わずにimportクラスを使うのでしょうか?
意味不明 コードを具体的に書いてくれ
ん?? new宣言しなくても・・・? staticメソッドは呼び出せるようになる、というかそのクラスを参照できるようになるけどインスタンスメソッドなら当然newせないかんよ なにか勘違いしているのでは・・?
518 :
デフォルトの名無しさん :2007/12/03(月) 21:25:40
mainクラスからGaibuクラスを使うとして普通なら Gaibu gai = new Gaibu と宣言しGaibuクラスのメソッドを利用しますが、 import Gaibuと記入すればnew宣言しなくても Gaibuクラスのメソッドが使えるようになるのではないのですか?
まだ質問しない方がいいよ 知識が足らなすぎる
520 :
デフォルトの名無しさん :2007/12/03(月) 21:30:03
519さん実際に動いています。
ならんがな。 どんな参考書でどんな勉強してきたのか知らないが、staticメソッドとインスタンスメソッドの違い、それからパッケージの意味とimportの使い方を勉強しなおせ
>>520 多分、import書かなくても動くんじゃね?
523 :
デフォルトの名無しさん :2007/12/03(月) 22:10:35
どういうロジックをservletに書いてどういうロジックをbeanに書くべきなのでしょうか? 違いがいまいち分かりません。 全部servletに書いたら駄目なんすか?
>>518 staticメソッドなら、impoetの有無にかかわらずnewしないで呼べる。
インスタンスメソッドなら、importの有無にかかわらずnewしないと呼べない。
いずれにせよ、importとnewとは関係ない。
>>523 規模による
一般論としては、パラメータの解析やどのロジックを実行するかまでをServletが責任を持ち、業務ロジックは分離するのが良いとされている。
言い換えればHttpRequestに関連する部分はServletで処理し、業務ロジッククラスはServletに依存しないようにすると依存性が低くなる。
結果としてテストがやりやすいなどのメリットがある
aspx → jsp aspx.cs → Servlet .cs(自作クラス) → Bean って感じ?
XML+XSLTをイメージしてXSLTをJSP、XMLをBeanとイメージすればいい。 JSPに何でもかんでも書いちゃう時代もあったけど、8年くらい前の話。 JavaはMVC3層モデルからJ2EE5層モデルと層分けの定義がいろいろあるけど 最初はXML+XSLTをイメージするのが簡単で分かりやすいかと個人的に思う。
newの質問で思ったんだけど、 singletonってコンストラクタが使えないジャン。 代わりに、 getInstanceに引数をつけてやれば、コンストラクタみたいに使えるね。 なんで今まで気づかなかったんだろう。 わざわざセッターメソッドを用意していたwww
529 :
デフォルトの名無しさん :2007/12/03(月) 23:37:35
staticクラスを作るのはどういう時? publicクラスかprivateクラス以外は作ったこと無いわ。
ああ、でもやっぱりインスタンスが一つしかないのに、 わざわざgetInstanceでフィールドに代入する意義がないか。 renewField(引数)とかを作ったほうが感覚的にわかりやすいね。 セッターでフィールドを初期化するってのはちょっと違和感がある。
フィールド初期化なんて見るからに状態に依存するものをシングルトンって 間違ってるだろうとは思わないのかね。
532 :
デフォルトの名無しさん :2007/12/04(火) 00:11:04
私、経理マンなのですが経営数値を分析・管理するソフトを作りたいのです。 と言って全くこの分野にはシロートなのですが、何から始めたら良いでしょうか? 叩かれることを覚悟で2chで質問させて頂きました。
>>532 いや、別にム板は別に誰彼かまわず叩くような板ではないが、経理用のソフトを一から作るのか?
簡単なものならExcelのVBスクリプトを使えばいいと思うが、それ以上は専門のソフトウェアを使った方がいいと思うぞ。
経理なんてクリティカルな分野なんだから、バグが怖いし、何より手作りでは市販ほどのクオリティはできにくい。
それに、自作のソフトではデータや処理に一般性がなくて、情報を同僚なんかと共有しにくいしな。
悪いこといわないから、ソフトウェア板で該当ソフトを探したほうがいい。
>>532 JavaのAPIドキュメントを読んで使えるようになることだな。
経理ならまずはjava.math.BigDecimalあたりか。
Excelの数値型って何bitまでいけるの? 128bit以上いけるならExcelを進めるわな
まともにJavaアプリケーション開発してる人に質問(Javaじゃなくてもいいかもしれないが) パッケージ名に gui とつけるのは、普通ですか? それともguiとなるクラス群ををパッケージにまとめるというのは、設計段階で間違ってますか?
guiパッケージは普通だと思う。 問題はguiパッケージに何を詰めるかだと思うが?
>>529 staticとpublic/privateは別の話だろう
static(内部)クラスは、公開クラスとするほどではなく、あるクラスの内部でのみ使われる場合に使う。
staticでない内部クラスとの使い分けは、そのクラスのインスタンスが、外側のクラスのインスタンスと紐づいているかどうか。
例えばあるクラスの中でのみ使うComparatorの実装クラスであれば、内部フィールドを参照するならば非static、参照せずある条件を持つならばstaticとする(例えばの話)
>>532 ソフトウェア産業の丸投げ体質を知った上で、優秀な中小企業を見つけ、直接発注する能力を養う事からはじめよう
うちらは開発のプロ、>523は経理のプロ、無理に自分で作るのは辞めたほうがいい。
開発側にどうやったら作りたいものが伝わるかを学ぶ方が建設的
>>523 同じ業務プログラムをバッチから呼び出したい場合とか考えてみよう。
>>532 「経営数値を分析・管理」ってどういうこと?
生データは別に会計ソフトがあって、それをいじくっていろいろやりたいとか?
Javaはそういう分野には、あまり向いていないと思う。
>>532 >>540 Java でファイルへ I/O って面倒だなぁ。どの言語でもそうだ
と言われるとそうかもしれんが、C++ の方が楽に感じる。
簡単なことなら Ruby とかがいいと思うなぁ。
>>541 まぁ、マシなほうだとは思うよ。
Loggerとかを使えばテスト用のは簡単に作れるし、
普通のならライブラリを作っちゃえば?
むしろ、面倒なのは文字列処理とかじゃないかと思うけどね。
メソッドは多いから自由性は高いんだけど、
パーサとかはえらい作るのが面倒だ。
HSPでxmlパーサ書いたことある俺に言わせりゃjavaのIOは素直なオブジェクト志向。
なんでまたそんな苦行をw
545 :
デフォルトの名無しさん :2007/12/04(火) 13:38:19
>>532 まずは基本的な経理ソフトにアクセスできるインターフェース作りから始めるのが無難でしょう
大量のデータの処理をソフト側に任せ経営管理機能に特化したほうが楽でしょう
データの互換性が何より重要になります
現在のところ経理ソフト自体の完成度は高くその機能を超えるのはなかなか難しいと思います
また処理データをOfficeなどのソフトで処理できるようにする事も大事です
POIを見るといいでしょう
またOOOなどのソフトを介してアウトプット用のデータを作る事も出来ます
表計算ソフトなどでのグラフ化や
役員会議でのパワーポイントでのプレゼン形式の報告など
に使えるようにする事が大事です
グラフをカスタマイズして画像として資料に貼り付けるのであればJFreeChartがお勧めです
とはいえ
資金繰り等の基本的機能はソフトについてるはずなのでそのデータをもとに更に加工
するといった手順になるのではないでしょうか
経理ソフトそのものを再構築するのであればJDBCは必須ですしjava.netのネットワーク機能も必須です
売り物にするつもりであれば全銀データアクセスは無くてはならないものです
イニシャライザ中で配列初期化子が使えないのはなんでですか。 コンパイラの手抜きと違うんですか。
初期化じゃないからでそ
549 :
デフォルトの名無しさん :2007/12/04(火) 16:25:11
new すればいいじゃん
>>546 の「イニシャライザ中で配列初期化子が使えない」
分かるように解説をお願いしますだ_no
551 :
デフォルトの名無しさん :2007/12/04(火) 17:38:48
アプレット作ってるんですが、小数(double)をlabel setText で表示 させようとして、コンパイルしたらdoubleには対応していないと出ました。 どうすれば小数を表示できますか。お願いします。
つDecimalFormat
jadでデコンパイルしたのを再コンパイルしたらエラーが出たんだが、これって何が原因なんだろうか。
ttp://v2c.xrea.com/ 改造しているのはこれで、あとはコンパイルするだけなのに何故かエラーで手詰まり。
デコンパイルしたものをすぐに再コンパイルし直してもエラーになるから改変ミスではないはずだし……
ほんと何が原因なんだろう……
>>551 label が java.awt.Label だとすると setText(String)
// 他のクラスでも一般的に setText の引数は String だが。
double に String は含まれないのでコンパイルできない。
簡易メソッドでよければ、Double.toString(double)
他は
>>552 やら、1.5以降なら String.format(String, Object) やら…
別に、普通にリコンパイルを防ぐobfuscateがしてあるんじゃないの?
556 :
デフォルトの名無しさん :2007/12/04(火) 18:03:42
なんでCより進化した言語にCの流儀入れなきゃなんえんだよ
>>553 jadがデコンパイルに失敗してコンパイルできないソースを吐いてしまうことはよくある
>>556 そんなあなたにはCの流儀なんか微塵も混じってないHaskellやLispがおすすめ
>>553 JDK 1.4 コンパイラで作ったクラスファイルあたりからまともに再コンパイルできるようなコードは吐かないよ。
1.1 でコンパイルしたのは綺麗に出るんだけど。
あれは改変するためのツールじゃなくて分析するためのツール。
1.4あたりから最適化が凄まじくなったからな。 javaはソース復元できるってのはもう大昔の話。
562 :
デフォルトの名無しさん :2007/12/04(火) 19:41:00
ProcessBuilderを利用して,以下のように外部プログラムの出力を取得し, Javaで処理をするということを目指しています. 以下のプログラムをそのまま実行したんですが,ある程度以上出力が続いた後, 必ずプログラムが途中で固まってしまいます(強制終了するわけでも エラーを吐くわけでもなく,実行中のままlineに値が入らなくなる). 外部プログラムの出す出力がある一定以上になったときに必ず固まるので メモリか何かの問題かと思って, 1.Eclipse起動オプションに-vmargs -Xms256M -Xmx512Mと指定 2.Eclipse上で,実行するプログラムのVM引数にも同じように-Xms256M -Xmx512M指定 して実行したんですが,やはり同じところで固まりました. どなたか打開策を教えていただけませんでしょうか? よろしくお願いします. ProcessBuilder pBuilder = new ProcessBuilder(gaibuProgramCmd); Process p = pBuilder.start(); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while((line = br.readLine()) != null){ System.out.println(line); }
>>561 最適化が凄まじくなったつーより、
jadがアップデート止めてて1.4以降に対応しきれてないって感じのような。
リフレクション使って特定クラスの任意のメソッドを呼び出すようなものを作ってるんだけど (そのうち RPC になる予定なので)、全てのメソッドの先頭で権限チェックするの面倒なんで アノテーション使って宣言形式でやろうと思うんだけど、こういう使い方ってあり? @Administrator public void removeUser(int userId){...} // 呼び出し側 (このメソッド内でアノテーション見て権限チェック) RPC.call("removeUser", 100);
>>562 標準エラー出力が満杯になって詰まった可能性は?
>>566 権限チェック面倒ったって、メソッドの先頭で
checkAdminPrivilege();
とか一行呼ぶだけで済むようにしとけば、大して変わらんと思うのだが…
まぁアノテーションでもいいと思うけど
569 :
562 :2007/12/04(火) 21:04:04
>>567 ありがとうございます!
アドバイスを頂いたときにはたと思い至り,
以下のように「pBuilder.redirectErrorStream(true);」を追加すると
正常に動作するようになりました!!!
標準エラー出力が満杯になるということがあるんですね・・.
本当にありがとうございました.
ProcessBuilder pBuilder = new ProcessBuilder(gaibuProgramCmd);
pBuilder.redirectErrorStream(true);
Process p = pBuilder.start();
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while((line = br.readLine()) != null){
System.out.println(line);
}
>>568 将来的にインターフェースにして、動的プロキシ使って RPC 呼び出す構成にしたいので
宣言でやるのが変じゃないかがキモなのですよ。
変じゃないかは権限チェックの責任を誰に持たせるかによるんじゃないの。
>>570 なんとなくどこかにセキュリティホールが開きそうな気がするのが気になるけど、
大丈夫なら、別にアノテーションいいと思うよ
自分も変な使い方しようとしたことあるし・・・
interface MyProtocol {
@Message(id = 3, priority = LOW)
void hogehoge();
}
とか
権限チェックは呼び出し側 (インターフェースの裏に居る InvocationHandler) で一括してやるので 宣言さえ適切なら抜けはなく、宣言しか見ない呼び出し側にも明確かと。 今の頭の中の最終形はこんな感じか。 public interface RemoteServer{ @Permission(role = User.ADMIN) public String deleteUser(int id); @Permission(role = User.SYSTEM) public void executeBatch(); } public class RemoteServerInvocationHandler extends InvocationHandler{ public Object invoke(Object proxy, Method method, Object[] args) throws Exception{ // メソッドのアノテーションを調べて実行権限確認 // メソッド名に基づく RPC 呼び出し } }
@AccessRights(Role.Administrator) とかの方がコントロールしやすそうだな。. あとログイン済み確認とアカウントのロール割り当てはチェックは、どのみちせなかん。
っと、同じことかいちまったw
ああ、インターフェース使う側のプログラマにもどの権限で呼び出せる機能かが 明確になるので意外と良いかもしれん。JDK 1.4 以来ずっと 「アノテーション なんてどこで使いようがあるんだよ」 と思ってたが、やっと一つ見つけたわw アスペクト指向チックな設計してるところでは使いようによっては便利なのかな。
aptでアノテーションを参照してメソッドの先頭に権限チェックをつっこめるようになったりするといいんだけどねえ。
そういや RMI ってまだスタブやスケルトン必要なの? RMI 実装が動的プロキシ使ってくれればスタブもスケルトンも不要だと思うんだけど。
Webサービス全盛の今、RMI使う奴なんかまだ居るのかね
対外システムやサブシステム間の接続でもなければ全通信に XML 使うのは ただのオーバーヘッドでしかないな。まぁ大半は客騙してオーバースペックの ハード売る口実に使ってるだけなんだが。
CORBAって今も現役なの?RMI-IIOP採用はうちの近くでは聞かないなぁ。 WebServiceはRESTのせいで何かHTTPで使えれば何でもそうみたいに聞こえる。
分散トランザクション使いまくり、色々な言語/環境/会社使いまくりの某巨大銀行の 中心付近では余裕で現役だったりする。Web サービスなんかバッチ処理 (非 Java) からアプリケーションの機能呼び出す時くらいにしか使ってないがな。
>>578 今は動的プロキシで自動生成してくれるので不要
584 :
デフォルトの名無しさん :2007/12/05(水) 00:47:55
JDK1.4でString.replaceAll("foo", "\\var");をしても、\\が表示されません。(varになる) String.replaceAll("foo", "\\\\var");としてもだめでした。 どうすればいいでしょうか?
>>584 ドキュメント嫁と言おうとしたが1.4のドキュメントには書かれてないな。
1.6のドキュメントより。
> 置換文字列内でバックスラッシュ (\) とドル記号 ($) を使用すると、
> それをリテラル置換文字列として処理した場合とは結果が異なる場合があります。
> Matcher.replaceAll を参照してください。
> 必要に応じて、Matcher.quoteReplacement(java.lang.String) を使用して、
> これらの文字に特別な意味を持たせないようにしてください。
すまん、quoteReplacement導入されたの1.5だった。 1.4の場合どうすれば良いかわからん。
587 :
584 :2007/12/05(水) 02:01:54
>>585 ご説明ありがとうございます。quoteReplacement…あまり聞きなれないメソッドですね。
別の環境で試したらString.replaceAll("foo", "\\\\var");でうまくいきました。
うまくいかなかった環境とはリビジョンが異なるのでよくわかりませんが
もう一度試してみようかと思います。
ちなみに、うまくいったのはJDK1.4.2_16とJDK1.5.0_12です。(1.5は動作をみるために)
うまくいかなかった(と思う)環境はJDK1.4.2_13使ってました。
1.4のリリースノートに関連するキーワードがないので違いはないと思えますが…?
再度試してだめだったら、Matcherであれこれ試してみようかと思います。
>>588 読んで字のごとく。
この程度のソース読めないなら諦めろ。
pencilCase.hasNext()
pencilCase.next()
pencil.getName()
この3つの実装をトレースしてみれ。
マヌケ
総称型使ったクラス (コレクション持ち) の clone() で、警告なしで コレクションも複製しようと思ったらまた抑止しなきゃいけないニカ? public Object clone(){ try{ Node<?> node = (Node<?>)super.clone(); node.subnode = new ArrayList<T>(this.subnode); // 型のフイッチ return node; } catch(CloneNotSupportedException ex){ throw new IllegalStateException(); } }
>>591 copyやらduplicateやら名前をclone以外にして複製メソッドを作り直す、とか
>>592 でも super.clone() 呼んだ時点で (Node<?>) にキャストしなきゃいけないから同じだよなぁ。
うーんちょっと凝ろうとするとダマシダマシ地獄にはまるな、ジェネリクス。
標準のコレクションみたいに 「何でも入るバケツに制限つける」 程度の用途に抑えておいたほうがいいのか。
// 例外処理省略 // interface Node extends Clonable protected Object clone() { Node<?> result= (Node<?>) super.clone(); result.children = new ArrayList<Node>(); for(Node child; node.getChildren()) { result.add((Node) child.clone()); } return result; }
>>593 親クラスが変更不可なら、うーん…設計ミス?(ぉ
>>591 どうせSuppressWarnings付けるんなら、super.clone()をNode<T>で受け取るべきだと思う
public Node<T> clone(){
try {
@SuppressWarnings("unchecked")
Node<T> node = (Node<T>)super.clone();
...
}
他人が作った、違うパッケージに例外が定義されています。なぜか private です。 private exception Foo; このパッケージ内のクラスを呼び出しているのですが、Foo が発生しています。 Foo を catch する方法はありますか?
作った奴を吊るし上げろ 外に投げる例外でprivateとかバグだろ・・・ 回避策はcatch(Exception e) のみ 規約で禁止されていたら乙
599 :
デフォルトの名無しさん :2007/12/05(水) 16:48:10
Desktop desktop = Desktop.getDesktop(); String test ="全角スペースとかOS依存の文字を使ったパス"; File file = new File(test); try { desktop.open(file); } catch (IOException exception) { exception.printStackTrace(); } 何か文字化けしてしまってうまくできません。どうやって文字エンコーディングとか設定してうまくできますか?
600 :
デフォルトの名無しさん :2007/12/05(水) 16:49:45
教えてください。 プログラム内で以下のように記述してコンパイルしたら static int[] pos = new int[8]; static void print() { for(int i=0; i<8; i++) { System.out.printf("%2d", pos[i]); } } 次のようなメッセージがでました The method printf(String, int) is undefined for the type PrintStream どのように対処すればいいのですか?
>599 以下を書いてくれ 実行環境のOS 読み込みファイルの文字コード 読み込むファイルの具体的なパス Javaのバージョン
>>690 javac -version でバージョン報告よろ
603 :
デフォルトの名無しさん :2007/12/05(水) 17:04:11
>>601 このソースは質問のところを適当に簡略化して書いただけなんですけど、
実行環境のOS windowsXPとか
読み込みファイルの文字コード たぶんXPなんでMS932?(System.getProperty("file.encoding")て取得してみた)
読み込むファイルの具体的なパス C:/Get Wild.mp3(真ん中のスペースを全角にしてみた)
Javaのバージョン jdk1.6.0_02
Failed to open file:/C:/Get%E3%80%80Wild.mp3. Error message: 指定されたパスが見つかりません。
完全に文字化けしてる…
get wild and tough ひと−りーではー
mp3? 何時からmp3がテキストファイルになったんだ?
606 :
599 :2007/12/05(水) 17:28:49
>>605 テキスト??
SE 6で追加されたDesktopのopenを使ってファイルを実行しただけですが。
ちゃんとしたパスならmp3に関連付けられたアプリケーションが起動してmp3を再生します…
file:// になってないけどいいのかな
>>606 おまいが「どうやって文字エンコーディングとか設定して」と聞いているんじゃねーかw
Eclipse 3.3 にしたらパッケージエクスプローラで F5 押しても更新されなくなった。 ショートカット変わった?
>>599 使用できない文字だろうな
Fileクラスはマルチバイト対応だが、内部的にURIに変換されているからアスキー変換されているっぽい
file://〜 でアクセスできるファイルでないと開けないということ
target="_blank"が書いてあるページと、それで表示したページは セッション情報は共有してるんでしょうか? 具体的には、 1.ページAから別ウィンドウでページBを開く 2.ページBからHttpSessionに情報セット 3.ページBを閉じる 4.ページAから別ウィンドウでページCを開く 5.ページCから2でセットした情報を読み込む という処理は可能でしょうか?
やってみりゃいいのに 多分できる
613 :
599 :2007/12/05(水) 18:04:16
>>607 599のソースでちゃんとしたパスなら動くからおk
>>608 化けてるから文字コードかと思って…
>>610 そういうことですか…
ファイルのパスを取得→テキストとかに保存→(数日後)→テキストからパスをロード→実行
ってかんじの機能を持ったアプリだからこれができないと…
何かいい方法ないっすかねぇ
>>613 アプリフォルダにコピーしとけば?
やってみないとわからないけど、一度Fileインスタンス生成して、toURL().toURI() でURIを作る。
で、URIが有効ならば、URIからFileを生成すればどうだ?
化けてるんじゃなくてURIエスケープされてるだけじゃん。 ん?FileってURIだっけURLじゃなかった?
617 :
デフォルトの名無しさん :2007/12/05(水) 18:33:01
素人か?
618 :
デフォルトの名無しさん :2007/12/05(水) 18:33:21
教科書通りにCドライブの直下にソースを作成して、コマンドプロンプトからコンパイルしようと 思ったのですが、コマンドプロンプトが、デフォルトで C:\Document and Setting\??? から始まるようになっていたのですが、これを直す方法はありますか? 後、無理にC直下から起動する必要はありますか?
619 :
デフォルトの名無しさん :2007/12/05(水) 18:35:30
直下にする理由が分からんが コンパイルの際にフルパス入力しろ
620 :
599 :2007/12/05(水) 18:53:44
Desktop desktop = Desktop.getDesktop();
File file = null;
JFileChooser filechooser = new JFileChooser();;
int selected = filechooser.showOpenDialog(null);
if (selected == JFileChooser.APPROVE_OPTION) {
// 選択されたファイルを得る
file = filechooser.getSelectedFile();
}
try {
desktop.open(file);
} catch (IOException exception) {
exception.printStackTrace();
}
上のソースで全角スペース使ったファイルをファイルチューザーで選んでも
Failed to open file:/C:/Get%E3%80%80Wild.mp3. Error message: 指定されたパスが見つかりません。
at sun.awt.windows.WDesktopPeer.ShellExecute(WDesktopPeer.java:59)
at sun.awt.windows.WDesktopPeer.open(WDesktopPeer.java:36)
at java.awt.Desktop.open(Desktop.java:254)
at test.Main.main(Main.java:26)
これは困った…どうやらopen自体が全角スペースとかのパスが想定されてないみたいだ…
これはDesktopのソースを見てオーバーライドするしかない?
>>617 最近プログラミング始めた素人です…
>>620 確認。問題があるのは sun の WDesktopPeer であって、Desktop 自体は関係なし。
試しに、全角空白を含む存在しないファイルを指定すると、Desktop 内で例外になる。
その場合、全角空白はエスケープされていない。
他の多バイト文字は大丈夫そう(一文字は確認)なのに。
ちなみに File.exists でも問題なし。URI にするのも効果なし。さてはて…
全角空白の UTF-8 表現は E3 80 80 だから別に化けてるようには思えんが。
zipの日本語ファイル名には対応しましたか?
>>624 元々全然する気ねーみたいだけど。
てか日本語ファイル名には対応している。Shift_JIS や任意のエンコーディングに対応していないだけ。
626 :
599 :2007/12/05(水) 22:12:30
>>621 エラー出るのはたぶん全角スペースだけだな
>>622 場所は一緒だけど何か違う。
そのやつはファイル名はマルチバイトじゃないし、
別にmp3ファイルじゃなくても、パスにともかく全角スペースでエラーでるし…
流石に俺が該当箇所のソース見てみてもどこがおかしいかワカンネ
Java3Dの質問もここでよろしいでしょうか? テクスチャとして張れる画像は(2のn乗)×(2のn乗)ピクセルでなければ ならない、と調べたら出たのですが、これ以外の大きさの画像を貼り付ける 手段はないでしょうか?
ある いくらでもある
>>627 DirectXしかしらんが、そのサイズはサーフェスのサイズではないのか?
もし本当に2のn乗サイズしか無理でも、2のn乗サイズに足りない面積を適当な色でパディングして、
テクスチャを設定するときにUV座標をいじればいい。
改行も含む任意の文字の連続にマッチする正規表現はどう書くのがいい? (?:.|\n)*では遅い上に簡単にスタックオーバーフローしてしまう。 alternationがこの欠点を持つことはsun確認済で直すつもりもないらしい。 (?:.*\n?)*とかかなあ。
そんなこと考えなくても Pattern#compile に DOTALL フラグを渡せばいいよ
そういうのがあったのか。どうもありがとう。
>>632 フラグを渡すのが面倒なら(?s:.*)みたいに正規表現に埋め込むのも
>>627-628 ありがとうございます。
ところが実際貼り付けようとしたらコンパイルは通るのですが
実行で躓きます。
texFile = new java.net.URL(getCodeBase().toString() +"画像ファイル");
でぬるぽが出てgetCodeBase(Unknown Source)
となります。何が悪いのでしょうか?
log4jでログを出力しているのですが、log4j.xmlの設置ディレクトリは変更できないのでしょうか?
Dlog4j.configuration
>>634 それアプレット?
どこで実行してる?initの中?
たぶんJava3D関係ない
>>636 これって毎回読みにいくっぽいのですが、
初期設定みたいなものにはできないのでしょうか?
起動時に毎回読みに行き初期設定になるわけですが、何か問題でも?
言葉足らずでした。 JVMの設定にしたいのではなく、とあるプロジェクトではこのlog4j.xmlを使うという形にしたいのです。
メソッド名の付け方について質問です。 インスタンス.メソッド(引数)は、 補語.動詞.(目的語)と読み替えられると思います。 (murata.set(hat)で村田に帽子を被せる等) インスタンスに一連の動作を行わせるのメソッドの名前を今までplay()としていました。 しかし上の例に当てはめると「インスタンスに一連の動作を行う」と、おかしな文章になってしまいます。 「行う」ではなく「行わせる」という意味にメソッド名を変えたいのですが、 この場合どういうメソッド名にすれば良いでしょうか?
主語.動詞(目的語) だと思う murata.putOn(theHat); -> 村田が帽子をかぶる murata.play(); -> 村田が遊ぶ #村田って誰よw
>>641 メソッドの呼び出しはインスタンスに何かを行わせるというより、
インスタンスが何かを行うきっかけを与えるってイメージの方が良いかも。
呼び出し側で行わせるんじゃなくて、インスタンスが自分で行うって感じ。
主語.動詞(目的語)だよな。 murata.execute(sequence)とかじゃね?
主語はメソッドをコールしているオブジェクトで、 目的語.他動詞(副詞節) こうじゃね?
おまいらの英語ティーチなんて当てになんねー クヌースにでも教えてもらえ
>>640 意味わからん
実行時に指定してもらえばいいだろ
650 :
デフォルトの名無しさん :2007/12/06(木) 20:18:13
javaでFTPをやろうとしているのだけど、相手先のサーバのディレクトリ が存在するか否かのチェックってできますか?
>>650 FTP 的には cd や ls を試してエラーにならないかどうかでしか判断できない。
検索画面で一覧表示し、チェックボックスでチェックしたデータをCSVファイルに ダウンロードし、同時にDBにダウンロード済みのフラグを立てて画面を再表示して ダウンロードしたデータが一覧から消えるということを行いたいのですが、上手く いきません。(レスポンス先をCSVファイルにしている為、画面更新ができない) どなたか、同じような経験をしてこう解決したという方いましたらご教授の程宜しくお願いします。
おい、やっぱり IE は Windows-31J を正しく認識できてないぞ。
マルチスレッド考慮してる?
>>652 <form> に target="_blank" 付けるなり JavaScript で別ウィンドウ出すなりして CVS ダウンロードのリクエストを送信。
元の画面は JavaScript で 1 秒後にでもリロード。
double型の軽いビット演算の方法を教えてください。 今double型を整数部と小数部に分けて考えています。 整数部はlong型にいれビット演算してdouble型に戻し、 小数部はMath.pow(2,63)をかけてlong型に入れビット演算してMath.pow(2,-63)をかけてdouble型に戻す作業をしようとしています。 しかし、こんなやり方ではビット演算とは関係がないところでに重くなってしまいます。 どうしたらよいのでしょうか?
昨日JAVAの入門書よんだらプログラムにはmain()メソッドが必ず一個あるって書いてんだけど、今携帯用のMIDPアプリのソース何種類かみたけどmain()メソッドがないよ どういうことでしょうか?
>657 javaアプリケーションの間違いじゃね? いらない形もあるよ。 コマンドプロンプトから java クラスファイル で実行するなら、そのクラス内にはmain必要。
>>658 レスありがとうございます!
携帯用の2ちゃんブラウザのa2Bてアプリのソースみてました
main()いらないのもあんですね
ありがとうございました
>>658 ちょwおまwww
>>657 書いたコード中にmainがあるとは限らない。
MIDPアプリの場合は、ランタイム(JVMなど)上にさらに
MIDPアプリを動かすための枠組み・仕組みがあって
そこからMIDPアプリが呼ばれるようになっている。
その枠組み・仕組みの中にはJVMから呼ばれるmain()メソッドがあるよ。
>>656 doubleのビット演算を行う目的は?
なにがどのくらい重くなるの?
662 :
デフォルトの名無しさん :2007/12/07(金) 09:29:38
1. FileInputStream is = new FileInputStream(new File("C:/tmp/test.txt")); 2. byte[] data = new byte[16]; 3. is.read(data); // 16バイトのバイトデータを配列dataに読み込む 上記のdataを一次元配列にいれるためには配列の型は何にすればいいのでしょうか?
>>662 健忘症が激しいようで。自分でやってるのに気がつかないとは…
まあ、byte[] の配列を作ればいいんじゃないの?
data を使いまわすなら、複製しないとダメだけどな。
byte[][] 型. だけど、読込バイト数をファイルサイズから計算して配列サイズを求める必要がある。 どっちかといえば、ArrayList<byte[]> のが良いかと思われ
ちょっとしたテキスト解析を行うプログラムを作っています。 その解析処理では、いくつか閾値を設けなければならなくて、 その閾値の設定をどこからでも参照できるようにしたいのです。 (その参照元は、値の設定を行うビューや実際に解析を行うクラスなどです) こういったグローバルな設定項目をJavaで定義するにはどうすればいいのでしょうか?
SingletonとかMonostateとか定数ユーティリティクラスとか?
>>659 わかってるとは思うが、それでもお節介に言ってしまうと、mainは複数含まれてもいい。
実行時にどのバイトコードに含まれるmainを実行するのか指定するので、
デバッグ用mainとリリース用mainとか使い分けることも出来る。
>>667 質問者の頭の中ではプログラム=クラスだと思うから1つで正しいと思われ
asage
>>661 >doubleのビット演算を行う目的は?
理由1:
作っているアルゴリズムと速度比較するために遺伝的アルゴリズムを作ろうとしています。
この2つのアルゴリズムの初期化方法と評価方法をまったく同じにするために先に作ったアルゴリズムのdouble型に統一しようとしているため。
理由2:
遺伝的アルゴリズムの交叉、突然変異の計算部分をビット演算するため。
>なにがどのくらい重くなるの?
Math.pow()の部分だけでほとんどの計算時間を費やします。
>>666 ありがとうございます。3つとも調べてみました。
定数ユーティリティはクラスメンバを直接読み書きさせるもの、
Monostateは定数ユーティリティにアクセッサを追加したもの、
Singletonはインスタンスメンバを持たせてインスタンスが1つしか存在しないようにしたもの、
という理解で間違ってないでしょうか。
ただ、これらの使い分けは一般にどうされてるんでしょうか…?
>>670 Double.doubleToRawLongBitsでdoubleのビットパターンが得られるので、
自力でそれを仮数部と指数部と符号に分解して、演算後また合成して、
Double.longBitsToDoubleでdoubleに戻す…とか
673 :
デフォルトの名無しさん :2007/12/07(金) 12:16:20
>>651 apacheにライブラリがある
其れを使えば簡単に出来るしファイルを扱うようにFTPを操作できる
>>670 どんなアルゴリズムでもそうだが、Math.powとアルゴリズムの計算量のバランスがおかしいので、その方法では速度比較できない。
doubleで軽いビット演算を行うのは難しいってのは明らかだろ?
つまり、やろうとしていること自体に無理がある。
自力でビット演算したところで、その処理が重い事は変わらないので比較する前の話
>>674 速度比較と書いてしまいましたが・・・収束速度比較の間違いです。ごめんなさい。
どちらのアルゴリズムがより少ない評価回数でより良い値に収束できるのかを調べようとしています。
>>672 ありがとうございます。
早速試してみます。
adasge
テスト
テストじゃねぇよテスト
680 :
デフォルトの名無しさん :2007/12/07(金) 14:26:06
>>676 同じだよ
難しく考えすぎてるだけ
その分ソースも難解になるぞ
>>680 プロトコル上の制約と既成ライブラリの有無がどうやったら同じレイヤーの話に思えるのか…
ソース? レイヤーの切り分けも出来ない素人が何言ってんだ。
StrutsのActionクラスにはインスタンス変数を使ったら マルチスレッド的にまずいですよね?
683 :
デフォルトの名無しさん :2007/12/07(金) 16:03:21
プロトコル上の制約含めてコントロールできるライブラリ 残念だけど貴方のレイヤーは私のレイヤーに包含されている
> 残念だけど貴方のレイヤーは私のレイヤーに包含されている それは 「cd やら ls やらで調べる手間は既成のライブラリ使えば楽」 ってだけ。 包含? 馬鹿ですか?
そんな細かいところ、どっちでもいいよ
686 :
デフォルトの名無しさん :2007/12/07(金) 18:18:19
プライドは邪魔だな 誰の目にも明らかに包含されてる
と、言ってみたい年頃なの?
画像のクリック検知をしたいのですが、方法がわかりません。 どなたか教えていただけませんか?
689 :
デフォルトの名無しさん :2007/12/07(金) 18:55:02
shadeで作った3Dオブジェクトをjava3dで扱う方法を教えてください
>>688 その画像を表示してるコンポーネントにaddMouseListener
691 :
デフォルトの名無しさん :2007/12/07(金) 19:19:51
OOOのインスタンスをJFrame内に生成する方法はないでしょうか
692 :
デフォルトの名無しさん :2007/12/07(金) 19:21:08
MATLABの関数をJavaから使うには如何したらいいでしょうか
>>690 解答ありがとうございます。
先にImage imgを宣言しており、MouseActionクラスで処理してるとして
public void paint(Graphics g){
g.drawImage(img, x, y, this);
addMouseListener(new MouseAction()):
}
という感じでよろしいでしょうか?
また、img1,img2というように、画像が複数あった場合の方法も教えていただきたいです。
度々申し訳ありません、よろしくおねがいします。
誰の目にも明らか ≒ うまく説明できないけど
>>693 paintのたびに毎回やる必要は無い
コンストラクタで一度やっておけば後はずっとイベントが来る
画像の数も関係ない
MouseListenerは画像ではなくコンポーネントに設定するものだから
>>695 つまり、
ConstName(){
//画像取得
img1 = getToolkit().getImage("img1.gif");
img2 = getToolkit().getImage("img2.gif");
addMouseListener(new MouseAction());
}
という感じでよろしいんですか?
あと、書き忘れていたんですが、img1とimg2のクリック検知を区別したいのですが…
これは処理しているMouseActionクラス(MouseAdapter継承)で行うんでしょうか。
今何を表示してるかは自分でわかってるはずだろ? if文で場合分けすればいい
>>697 説明不足でした。
img1とimg2は同時に表示されているんですが…
できれば例を示していただきたいです。
何度も申し訳ないです、よろしくお願いします。
>>698 GUI以前の問題。基本的なロジックに対する理解がなってない。if,for,whileからやり直せ。
>>698 // これらは回答が必要な質問ではない
AWTのイベントモデルは理解していますか?
MouseEvent は見ましたか?
座標の概念は分かりますか?
>>699 >>700 つまり座標取得を使って画像の範囲内の座標のクリックを検知する、
ということでよろしいのでしょうか?
何か勘違いをしていたみたいです。
ご迷惑をおかけしました。
テ&;ス&;ト
704 :
デフォルトの名無しさん :2007/12/07(金) 22:13:10
インターネットを通してモーター等をリモートコントロールする事を考えてます JAVAで双方向での通信までの部分を実現するにはどういったパッケージやクラスが必要になるでしょうか
JSP で拡張タグ使うときって、web.xml の taglib-uri に記述しないで <%@ taglib prefix="foge" uri="/WEB-INF/tld/foge.tld" %> とか直接 uri に場所指定するのも仕様的に良いんだっけ?
>>704 java.io.InputStream
java.io.OutputStream
java.net.Socket
java.net.ServerSocket
>>707 Servlet 2.3 って事は JSP 1.2, J2EE 1.3 (2001年頃) か。
だいぶ古い知識引きずってたのかな。どうもありがとう。
710 :
デフォルトの名無しさん :2007/12/07(金) 23:59:58
JSPで取得した値をhtmlタグ内の値として使うことって可能ですか? <input type="checkbox" value=取得した値> みたいなことがしたいのです。
<input type="checkbox" value="<%= value %>">
>>712 org.eclipse.swt.widget.ListのAPI読むと、
Only one of the styles SINGLE, and MULTI may be specified.
ってあります。SWT.CHECKは無効ですよ。
そういうのはJFace使わないと無理では。
714 :
デフォルトの名無しさん :2007/12/08(土) 10:11:43
NetBeans使えば簡単に出来るのに
716 :
デフォルトの名無しさん :2007/12/08(土) 13:38:09
JavaアプレットをEJBクライアントにすることってできますか?
できるよ セキュリティファイル(名前忘れた)をいじれば、ローカルファイルにだってアクセスできちゃうんだから
718 :
デフォルトの名無しさん :2007/12/08(土) 15:05:38
javabeansのアーキテクチャってどんな場面で使いますか
JavaBeansはどこでも使う
JavaBeansは最初はオーサリングツールの プロパティウィンドウに関連付けるために作られたんだよな
質問です。 JPanelとKeyListenrを継承したクラスを作り 同クラスのmain()からJFrameを生成、そのフレームに同クラスを配置しました。 その際、コンストラクタから自クラスをKeyListenerとして指定したのですが キーボード入力を受け付けません。 一旦、staticなクラス内インスタンスとして生成してからだと受け付けるのですが 原理というか、なぜそのようなことが起こるのかがわからないので どなたか分かる方、教えていただけないでしょうか。
JSP 2.0 から JSP が XML になったの? どういうこと?
なんでもかんでもXML
>>722 違いが出るのは、違う作りにしたから…
Listener を配置したのは、JPanel なのか、JFrame なのか…
「staticな"クラス内インスタンス"として生成」とは
何をしたことになるのか、はたまた何もしていないのか…
キーボード入力はフォーカスの問題だったりすることが多いような…
>>722 関係ないかも知れないけど
コンストラクタ内で自インスタンスをリスナー登録するのは避けたほうがいい
727 :
722 :2007/12/08(土) 18:17:54
>>725 Listenerを配置したのはJPanelです。
this.addKeyListener(this);
としました。
フォーカスはtrueにしてあります。
状況しだいで反応があったので、フォーカスは問題ないと思います。
>「staticな"クラス内インスタンス"として生成」とは
>何をしたことになるのか、はたまた何もしていないのか…
問題のクラスの中に、自分のインスタンスを持たせて、
main()でその中に自分のインスタンスを入れました。
なんで動いたのかとか、何やってるのかは自分でもわかってません。^^;
まあ、だから困ってるわけですが。
>>726 避けたほうがいい理由を教えてもらえませんか?
USBメモリから起動可能なwindow用のjava開発環境ってありますか? javaでメモ帳打ちをしろということになるのでしょうか?
>javaでメモ帳打ちをしろということになるのでしょうか? いきなり皮肉ってるwwww病気かwww
>>727 状況しだいで反応があった、というのがミソなんじゃないのかな
公開できる部分で問題になりそうな変えた部分を貼ってみれば、誰かが分かるかも
あと、726 じゃないが…
コンストラクタを通りきってない=生成未完了のインスタンスを
別のインスタンスに渡すなってやつですな。
想定外の事が起きる可能性を増やすことになるから。
JSTL の <c:set> って target が Map なら target.put(property, value) みたいなイメージで動く と思ってたんだけどあってますか? どうもそのように動いてくれないんですけど。 <jsp:useBean id="product" class="java.util.HashMap" /> <c:set target="product" property="name" value="インスタントラーメン" /> javax.servlet.jsp.JspTagException: Invalid property in <set>: "name" at org.apache.taglibs.standard.tag.common.core.SetSupport.doEndTag(SetSupport.java:160) at org.apache.jsp.tag.web.references.tagfile.writeProduct_tag._jspx_meth_c_005fset_005f0(writeProduct_tag.java:106) at org.apache.jsp.tag.web.references.tagfile.writeProduct_tag.doTag(writeProduct_tag.java:70) … property="price" にするとメッセージが 「Invalid property in <set>: "price"」 になるので <c:set> で例外が発生していることは間違いないと思います。あと <jsp:useBean> を <% pageContext.setAttribute("product", new HashMap()); %> に変えても同じでした。 何か間違っているのでしょうか。
↑すみません、target 属性は EL で書かなければいけないんでした。var の癖が orz <c:set target="${product}" property="name" value="インスタントラーメン" />
734 :
デフォルトの名無しさん :2007/12/09(日) 19:52:52
文字化けしてしまいます。 文字化けを直したいのですが、どうやればいいのかわかりません。 おしえてくれませんか? //Sample.java class Sample{ public static void main(String args[]){ System.out.println("こんにちわ"); } } javac Sample.java java Sample ?????
実行環境の表示文字コードの問題でしょ
これだったら出るか? class Sample{ public static void main(String args[]){ System.out.println("\u3053\u3093\u306b\u3061\u308f"); } }
737 :
デフォルトの名無しさん :2007/12/09(日) 20:01:43
\u3053\u3093\u306b\u3061\u308f と、出ました。
どういう環境だよw
739 :
デフォルトの名無しさん :2007/12/09(日) 20:04:50
eclipseです。
eclipseなのかjavacとか打つ?
741 :
740 :2007/12/09(日) 20:20:21
×なのか → ○なのに
742 :
デフォルトの名無しさん :2007/12/09(日) 20:24:09
あ、そですね。 すみませんでした。 javac は、打ってません。 実行から、javaアプリケーションを押してます。
>641 execute()
class Sample{ public static void main(String args[]){ System.out.println(System.getProperty("java.runtime.version")); System.out.println(System.getProperty("os.name")); System.out.println(System.getProperty("os.version")); System.out.println(System.getProperty("os.arch")); System.out.println(System.getProperty("file.encoding")); } } とりあえず↑の実行結果を貼れ。
745 :
デフォルトの名無しさん :2007/12/09(日) 20:32:12
Dec 9, 2007 8:30:57 PM org.apache.catalina.core.AprLifecycleListener init INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: .:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java Dec 9, 2007 8:30:57 PM org.apache.coyote.http11.Http11Protocol init INFO: Initializing Coyote HTTP/1.1 on http-8080 Dec 9, 2007 8:30:57 PM org.apache.catalina.startup.Catalina load INFO: Initialization processed in 818 ms Dec 9, 2007 8:30:57 PM org.apache.catalina.core.StandardService start INFO: Starting service Catalina Dec 9, 2007 8:30:57 PM org.apache.catalina.core.StandardEngine start INFO: Starting Servlet Engine: Apache Tomcat/6.0.14 Dec 9, 2007 8:30:58 PM org.apache.catalina.core.ApplicationContext log INFO: ContextListener: contextInitialized() Dec 9, 2007 8:30:58 PM org.apache.catalina.core.ApplicationContext log INFO: SessionListener: contextInitialized() Dec 9, 2007 8:30:58 PM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-8080 Dec 9, 2007 8:30:58 PM org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:8009 Dec 9, 2007 8:30:58 PM org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/40 config=null Dec 9, 2007 8:30:58 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 1382 ms と、でました。
そうか、じゃあがんばってくれ
748 :
デフォルトの名無しさん :2007/12/09(日) 20:49:15
749 :
デフォルトの名無しさん :2007/12/09(日) 20:58:12
1.5.0_07-164 Mac OS X 10.4.11 i386 MacRoman なんか、変わりました。
servlet関係の話はどこですればいいですか?
Mac じゃ分かる奴少ないんじゃないのか。 日曜の夜には居なさそう。
752 :
749 :2007/12/09(日) 22:24:05
お返事待ってます><;
753 :
749 :2007/12/09(日) 22:28:29
class Sample{ public static void main(String args[]){ System.out.println("Hello World!"); System.out.println("こんにちわ"); } } だと、 Hello World! ????? と、なってしまいます。
>>749 単純な話として、文字セットの選択ミス。
eclipse でのテキスト保存に使ってる文字セットが MacRoman で、
日本語を扱えないから、MacJapanese か、Unicode系に変更する必要がある
どうだろうか
import java.io.*; class Sample{ public static void main(String args[]) throws IOException{ System.out.write("こんにちわ\n\n".getBytes("MacRoman")); System.out.write("こんにちわ\n\n".getBytes("MS932")); System.out.write("こんにちわ\n\n".getBytes("EUC-JP")); System.out.write("こんにちわ\n\n".getBytes("UTF-8")); System.out.write("こんにちわ\n\n".getBytes("Unicode")); } } ↑ちょっとこれの実行結果を貼ってくれ
756 :
754 :2007/12/09(日) 22:41:39
失礼。文字コードの話は eclipse ではなく、javac or java の標準設定ですね。
ええ。
>>755 に進んでください。
757 :
749 :2007/12/09(日) 22:44:50
????? ?±???…???? §?§?§?§?§? ????????´??°??? ??S0?0k0a0?0 と、なりました。><
758 :
デフォルトの名無しさん :2007/12/09(日) 22:47:49
別のサーバに存在するファイルを存在するか否かを判定するにはどうすれば いいでしょうか。
もうすでに存在するって自分でゆっちゃってるじゃん
とある用件で別処理で生成したファイルを他のサーバから確認しなければ ならないのです。
ソースの保存や読み込み、コンパイル時の文字化けでなくて出力時の問題らしいと言うのは 分かったが、コンソールを表示している JVM がMacRoman (≒ISO-8859-1?) にでもなってるのか。 -vmargs -Dfile.encoding=MacJapanese (≒Shift_JIS?) オプション付けて Eclipse 起動してみ と言いたいが Mac はどうなってるのか分からんw
>>760 システム構成や使えるプロトコルも明かさないで答えられるわけないだろ。
おまいの財布に近藤さんが入ってるかなんて誰も確認できないのと同じ。
763 :
749 :2007/12/09(日) 23:24:44
ターミナル上 Applications/eclipse/eclipse.app/Contents/MacOS$ls eclipse eclipse.ini ######ファイル名:eclipse.ini##### -showsplash org.eclipse.platform -vmargs -Xdock:icon=../Resources/Eclipse.icns -XstartOnFirstThread -Xms40m -Xmx256m -XX:PermSize=40m -XX:MaxPermSize=256m -javaagent:/Applications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=no.mnemonic -Dorg.eclipse.swt.internal.carbon.smallFonts GUIで、eclipse.appをダブルクリックしたら、eclipse3.3が起動します。 なにか、わかりましたら、おしえてください。><
FTPしか使えないです。
766 :
749 :2007/12/09(日) 23:43:47
>>765 どうもありがとうございます。
参考にします。
>>761 のオプションを頼りにしたら、出来ました。
eclipse.iniファイルに、-Dfile.encoding=UTF-8を付け加えて、eclipse3.3を再起動させて、
>>755 を実行させたら、以下のように表示しました。
?????
????????
?????d?
こんにちわ
??S0?0k0a0?0
明日、月曜日なのに、本当にご協力ありがとうございました。
767 :
749 :2007/12/10(月) 00:08:49
直ってませんでした><; import java.io.*; class Sample{ public static void main(String args[]) throws IOException{ System.out.write("こんにちわ\n\n".getBytes("MacRoman")); System.out.write("こんにちわ\n\n".getBytes("MS932")); System.out.write("こんにちわ\n\n".getBytes("EUC-JP")); System.out.write("こんにちわ\n\n".getBytes("UTF-8")); System.out.write("こんにちわ\n\n".getBytes("Unicode")); System.out.println(System.getProperty("java.runtime.version")); System.out.println(System.getProperty("os.name")); System.out.println(System.getProperty("os.version")); System.out.println(System.getProperty("os.arch")); System.out.println(System.getProperty("file.encoding")); System.out.println("Hello World!"); System.out.println("こんにちわ"); } } ????? ???????? ?????d? こんにちわ ??S0?0k0a0?0 1.5.0_07-164 Mac OS X 10.4.11 i386 MacRoman Hello World! ?????
恋愛力学 今日も格闘中
そんなものは理論物理学だ 明日も机上の空論
>>767 さっきのは Eclipse ワークベンチの文字コードで、あんたが今動かしたプログラムの文字コードは
まだ MacRoman のままなんだわ。
[実行]-[実行ダイアログを開く]-[Javaアプリケーション]-[Sample](多分)-[引数]-[VM引数] に
-Dfile.encoding=UTF-8
と入れてみ。
771 :
749 :2007/12/10(月) 00:31:21
>>770 おお!できました。
ありがとうございます。
これって、実行時に毎回入力しないといけないっぽいですね・・・。
一度設定して実行で、普通に表示する方法って無いですかね?
Java VM がデフォルトで使用する文字コードをどうやって決めてるかだが、 Mac 環境は分からん。Unix 系だからシェルの環境変数 LANG か LC_CTYPE を ja_JP.UTF-8 に設定するんじゃないのか。Mac 関連板で聞け。
773 :
749 :2007/12/10(月) 00:48:53
$ locale LANG="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_CTYPE="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_ALL="ja_JP.UTF-8" こうなっています。
774 :
Round Trip :2007/12/10(月) 11:37:21
722,727です。
>>731 様、アドバイスありがとうございます。
返答が遅くなって申し訳ありません。
いろいろと試してみた結果、よくわかりません…。
コンストラクタ内で同クラスを、Listener登録と同時にスレッド化しているのですが
その際の処理順序によって動作の如何が変化します。
setFocusable(true)とスレッドの生成の後、スレッド開始前にaddKeyListener(this)をした場合は
keyListenerが動作します。
またこの場合でも、コンパイル→実行(キー反応なし)→コンパイル→実行(キー反応あり)
という手順を踏まないと、正常に動作しません。
何がなんだかわからないのですが、
原因や対処法など、何かわかる方が居られましたら
アドバイスをお願いします。
何がなんだかわからないのでソースを示せ
ほれ、普通に動くぞ public class TestPanel extends JPanel implements KeyListener { TestPanel() { } public void keyTyped(KeyEvent e) { System.err.println(e); } public void keyPressed(KeyEvent e) { System.err.println(e); } public void keyReleased(KeyEvent e) { System.err.println(e); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { TestPanel panel = new TestPanel(); panel.addKeyListener(panel); panel.setFocusable(true); JFrame frame = new JFrame(); frame.add(panel); frame.setSize(100, 100); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }
>>774 確かにソース示せ、ですが…複合要因かなぁ
Swing継承クラスのコンストラクタ内でスレッド化…なんて、怖い単語が見えてますし
778 :
デフォルトの名無しさん :2007/12/10(月) 12:42:49
ファイルからnバイトを読み込みたいのですが int read(byte[] b, int off, int len)を使うと入力ストリームの位置がlenバイトづつ 進んでしまうので入力ストリーム位置を初期化したいのですがどうしたらよいですか? 例 abcdefg から3バイトづつ読み込むとき 1 abc 2 bcd 3 cde . . . としたいです。。。
java.io.RandomAccessFile raf; while(true) { byte[] bytes = new bytes[3]; int length = rad.read(bytes, offset, bytes.length); if(length == -1) break; }
>>778 文字列処理はある程度 1-4 kBぐらい? 一括読みしてから作業しようぜ。
入出力は重めの処理だぞう。まぁ気にならないと思うけど。
読み込み位置を変更する seek が標準APIで出来るのは、
>>779 のだけだっけね。
781 :
Round Trip :2007/12/10(月) 13:20:33
ソースを張ろうとしてコメントやら関係ない処理をそぎ落としたら
なぜか動いてしまってありゃぁ…?
もうちょっとソースを見直してみることにします。
素のままでは貼る勇気がでません。
>>777 Swing継承クラスのコンストラクタ内でスレッド化って
何が怖いのでしょうか。
良ければ教えてください。
>>778 戻したい量にあわせて適切にバッファサイズを指定して作成したプッシュバック可能なストリームで
入力ストリームをラップしてやればできなくもないけどまとめて読んで処理したほうがたぶんいいよ
>>781 何の為にスレッドを作っているのか想像もつかないのが怖いんだよ
ソース張らないならば誰もおまえさんのソースの問題点を指摘できないぜ
つまり、おまえさんは学べないって事。
784 :
デフォルトの名無しさん :2007/12/10(月) 13:37:21
java用の画像認識アルゴリズムで 使えそうなフリーのライブラリはありますか
なにを認識したいの?
786 :
Round Trip :2007/12/10(月) 14:43:57
>>783 お説ごもっともです。
ソースを以下に添付します。
よろしくお願いします。
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.event.*;
import javax.swing.*;
public class DynamicPanel extends JPanel implements Runnable,KeyListener{
//----------クラス定数----------
public static final int DEFAULT_WIDTH = 500;
public static final int DEFAULT_HEIGHT = 400;
public static final int DEFAULT_WAIT = 50;
//----------クラス変数----------
private int waitSec;
private Thread mainLoop;
//----------コンストラクタ----------
public DynamicPanel(){
setPreferredSize(new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT));
this.waitSec = DEFAULT_WAIT;
this.commonInit();
}
続きます。
787 :
Round Trip :2007/12/10(月) 14:44:40
続きです。 private void commonInit(){ this.setFocusable(true); this.addKeyListener(this); mainLoop=new Thread(this); mainLoop.start(); } //メインループ public void run(){ while(true){ runInterface(); repaint(); try{ Thread.sleep(waitSec); }catch(Exception e){ e.printStackTrace(); } } } //描画処理 public void paintComponent(Graphics g){ super.paintComponent(g); paintInterface(g); } 続きます。
788 :
Round Trip :2007/12/10(月) 14:46:12
続きです。 //状態遷移 protected void runInterface(){} //実行する描画処理 protected void paintInterface(Graphics g){} //----------キー入力---------- public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e){} public void keyPressed(KeyEvent e){ System.out.println("Get Key:" + e.getKeyCode()); } //----------メイン---------- public static void main(String args[]){ Window win = new Window(); DynamicPanel dp = new DynamicPanel(); win.setPanel(dp); System.out.println("main end"); } } class Window extends JFrame{ public Window(){ setTitle("Default"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } public void setPanel(JPanel panel){ Container contentPane=getContentPane(); contentPane.add(panel); pack(); } } 以上です。
PDFLibを使用したことのあるかたがおられましたら教えてください。 // テキストの出力 $p->setfont($font, 24.0); // フォント及びサイズを指定 $p->set_text_pos(100, 700); // テキストの位置を指定 $p->show("ハローワールド!"); // テキストを出力 $p->continue_text("(ようこそPDFlibの世界へ)"); // 次行に出力 上記のようにテキストを出力しているのですが このテキストを半透明で出力することはできるでしょうか? ソースはJavaでなくて申し訳ありません。
791 :
デフォルトの名無しさん :2007/12/10(月) 15:50:25
>>779 .780.782
参考になりました。ありがとうございます。
792 :
Round Trip :2007/12/10(月) 16:00:13
>>789 Swing自体がイベント消化用のThreadを持っているから
スレッドセーフではない、という事でしょうか…?
自分のプログラムは、ウィンドウ表示の際の横着用です。
継承して、runInterface()とpaintInterface()をオーバーライドすれば
とりあえずウィンドウが表示されて、キーボード操作を受け付ける、という。
KeyListenerにある処理は試験用のもので、
本当は内部変数などにキーボードの入力状態を保存し、上記の関数内で使用するつもりでした。
あと、addKeyListener()をnew終了後にするということですが、
試しても結果に変化が見られなかったので、ほったらかしです。
現状の問題とは直接関連が無いようなので、あえて触らないでいます。
793 :
デフォルトの名無しさん :2007/12/10(月) 16:13:30
質問です。 int型の配列に今要素として a[0]=1 a[1]=2 a[2]=3 a[3]=4 がはいっているとして、これをひとつの要素1234にするにはどうすればいいですか?
>>792 その方針はバケツでウランと一緒だ
今まで上手くいってるから今後も上手くいくと勘違いしている
>>793 ひとつの要素にするってのが、
10進数でa[0]を1000の位、a[1]を100の位、a[2]を10の位、a[3]を1の位とする整数値を求めるって意味なら、
int b = 0;
for (int i = 0; i < 4; i++) {
b *= 10;
b += a[i];
}
繋いで一つの文字列にするって意味なら、
String b = "" + a[0] + a[1] + a[2] + a[3];
とでもすれば?
>>793 int result = a[0]*1000 + a[1]*100 + a[2]*10 + a[3]
797 :
デフォルトの名無しさん :2007/12/10(月) 16:41:02
>>785 認識する対象の情報は必要ないと思いますが
認識対象の情報無しにどうやって認識するの? もしかして人の顔を認識するアルゴリズムで道路の端を認識して自動走行できると思ってる?
>>797 画像認識は良くわからないけど、一般名詞ぽいし、別に具体的な例を挙げなくても、
どういう認識したいかによって色々あるんじゃないのかな
800 :
デフォルトの名無しさん :2007/12/10(月) 16:49:32
有るのか無いのかだけで良いよ
801 :
デフォルトの名無しさん :2007/12/10(月) 16:55:30
汎用のライブラリは無いけど個別のは有るのかな それとも知らないだけ?
802 :
Round Trip :2007/12/10(月) 16:55:39
>>794 >バケツウラン
う。
Listener処理の結果を他のスレッドに持ち出すのはそんなに危険なのですか?
それとも、コーディングが面倒という理由だけで継承を使うことでしょうか。
そこまで言われる危険性が理解できないのですが、
どこの処理を指しておられるのでしょうか。
なにしろ、我流なもので…。
ご指導お願いします。
>>802 不完全な状態のインスタンスの参照を他へ渡した場合、頻繁に問題が顕在化するってことはないんじゃないかな。
>>792 が試したようにたいてい上手く動いているように見えるし、問題にならないことも多い。
でも、それはたまたま上手く動いたと考えて、潜在的に問題になる可能性があって、それを自分が知っているのなら、
避けられるのなら避けておいた方がのちのちためになると思うよ。
スレッドに関しては、Swingはまさにスレッドセーフではないので、
気をつけてコーディングしないと思ってもみない挙動を引き起こす。
804 :
デフォルトの名無しさん :2007/12/10(月) 17:18:15
スレッドセーフの意味を混同してないか?
swingがスレッドセーフでないというのは他のスレッドからswing関連のapiを呼び出すのはいかんって意味ではないのか
次期Javaでクロー邪が採用されるかどうかはいつ頃決定されますか?
802は、落ち着いて、もう一回Swingとスレッドの本を読み返した方がいい どうにも、Swingの表面だけ使って自作のウィンドウシステムを作ろうとしているように見えてしかたない 802が実現したいと思っていることは多分、Swingを素直に使うだけで簡単に実現できるはず
知らないで答えると 初心者が混乱するからやめた方がいいよ
809 :
Round Trip :2007/12/10(月) 17:58:03
>>803 ああ、既存の問題点の放置は良くないということですか。
了解しました。以後、気をつけます。
>>807 仰るとおり、自分用のウィンドウシステムそのものです。
情報源が主にネットの入門サイトなのです。
以前、ろくでもない入門書を掴まされて以来
相当のことがないとその手の本は買う気になれないのです。
なので、良い本があれば教えていただけませんか?
Apache Geronimo 2.0 使ってみたチラ裏感想。 寄せ集めで作ったにしちゃまぁまぁだが、問題起きたときに出る情報が少なすぎ。 プロダクトとして成り立ってはいるが、中身はまだまとまりきれてない、WebSphere なら 2.x か 3 前半くらいを使ってる気分。
Generics 使ってるクラスで clone() を実装/利用しようとすると @SuppressWarnings("unchecked") 使いまくりになるのは仕方がないと思ってあきらめるしかないの?
812 :
デフォルトの名無しさん :2007/12/10(月) 20:05:26
時代の暗闇にきっと置き去りの何かに気づいてくれ
スレッドセーフ性が確立されない場合、 言語規定的にはどのようなことが起こるかは規定されているが、 組み合わせ爆発で、人の想像できる範疇じゃない。 実質的に、それは何が起こっても不思議じゃないプログラムとなる。
814 :
デフォルトの名無しさん :2007/12/10(月) 21:03:23
だからこそ一つ一つに気を使わなきゃいけないのに あんたがたプログラマーの作る奴はいつも暴走する
>>814 まるで自分がプログラマーじゃないような言いぐさだな。
マルチスレッドは、根本的に言語の構造がシングルスレッドを前提としてるから混乱する。
どこぞでマルチスレッド用の言語を開発してたが、それだけでなくプログラミングスタイルそのものを変えないと、
本質的には解決せんだろう。
つーかマルチスレッドとGUIというものの相性が悪すぎるんだな。 プログラミングスタイル云々を変えてもここが直るかどうかは疑問かも。
817 :
デフォルトの名無しさん :2007/12/10(月) 22:46:27
あるjarを使用するclassのmainをbat経由で呼び出そうとしているのですが NoCLassDefinitionで動きません。 java -classpath jarのパス;jarのパス2 とパスを通しているのですが、何か他に考えられる原因はあるでしょうか?
パスをダブルウォートで囲っていない。
-jarオプションを指定しているとか
クラス名が完全修飾じゃないとか
JDK がインストールされてないとか
そもそもパソコンがないとか
霊界からアクセスしてるとか
テキストファイルを読み込みたいのですが、物理絶対パスではなく、 クラスパス(?)から読み込みたいです。 どうやったらいいでしょうか? やりたいこと: {prj_top}/src/jp/co/.../hoge/HogeTest.java {prj_top}/src/jp/co/.../hoge/HogeTestData.txt みたいなファイル管理構成にしていて、Eclipseでビルドすれば、それぞれ以下に配置される。 {prj_top}/classes/jp/co/.../hoge/HogeTest.class {prj_top}/classes/jp/co/.../hoge/HogeTestData.txt もちろん {prj_top}/classes には CLASSPATH が通っている。 HogeTest.class のなかから HogeTestData.txt を、最終的には java.io.File で読み込みたい。 (最終的に String 型の変数で、物理パスが取れるのでもかまわないです) {prj_top}は、開発者によってディレクトリが違うので、HogeTest.class のなかで物理パスは指定できない。 ようするに JUnit で、開発者が誰でもコードを変えずにテストが動くようにしたいです。 URL url = new URL("file:./jp/co/...hoge/HOgeTestData.txt"); File file = new File(url.getFile()); String path = file.getPath() みたいなことをやってみましたが、変数 path の中身は .\jp\co\...hoge\HogeTestData.txt みたいになってしまい、困っています。
Java3Dで作ったアプレットを何らかの形式で保存することって出来ますか? 特にテクスチャを正確に表現出来ればいいのですが。
826 :
デフォルトの名無しさん :2007/12/10(月) 23:42:17
エスパーさん、呼んでますよ
>>824 ClassLoader#getResourceAsStream
Class#getPackage
String#replaceAll
この辺を javadoc で引けば分かると思うよ
>>825 エディタで保存すれば java という形式で保存できます。
コンパイルすれば class という形式で保存できます。
jar コマンドを使えば jar という形式で保存できます。
>>828 失礼。具体的に言えばVRMLのような形式で、ということです。
そういうのは自分で実装するかモデリングツール使うもんじゃあ・・・。
サーブレットで格納したクッキーをjsp内で取得しようとしているのですが、 <% Cookie cookies[]=request.getCookies(); request.setCharacterEncoding(Windows-31J); String str=null; if(cookies!=null) { for(int i=0;i<cookies.length;i++) { if(cookies[i].getName().equals(omit)) { str=URLDecoder.decode(cookies[i].getValue(),Windows-31J); } %> このstrを表示しようとすると、常にnullになってしまいます。
サーブレットの中での処理は、 Cookie newCookie=new Cookie(omit,URLEncoder.encode(id,Windows-31J)); newCookie.setMaxAge(60); response.addCookie(newCookie); です。実際にC:\Documents and Settings\USER\Cookies を見ると、そのクッキーのファイルは生成されているようなのですが、 何が問題なのでしょうか?
あれ、携帯から書き込んだらダブルクォテーションが消えてる…。 実際はちゃんと"omit"とか"Windows-31J"になってます。
MaxAgeが60秒だからじゃない?
835 :
デフォルトの名無しさん :2007/12/11(火) 00:57:35
JAVA3Dで、ボタンを押したら模様が変わるみたいな、 動的にテクスチャを張り替えるにはどうしたらいいですか? どなたか教えてください><
><
//FOR.java class FOR{ public static void main(String args[]){ for(int=0;i<10;i++){ System.out.println(i); System.out.println(i+"FOR"); //この行を、このfor文の中で、一回だけ表示させることはできますか? } } }
if(i == 0){ System.out.println(i + " FOR"); }
>>838 なるほど。。。
if文使えば良いんですね。
ありがとうございます。
もし、このような場合、どうやればいいですか?
//FOR.java
class Sample2{
public static void main(String args[]){
String[] str1="H e l l o W o r l d ! H e l l J a v a !".split(" ");
for(int i=0;i<str1.length;i++){
String[] str2=str1[i].split("!");
for(int j=0;j<str2.length;j++){
if(j==0){
System.out.println(str2[j]+"FOR");//この行が繰り返し表示されるのですが、1回だけ表示させたいです。
}
System.out.println(str2[j]);
}
}
}
}
すみません。 クラスファイル名間違えました。 正 class FOR{ 誤 class Sample2{
>>839 フラグ使えばいいだろ。
bool msg = true;
while ( ... ) {
if (msg) { System.out.println("msg"); msg = false; }
}
フラグ使うまでもネェ。 if(i == 0 && j == 0){ System.out.println(str2[j] + "FOR"); }
>>841 あ、なるほど。
なんとか出来そうです。
ありがとうございます。
>>842 うぉおおおおお
すげええ
これはシンプルwww
おいおい 6.0 で File#toURL() が推奨されないメソッドかよ。 修正は簡単だが嫌がらせ的だな。
0x00〜0xFFの符号無し8ビット値の配列を、 バイナリでファイルに書き込むにはどうしたらいいですかね? byte型だと、-0x80〜0x7Fしか直接格納できないし、 intの下位8ビットを使いたいけど、8ビット分だけをファイルに 書く方法がわからん。。。
負の byte 値を書き込めば最左ビットの立ったバイトが書き込まれる。
>>846 java.io.OutputStream の write(int)
850 :
849 :2007/12/11(火) 11:16:08
byte[] datas = {0x01, 0x7F, -0x80, -0x01}; これをファイルに書き込んだら、 0x00, 0x7F, 0x80, 0xFF となったので、実現したかったことができそうです。 重ねてありがd!
char型じゃだめなん?
>>851 Java の char は何bit型だ〜
てか、文字セットが絡んできて純粋な数値演算だけじゃ出力できないじゃん
うわっすまそ ここJavaのスレだった C#と間違えていたよん・・・・
Locale.getAvailablLocales() が返すロケール配列に mn/mn (モンゴル語/モンゴル国) が含まれてないのに new Locale("mn", "mn").getDisplayName() で 「Mongolian (Mongolia)」 が返ってくるのは何で?
ロケールは存在するが、対応されていないだけだろ
Object[]を返してくるメソッド(仮にhoge.get())があるんですが、これをダウンキャストするには piyo array[] = Arrays.asList(hoge.get().toArray(new piyo[0])); みたいなことをしないとダメですか? もっと手軽な方法はありますでしょうか?
>>856 hoge.get() が返すインスタンスによる。
実は piyo[] を返してるけど、過去のAPIとの互換性で型が Object[] になってるだけとかなら
piyo[] array = (piyo[])hoge.get(); できるし。
インスタンスが Object[] だと、新しく piyo[] 作ってそっちにコピーするしかない。
>>857 ありがとうございます。
hoge.get()が返す実際のインスタンスはpiyo[]のはずなんですが
仰るようにキャストをしてみるとどうもClassCastExceptionが発生してしまいます…。
自分のキャスト理解が浅いせいですが、時間も無いので、リスト化したあと配列に変換する形にしておきます。
なおhoge,get()とはorg.eclipse.jface.viewers.CheckboxTableViewer.getCheckedElements()
を指していました。
Obect[] は、要素がpiyo型でも「配列としての型」がObject[]だったらキャストできないよ。
>>857 ああ、最初は良くやるのよね。これできるだろうみたいな。
まぁ Collection.toArray もあることだし。
ちなみに、それの引数の配列は長さが足りてないと、
新しい配列を、リフレクションを使って、生成し直すので注意。
>>858 個々の要素の型じゃなくて、配列の型の話だぜ。
>>859 も言ってるけど。
String typename = hoge.get().getClass().getName(); して
typename が "[Ljava.lang.Object;" だったら配列は
Object[] のインスタンスであって piyo[] のインスタンスではない。
>>859 ,862
ありがとうございます。
配列型には型階層がなくてそれぞれが独立した型と思ったほうがいいんですね。
なおgetClass()してみたところ、型の名前は全てpiyoになってました。
>>860 ご指摘ありがとうございます。
>>861 ありがとうございます。
Object obj[] = hoge.get();
piyo array[] = Arrays.asList(obj).toArray(new piyo[obj.length]);
としてみます。
>>863 > なおgetClass()してみたところ、型の名前は全てpiyoになってました。
それは操作間違って個々の要素の型を取ってるか、
Object[] に(piyo[]じゃなくて)piyo型のインスタンスをつっこめるJava以外の言語使ってるかどっちかだな。
Can you celebrateの替え歌 Can I find a job? Can I make money tonight? I am neet long long time 就職ていう言葉なんて 知らなかったよね Can I find a job? Can I make money tonight? I am neet long long time 一人きりだね 今夜もまた2ちゃんできるよね Lalala... Lalala... Lalala... Lalala... 永く…永く… いつまでも雇っていてくれるどこかを 探して見つけてクビになってまた探して 頑張った勇気出した でも時におそろしい ブラックもあった詐欺にもあった どうしようもない風に吹かれて
>>864 すみません、仰るとおり個々の要素の型を取ってました…。
配列型をgetClass()してみたところ[Ljava.lang.Object;でした。
ある配列型を別の配列型に"キャスト"するのは不可能なんですね。勉強になりました。
>>866 > ある配列型を別の配列型に"キャスト"するのは不可能なんですね。
//こっちはできる。
Object[] array = new String[0];
String[] strArray = (String[])array;
//これはできない。
Object[] array = new Object[0];
String[] strArray = (String[])array; //コンパイルは通るけど実行時に ClassCastException になるはず
で、今回は下の方だったから無理なだけ。
868 :
850 :2007/12/11(火) 17:16:03
とりあえず目的達成。 こんなコードになりますた。 int[] src = { 0x00, 0x01, 0x7E, 0x7F, 0x80, 0x81, 0xFE, 0xFF }; FileChannel ch = new FileOutputStream(new File("C:/test.bin")).getChannel(); byte[] datas = new byte[src.length]; for (int i = 0; i < src.length; i++) { datas[i] = src[i] < 0x80 ? (byte) (src[i]) : (byte) (src[i] - 0x100); } ByteBuffer buff = ByteBuffer.allocateDirect(datas.length); buff.put(datas).rewind(); ch.write(buff); ch.close(); ファイルをバイナリエディタで開いたら、ちゃんと目的のバイト列で書かれれました。
>>868 「datas[i] = (byte)src[i];」で動くんでは。
んで、「data」は非可算名詞なので、datas にはならない。
870 :
デフォルトの名無しさん :2007/12/11(火) 17:45:53
Flow my tears...
>>869 動きますた!ありがd!
ちょっと複雑に考えすぎた。。。orz
>>869 たしかdatusだっけ?TOEICの問題ででた気がする。
datumのこと?
JFrameの表示サイズが変更されたことを返してくれるメソッドとかありますか?
その JFrame に Window何とかListener だか Component何とかListener だかを仕掛ける。
なぜ、あなたはJavaでオブジェクト指向開発ができないのかという本を読んでいます。 その中で七並べを作っています。 テーブルクラスにあるテーブルに置かれたカードを見るというメソッドについてこう実装しました。 フィールドを返すだけです。 public Card[][] getCards() { return table_; } しかしこれだとtable_の内容が変更される場合があるので、 以下のようにコピーして返すよう改良しました。 public Card[][] getCards() { Card[][] table = new Card[Card.SUIT_NUM][Card.CARD_NUM]; for (int suit = 0; suit < Card.Suit_NUM; suit++) { System.arraycopy(table_[suit], 0, table[suit], 0, Card.CARD_NUM); } return table; } その後のコラムにこのような事が書いてあります。 >実はこの方法も実はあまり良い方法とはいえない事があります。 >この方法ではgetCardsメソッドを呼び出すたびに新たな配列のコピーが生成されます。 >本書で扱っているような七並べレベルのプログラムでは何の問題もありませんが >サーバサイドで24時間にわたって動き続けなければならないアプリケーションでは >GCでシステムが一時的に停止して致命的な問題を引き起こしてしまうこともあるのです。 >不用なコピーを作らないようにする方法としては、table_に対する読み取りアク >セスのみを提供するインターフェースを返すといった方法が挙げられます。 この「table_に対する読み取りアクセスのみを提供するインターフェース」 というのが想像ができません。 実装するとしたら具体的にどういったコードになるんでしょうか? 簡単なコードを示して貰えれば嬉しいです。
こうかな? public void getCards(Card[][] table_out) { for (int suit = 0; suit < Card.Suit_NUM; suit++) { System.arraycopy(table_[suit], 0, table_out[suit], 0, Card.CARD_NUM); } }
878 :
デフォルトの名無しさん :2007/12/11(火) 19:11:43
てかさ この程度の本見れば分かる事聞いてるようじゃ他の言語にした方がいいんじゃないの?
879 :
876 :2007/12/11(火) 19:41:57
>>877 今と同じ方法のようですが、それで不用なコピーが作られないようになるのでしょうか。
上手くいえないのですが、どのようなインターフェースを作って
それをどう使えば良いのか分かりません。
>>876 インターフェイスじゃないけど。
java.util.List<Card> table;
public java.util.List<Card> getCards(){ return java.util.Collections.unmodifiableList(table); }
Card getCard(int suit, int card) だろ、ふつう
882 :
876 :2007/12/11(火) 20:35:15
>>880 ほ〜、便利な物があるんですね。
レスありがとうございました。
インターフェースで実現するとしたら、どういった感じになるんでしょうか。
@Override アノテーションなど一部のアノテーションはある条件を満たさないとコンパイルエラーになったり、 マーキング以上の役割(実行に影響する役割)を持ちますが、どのように実装されているのか興味があります。 しかし、どのクラスが実装しているか見当がつかないため、参考にするためのサンプルを見つけることができません。 どなたかご存知の方、教えていただけないでしょうか?
>>883 「コンパイルエラーを出す処理」 は Java コンパイラがやってるだけで Override アノーテーションに
実装されているわけではない。アノーテーションはマーキングのみで、それを認識するプログラムが
何かアクションをする。java.lang.Override, java.lang.annotation.* でも見て見れ。
>>885 便乗して聞きたいんだけど apt って具体的に何をするためのツールなの?
>>886 APTはソースに書かれてるアノテーションを処理する。
自分で作った com.sun.mirror.apt.AnnotationProcessorFactory の実装クラスの名前を渡してやると、
それを使ってアノテーションを解釈&処理してくれる。
肝心の処理は自分で書かないとだめだけど、ソースの読み込みとかはAPTがやってくれる。
カスタムドックレットを書いて javadoc 使うのと似たような感じ。
JDK6以上使えるなら javac と javax.annotation.processing と Tree API 使うほうが融通が利くけど。
>>887 thank you
「ソースを自動生成」 厨に見つからないようにしておこう。
889 :
デフォルトの名無しさん :2007/12/11(火) 21:15:00
JavaでIteratorインターフェイスを備えるクラスを作るにはどうしたらいいんですか?
890 :
889 :2007/12/11(火) 21:29:01
すいません、自己解決しました・・・ 別の質問をさせて下さい
>>884 それを認識するプログラムのほうがどうなってるのかを知りたいんです。
コンパイラ以外にはないんでしょうか。
>>885 ありがとうございます。眺めてみます。
>>891 java.lang.Class や java.lang.reflect.Method 調べれ。
893 :
889 :2007/12/11(火) 21:36:14
Projectというクラスがあったとして、それがMemberというクラスのコレクションを持っているとき・・・ Membersというイテラブルなクラスを作ってそのインスタンスをメンバー変数にするのがいいのか、 List変数にMemberクラスを押し込んで、それをgetMembers()で取得するほうがいいのか どちらが理想的な設計ですか? Memberコレクションを取得するとき多少処理が必要なのでクラスを作ったほうがいいとは 思うのですが、getMembers()の部分に書いても何とかなる量なので迷ってます
好みの問題。
895 :
889 :2007/12/11(火) 21:44:04
>>894 そうですか・・・、わかりました。
ありがとうございます。
質問なのですが説明するのが複雑なのでエスパーになって聞いて下さい。 ある例外を処理したいのですがそのメソッド1に複数の例外が発生しており Exceptionで処理しております。そのメソッド1はclose()しなければいけないので 必ずtry〜fanallyで囲みたいのです。かつそのメソッド1からの例外に特殊処理したい。 そのような状況になったのでtryで囲みつつ、throwしたのですが例外が発生したとき メソッド1の呼び出しもとにはその例外がthrowされるのでしょうか?
コードでおk
>>896 close()したあとリスローすれば?
Eclipse 3.3、重さ 1.8 倍くらいになったなぁ。入力に補完や警告が全然追いつかない。
Statement や PreparedStatement の execute() って何のためにあるの? 結果はどうでも良い照会や更新やるため?
結果が返らないSQLを実行する為
>>896 Exceptionで処理(throws? catch?)スンナ
>>902 偉そうに嘘書くな
try {
hoge();
} catch(HogeException e) {
handleException(e);
throw e;
}
俺様翻訳 > ある例外を処理したいのですがそのメソッド1に複数の例外が発生しており > Exceptionで処理しております。 メソッド1の中で AException, BException, ... の例外処理を記述しています。 > そのメソッド1はclose()しなければいけないので必ずtry〜fanallyで囲みたいのです。 > かつそのメソッド1からの例外に特殊処理したい。 public void メソッド1(){ try{ ... } catch(AException ex){ ex.特殊処理(); // あるいは単に 特殊処理() } finally { this.close() } } のように書かなければ行けない。 > そのような状況になったのでtryで囲みつつ、throwしたのですが例外が発生したとき > メソッド1の呼び出しもとにはその例外がthrowされるのでしょうか? } catch(AException ex){ ex.特殊処理(); // あるいは単に 特殊処理() throw ex; } finally { と書いたのですが、ex はメソッド1の呼び出し元に正しく伝播されるのでしょうか? 答え: YES
いやまてこうか > そのメソッド1はclose()しなければいけないので必ずtry〜fanallyで囲みたいのです。 > かつそのメソッド1からの例外に特殊処理したい。 public void メソッド1() throws AException, BException, ...{ try{ ... } finally { this.close() } } また、呼び出し元は以下のようにしています。 try{ メソッド1() } catch(AException ex){ 特殊処理(); } catch(... > そのような状況になったのでtryで囲みつつ、throwしたのですが例外が発生したとき > メソッド1の呼び出しもとにはその例外がthrowされるのでしょうか? catch のない try-finally 内で例外を throw した場合、その例外は呼び出し元に伝播されるのでしょうか? 答え: YES
>>905 try catch で例外でて、さらに finally でも別の例外でたらどーすんだろ?
907 :
902 :2007/12/12(水) 13:00:10
>>903 失礼。
catchした例外が終わりってのは大嘘でした。
再スローてと、上位レイヤーに投げることばかり想定してたし
あーあもう嘘教えてるし…オトナシクシテイヨウ。
オブジェクトがCSV風に羅列してある以下のようなXMLを TreeMapに入れたいのですが、どのような手法がもっともスマートでしょうか? DOMやSAXのどれを使うかなども含めて教えていただけると幸いです。 ----------商店街店一覧 <商店街> <果物屋></果物屋> <今期売上>923000</今期売上> <敷地面積>300</敷地面積> <電器屋> <今期売上>826000</今期売上> <敷地面積>200</敷地面積> </電器屋> <商店街> ... --------果物屋商品一覧 <果物屋の商品> <リンゴ> <価格>100</価格> <重さ>250</重さ> </リンゴ> <梨> <価格>150</価格> <重さ>220</重さ> </梨> </果物屋の商品> ...
なお、各オブジェクトは将来的には以下のように、 ツリーとして構成したいと考えています。 +商店街 +商店街のパラメータ(総面積、駅からの距離、etc) | +商店リスト +商店のパラメータ(店1つの面積、位置、etc) | +商品リスト +商品のパラメータ(価格、etc)
すみません、ずれてしまいました。 +商店街 +商店街のパラメータ(総面積、駅からの距離、etc) | +商店リスト +商店のパラメータ(店1つの面積、位置、etc) | +商品リスト +商品のパラメータ(価格、etc) 商店街は自身のパラメータと商店リストを持ち 商店は自身のパラメータと商品リストを持ち 商品はそれ自体のパラメータだけ持つ、という感じです。
楽 → DOM 高効率 → SAX もっと高効率 → XML 使わない
>>912 ううむ、やっぱりそうなりますか。
今はCSVをがりがり読んで割り付けているのですが、カンマ等の制限がいろいろと・・・
すみません、もうひとつ補足で、商品リストには果物屋の商品も電器屋の商品も
一緒くたに書かれているということがあります。
ですから、各オブジェクトを生成した後にもう一度再配置を行う必要はあるのですが、
パラメータだけでもXMLのツリー構造からすぱっとTreeMapにマッピングできるなら
とても高効率になるような気がします。
どうでもいいが、TreeMap をツリー構造で格納できるコレクションと勘違いしてないか?
>914 いえ、たぶん大丈夫だと思うのですが・・・IDとかをキーにして取り出せれば十分です。 キーでソート済みになるかならないかでTreemapを選んでいました。 TreeMapのなかにTreeMapを持ったオブジェクトが入れ子のようになって行くかと思います。
>>909-911 TreeMapにこだわるならJAXBも使えないし、まずはDOMでやってみて、パ
フォーマンスが気になったときにSAXに変えるのでどうでしょ。
<果物屋><電器屋><リンゴ><梨>って要素名はすごく異様に見えるね。
<商店><業種>果物屋</業種><今期売上>...</商店>
<商品><商品名>リンゴ</商品名><価格>...</商品>
のほうが処理し易いはず。
だが、俺はDiggesterを選ぶぜ ああ、読込専用だから出力は自前で
>916 ありがとうございます。DOMから試してみます。 要素名がおかしいのはその通りでした…
Tomcat6、Servlet、JSPでHttpSessionを使用しているのですが、 たとえば、の場合、JSESSIONIDという値がCookieに保存されますが、 このCookieをセキュアな通信のみ送信されるようにしたいのですが、 これは可能なのでしょうか?
>>919 セキュアな通信ってどういう意味で使ってる?SSL?
あー、へんな日本語になってしまったのに レスありがとうございます。 そうです。SSL通信です。
922 :
919 :2007/12/12(水) 18:06:10
923 :
824 :2007/12/12(水) 20:29:06
>>827 レスどうもありがとうございます。遅くなってすみません。
以下のようなコードで目的を達成することができました。
String packageName = getClass().getPackage().getName().replace('.', '/');
String fileResource = packageName + "/HogeTestData.txt";
URL fileUrl = getClass().getClassLoader().getResource(fileResource);
String filePath = fileUrl.getFile();
eclipseで設定をいろいろといじくっていたら、 JavaDocコメント生成中の@link記述中にコンテンツアシストすると、 パッケージ名まで補完されるようになってしまいました。 具体的には、 @link ArrayLis でコンテンツアシストをさせると、 @link java.util.ArrayList とパッケージ名まで補完されるようになってしまいました。 デフォルトのように、パッケージはimport宣言に書いてほしいのだけれども、 設定をどう直せばいいのでしょうか?
>>924 Preferences -> Java -> Editor -> Content Assist -> Add import instead of qualified name とか?
926 :
デフォルトの名無しさん :2007/12/12(水) 23:54:52
JSFでページがロードされたときにHtmlOutputTextに表示するテキストを動的に 生成したいのですが、コンストラクタ部分に何か処理を書くと原因不明のエラーになってしまいます。 C#でいうところのPage_Load()に相当するメソッドはどうやって実現したら良いのでしょうか・・・
>>913 YAMLはどう?
個人的には、XML使うならSAXで処理する。
難しいって言われるけど、イベント処理に慣れていればむしろDOMより楽に書ける。
digesterはもっと楽だけど、その構造には向いていない気がする。
スレ違かもしれないですが質問です。
ご存じの型がいらっしゃいましたらご指摘いただければとおもいます。
現在tomcat5.5でクラスタリングを行うように設定を行っていますが、うまくセッション情報を共有することができません。
構成としては
www1
apache2.2
tomcat5.5
www2
apache2.2
tomcat5.5
www1とwww2はhoge.comのDNSラウンドロビンにしています。
で何らかの障害等により別サーバに飛んだ際にセッション情報を引き継げるようwww1とwww2のtomcatをクラスタリングしたいと考えています。
servlet.xmlには<Cluster>の部分のコメントアウトを外し、アプリのweb.xmlには<distributable/>も記述してあります。
http://hoge.com/servlets-examples/servlet/SessionExample で試したところwww1とwww2でセッション情報は共有できているようでした。
しかし、実際のアプリケーションを動かすとセッションにセットした内容がNullとなってしまいます。
フレームワークのセッションへのセットの仕方が原因の一つではないかとも考え始めています。
フレームワークはSeasar2.4のTeedaを利用しています。
命令語の読み方が載ってるようなサイトないですか?
ResourceBundleで外部化した文字列の定義がプロパティファイル中にないと実行時エラーになりますよね。 この「プログラムから外部化した文字列がすべてプロパティファイルに定義されているかどうか」とか、 「プロパティファイルに書かれているが、プログラム中で使用されていない定義」を調査/テストする のはどのようにするのでしょうか? 調べ方が悪いのか、そのようなツールやEclipseのプラグインを見つけられませんでした orz ツールか作業手順を教えて頂けると大変ありがたいです。よろしくお願いします。
934 :
デフォルトの名無しさん :2007/12/13(木) 14:48:16
環境設定でJavaのパスは1.4なんですけど java -versionでバージョン調べると1.5になってます この状態でコンパイルを行うと1.4と1.5どちらでコンパイルされるのでしょうか
>>934 「環境設定でJavaのパス」って何?
なんにせよ、調べるべきは java -version ではなくて javac -version
1.4 だと javac -version は効かないような。 1.4 でも大丈夫なようにすると javac -J-version
>>935 多分c:\java1.4にjava5がインストールされてるってな事なんじゃないか?
>>934 JDK(インストール時にインストールされるJREの)インストールの際に
c:\windows\system32 に java.exe や javaw.exe が置かれるけど
java.exe はそっち使ってるだけとかじゃね?
All-In-One Projectってまだ生きてるの?
ど素人の質問すません。 入力してもらったxとyをx÷yで演算処理するプログラムなんですが、 int z = x/y , w = x%=y; if (y == 0){ System.out.println("割り算を実行できません"); } else { if (w == 0){ System.out.println("x÷y=" + z); } else{ System.out.println("x÷y=" + z + "余り" + w); コンパイルはでき計算も出来るのですが、これでyを0と入力するとエラー (Exption in thread "main" java.lang.ArithmeticException: / by zero at クラス名.main) とでるのですがどこか間違ってるところありますか?
int z = x/y , w = x%=y; ←ここで割算をした後で if (y == 0){ ←yが0かどうかチェックしてる。 yが0かどうかチェックした後で割算じゃないかな。
>>942 ありがとうございます。elseの中でint宣言をしたら無事動きました!
Aというboolean型変数があるとして if文を使わずにAがtrueならfalse,falseならtrueとなるようにしたいんですが 一行でできますか?
A = !A; でいいんじゃないかな
解決しました、ありがとうございます
ジェネリクスについての質問です。 行列を表現するクラスを作成したいのですが、その各要素の精度を floatにもdoubleにも対応できるようにするにはどうすればよろしいのでしょうか? ちょうど下のようなコードを作りたいのですが…。 class HogeMatrix<T> { private T matrix[][]; public static HogeMatrix createFloatHogeMatrix() { // ここでnew HogeMatrix<float>()して返す } public static HogeMatrix createDoubleHogeMatrix() { // ここでnew HogeMatrix<double>()して返す } protected HogeMatrix(){} // 以下アクセッサ類 } Cであれば#defineやテンプレートでできると思うのですが、Javaだとnew T();のような コンパイル時にコンストラクタが定まらないケースはエラーになるようで困っています…。 よろしくお願いします。
float,doubleとかのプリミティブ型ってTにとれるんだっけ?
プリミティブ型はTにとれない。 だからラッパークラスのFloatやDoubleをTに代入する。
950 :
947 :2007/12/14(金) 04:36:26
>>948 ありがとうございます。どうやら取れないようです…。
Javaではプリミティブ型を実行時に決めることは無理なのでしょうか。。
HogeMatrix<Number> じゃねぇの? ゲネリックスは警告なしでコンパイルできてくれるか 予想が難しいけど。 つか double だけでええやん。数値演算処理でわざわざプリミティブ型のラッパー ガンガン作るような汎用クラスは遅い。プリミティブ型に関しては C++ のテンプレート みたいにその型を #define で置き換えたような専用クラスができるわけではないし。
952 :
947 :2007/12/14(金) 05:03:06
>>949 ありがとうございます。
floatとdoubleの両対応の理由として、行列の次元がそれほど大きくならない場合はdoubleに、
大きくなる場合はfloatで精度を犠牲にしてもメモリを節約できれば、という意図があります。
Float[][]やDouble[][]のようなオブジェクト型だとあまりメモリ効率が変わらなくなってしまう
気がするのですが大丈夫でしょうか…
>>951 ありがとうございます。
なるほど確かに速度は遅くなりそうですよね…
Javaではメモリ効率を気にしていても仕方ない話なんでしょうか。
とりあえずdoubleで実装してみて、実際に問題が起きたらそのときまた考えてみます。
その程度のメモリ消費も実行効率も気にするもんじゃない。 それよりそんな変なラッパー作って使おうとする事を気にした方が良い。
数値演算処理でラッパー使ってどんだけ効率落ちるか知らん奴は黙ってなさい。
>>952 効率うんぬんをを語るときに「気がする」は禁物
きちんとプロファイリングして実用に足るかどうかを判断
設計段階でも効率が要になるような箇所はテストコードを書いて判断材料に
こんなエラーが出てしまいますが対処方法はありますか。
#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_FLT_STACK_CHECK (0xc0000092) at pc=0x0096cea9, pid=1260, tid=1412
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing)
# Problematic frame:
# v ~RuntimeStub::resolve_opt_virtual_call
#
# If you would like to submit a bug report, please visit:
#
http://java.sun.com/webapps/bugreport/crash.jsp #
JDK をダウンロードしてインストールしなおす。 それでも出るなら別のバージョンをダウンロードしてみる。 あと JVM のバージョン競合が起こっていないか (参照 DLL が矛盾しているとか) 確認。
958 :
956 :2007/12/14(金) 13:27:59
>>957 複数のバージョンが入っているのが原因みたいでした。
全て消して最新版を入れるとうまくいきました。
回答ありがとうございました。
960 :
959 :2007/12/14(金) 13:31:20
残念。はずれか orz
>>954 だから「変なラッパー作って使おうとする事を気にした方が良い。 」と書いただろうが
文脈も読めんのか?
文脈読めって便利な言葉だよなw
963 :
デフォルトの名無しさん :2007/12/14(金) 15:57:07
Servletの呼び出しが上手くいきません。 web.xmlで<servlet>〜</servlet>にサーブレット名・クラスファイル。 <servlet-mapping>〜<servlet-mapping>にサーブレット名・URLパス名を作成し指定の場所に保存していますが 実際にURLでクラスを呼び出すと404になってしまいます。 解説通りにやっているので私の根本的なミスが原因の可能性が高いと思っていますが、何度やっても上手くいきません。 わかる方いらっしゃったら教えていただけませんか?
同じ Web アプリケーション内の JSP や HTML はちゃんと表示できるか?
965 :
デフォルトの名無しさん :2007/12/14(金) 19:22:23
System.setOut(outFile);でできない?
967 :
デフォルトの名無しさん :2007/12/14(金) 20:05:19
>>966 それだと、System.out.println("内容〜"); の内容が出力されなくないですか?
968 :
デフォルトの名無しさん :2007/12/14(金) 20:40:11
マイコンピューターのプロパティーを調べろ
>>967 ああゴメン。それ以前にコンパイル通らないや。
>>968 [コントロールパネル]に[システム]ってある?そこの[詳細設定]→[環境変数]→……
>>969 のが分りやすいかも。
971 :
デフォルトの名無しさん :2007/12/14(金) 21:05:27
>>964 JSP や HTML はちゃんと表示できます。
クラスの表示ができません。。web.xmlの記述の仕方が悪いのでしょうか?
javac -classpath C:\Java\tool\apache-log4j-1.2.15\log4j-1.2.15.jar xxx.java java -classpath C:\Java\tool\apache-log4j-1.2.15\log4j-1.2.15.jar;. xxx.java コンパイル、実行はできますが、 ユーザ環境変数にて 変数名 CLASSPATH 変数値 C:\Java\tool\apache-log4j-1.2.15\log4j-1.2.15.jar と指定して javac xxx.java はエラーなく出来ますが。 java xxx.java がエラーになってしまいます。 エラーメッセージは・・・ Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at LoadSetting.main(LoadSetting.java:10) java ファイル名で実行できるようにしたいのですが、 どなたかご教授ねがいます。
973 :
デフォルトの名無しさん :2007/12/14(金) 22:09:32
>[コントロールパネル]に[システム]ってある?そこの[詳細設定]→[環境変数]→……
これでわかりました、有り難うございました。 あと、Hello Worldの表示も出来ました。
http://andyou.sakura.ne.jp/tool/exifviewer.html ところで私がジャバをインストールしたのはこのexifviewerを実行してみたいからなのです。
ここから、ExifViewer.zipというのを落としたのですが、この後どうしたらいいのでしょうか?
ここには、
>ExifViewer.jarをダウンロードし、実行してください。
なんて書いてあるのですが、どうしていいのかわかりません。
とりあえず、C:\Documents and Settings\aこのフォルダにExifViewer.zipを置いてみました。
>>973 そのページをよく読め。
ExifViewer.zipなんてないぞ。というか作ったやつに聞いたらどうだ?
あと実行するだけならjdkじゃなくてjreを使え。
ExifViewer.jarをダブルクリックするか
java -jar ExifViewer.jar
としてみろ。
975 :
デフォルトの名無しさん :2007/12/14(金) 22:35:24
>>974 > ExifViewer.zipなんてないぞ。というか作ったやつに聞いたらどうだ?
ExifViewer.jarって書いてあるけど、落ちてくるのはExifViewer.zipなんです。
> あと実行するだけならjdkじゃなくてjreを使え。
もう、jdk-6u3-windows-i586-p.exeっていうのをインストールしちゃいました。
> ExifViewer.jarをダブルクリックするか
だから、ExifViewer.jarがないんです。
ExifViewer.zipをリネームするのかな?
使ってるブラウザがIEなら拡張子をzipからjarに変えて実行してみろ。
977 :
デフォルトの名無しさん :2007/12/15(土) 00:00:27
>>976 わおぅ、出来ましたw
有り難うございます。
こんな事がまかり通るなんて、恐ろしい世界ですねw
IEはダウンロード時に勝手に拡張子を変えることがちょくちょくある ファイル名が変わっただけで中身が変わるわけじゃないから別に恐ろしくはない だから拡張子を変えなくてもjava -jar ExifViewer.zipでも実行可能 拡張子に対する関連付けでjarファイルのダブルクリック実行はできないが
MIME-TYPEが理解できないバカだからなIEは。
>>972 実行はできてる。実行したプログラムの中で予期しない事が起きてるだ
け。コマンドラインに何かパラメータが必要とか。
スーパークラス A、サブクラス B, C, D, ... に対して A にだけ main() を実装し、 サブクラスの名前でコマンドラン起動した時 (java B や java C) サブクラス名を 取りたいんだけど、無理ですかね? public abstract class A{ public static void main(String[] args){ // コマンドライン引数の解析や初期化処理 A a = (A)Class.forName("コマンドで指定したクラス名"); a.execute(); // 終了処理 } protected abstract void execute(); }
>>981 staticメソッドはクラスに固定されてる。継承はされない。
又、mainメソッドが無いクラスでは実行が開始出来ない。
よって、今のままでは無理。
エクレーップス のコンソールに対してだと System.console() が null 返すんですけどコレ使えないの?
984 :
デフォルトの名無しさん :2007/12/15(土) 12:30:23
javaをインストールしたいのですが、j2re1.4.1_01というものが すでに入っています。これは手動で削除していいんでしょうか? コンパネの"プログラムの追加と削除"には表示されていないので…
985 :
デフォルトの名無しさん :2007/12/15(土) 13:12:23
import java.awt.*; public class FrameTest extends Frame { public static void main(String [] args) { new FrameTest(); } FrameTest() { super("FrameTest"); setSize(200, 100); show(); } } これを、 FrameTest.javaに書き出し、 C:\java>javac FrameTest.java で、コンパイルしたら成功しました。 しかし、これを起動するのには、 C:\java>java FrameTest としなくてはなりません。 これをダブルクリックで起動させるにはどうしたらいいでしょうか? OSはwinsp2です。
ジャー にする。
987 :
デフォルトの名無しさん :2007/12/15(土) 13:25:08
>>986 どうすればjarファイルが作れますか?
988 :
デフォルトの名無しさん :2007/12/15(土) 13:26:52
初心者なんですが、array Listのint型やdouble 型での宣言方法を教えてください。 お願いします。
989 :
デフォルトの名無しさん :2007/12/15(土) 13:29:51
無理
List<Integer> array = new ArrayList<Integer>() じゃダメかね。
もしくは commons primitives の org.apache.commons.collections.primitives.ArrayIntList を使うか。
ジェネリックにIntegerとか無理なんだっけ? ArrayList<Integer> list が無理なら、 ArrayList<String> list intを変換して入れたら? 使うときに戻せばいいじゃん。
994 :
デフォルトの名無しさん :2007/12/15(土) 17:01:44
1000を取りたい
_____ (\ ∞ ノ ヽ、ヽ / `ヽ)__ノ
997 :
995 :2007/12/15(土) 17:12:15
だめぽ。誰かヨロ。
998 :
デフォルトの名無しさん :2007/12/15(土) 18:11:19
貰ったー?
1000 :
デフォルトの名無しさん :2007/12/15(土) 18:27:37
1000.
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。