07/03/12 18:51:39
>>356
createTempFile だと、
prefix + "java.io.Fileが勝手に付加する文字列" + suffix って
名前のファイルを作っちゃわない? 二重起動防止にならんと思うけど。
あと、deleteOnExit だと、正常に終了できなかった場合はファイル残ったままになるよ。
もっとも、正常に終了できなかった場合にファイルを削除する方法は
今のところ提供されてないので二重起動の場合はダイアログだして
ユーザが選択できるようにした方が良いかも。v2c がやってるみたいに。
358:デフォルトの名無しさん
07/03/12 18:55:11
>>355
Java では、 if(式) の式の部分は boolean じゃないとエラーになる。
if(s = "") の 「s = ""」って代入式の型は String なので、
コンパイラに boolean じゃないと怒られただけ。
359:デフォルトの名無しさん
07/03/12 19:00:25
あらかじめ決めておいたポート番号のソケットをオープンできたら起動、
というのを見かけた。レースコンディションにはならないような気がする。
・異常終了したときの後始末はうまくできるんだろうか。
・ユーザー単位でのみ複数起動を禁止して別ユーザーなら起動を許す、
みたいなのは工夫が必要になるな。
RMI Registry(Activation)やJMXでなんかやれそうな気がしないでもない。
360:デフォルトの名無しさん
07/03/12 19:11:37
>>357
ありがとうございます。
Preferences+ユーザー選択って感じにしようかな・・・。
361:デフォルトの名無しさん
07/03/12 19:13:45
>>359
なるほど・・・ソケットは思いつかなかった。
362:デフォルトの名無しさん
07/03/12 20:30:57
synchronizedのブロックの適用が及ばない範囲、及ぶ範囲、そしてその理由について
わかりやすく教えてもらえませんか('A`)
同時に動くスレッド2個ぐらいで、、
HP5箇所ぐらい見たんですがいまいち理解できません
363:デフォルトの名無しさん
07/03/12 20:57:50
>>357
俺は nio のファイルロックで判定した。
364:デフォルトの名無しさん
07/03/12 20:58:59
356あてだった・・
365:デフォルトの名無しさん
07/03/12 21:05:56
HashMapでClass<T>とList<T>を関連付けたいのですがいい方法はありませんか?
366:デフォルトの名無しさん
07/03/12 21:07:40
>>365
HashMap<Class<T>, List<T>>
367:デフォルトの名無しさん
07/03/12 21:14:41
>>366
あの……それだとHashMapをnewするときにTになにか入れないといけないけどそういう使い方を意図しているのではなくて。
T.classをキーにしてgetしたらList<T>型のオブジェクトが返ってくるようにしたいんです。
もしくはList型オブジェクトをなんかしてList<T>型にキャストするとか。
368:デフォルトの名無しさん
07/03/12 22:02:31
>>367
「関連づけたい」という曖昧な言葉を使ったことへの反省はしないのね。
369:デフォルトの名無しさん
07/03/12 22:52:46
>>368
反省しました
……ってなんて答えりゃいいかわからんそのあてつけみたいなのやめてくれよ……
一回で伝わらなかったら何度か説明する機会くらい与えてくれよ……
人格攻撃して話題そらしたいのか?
無理なら無理でいいよ別の方法考えるから……
370:デフォルトの名無しさん
07/03/12 22:55:18
>>367
HashMapを継承した新しいクラスを作ればいい。
371:デフォルトの名無しさん
07/03/12 23:03:31
>>370
Class<T>とTのときはそれでできたんだけど、(内部でHashMap<Class<?>,Object>に委譲して出口でclazz.cast(map.get(clazz))を返すようにした)
List<T>のときはどうやって実装すればいいかわからないんです。
Reflection周りでいろいろ探してはいるんですが……
372:デフォルトの名無しさん
07/03/12 23:06:28
>>371
public <T> List<T> get(Class<T> c) {
return (List<T>)get(c);
}
373:デフォルトの名無しさん
07/03/12 23:07:22
間違えた。
return (List<T>)super.get(c);
374:デフォルトの名無しさん
07/03/12 23:17:47
>>372
いけました。
ここで出る未チェックのキャストはアノテーションで強制的に黙らせる他ないんですよね?
375:デフォルトの名無しさん
07/03/12 23:52:35
switchの条件にlong型が使えないのはなぜなんでしょうか
char,short,int,enumは使えるのに
何か歴史的な理由があったりしますか?
効率?
376:デフォルトの名無しさん
07/03/13 00:10:08
long は int に暗黙的にキャストできないから。
377:365
07/03/13 00:31:52
ありがとうございました。
何とかうまくいきそうです!
378:デフォルトの名無しさん
07/03/13 03:06:04
//入力データ読み込みオブジェクトの
作成
BufferedReader myReader=new BufferedReader(
new InputStreamReader(System.in),1);
//敵出現メッセージ
System.out.println("敵が現れた。");
//味方、敵初期値
int mikata=5;
int teki=5;
while(teki>0){
//数値入力
System.out.println("どうする?1:攻撃、2:回復");
System.out.println("行動:");
//数値を読み取り、変数に代入
Int mystring =myReader.readLine();
Int koudou = Integer.parseInt(mystring);
と思われる部分で;が足りませんというエラーが出ました、どう修正すればいいのですか?
379:デフォルトの名無しさん
07/03/13 03:10:28
・エラーメッセージはそのまま書く。改変されると推測が困難。
・ソースは必要な箇所を可能な限り原文に忠実に記述する。
Int とか、「作成」から始まる行とか、何が正しいのか分からない。
380:デフォルトの名無しさん
07/03/13 16:28:12
interface と abstract class の違いが良くわかりません。
interface でなければならない(もしくはその方がよい)場合、
また逆にabstract class でなければならない場合とは、
どんな場合なのでしょうか??
381:デフォルトの名無しさん
07/03/13 17:26:30
Javaでは多重継承できないから属性を表すような実装はInterface
一方、デフォルト実装を与えたい場合などはabstract class
382:デフォルトの名無しさん
07/03/13 17:47:50
このクラスは○○というメソッドを持っているよ→interface
このクラスをベースに○○というメソッドを使って機能拡張してね→abstract class
383:デフォルトの名無しさん
07/03/13 22:58:08
型の継承 → interface
実装の継承 → abstract
384:デフォルトの名無しさん
07/03/13 23:05:27
>>380
・ある性質に特有の処理が存在する。部分的に実装を共有できる。
もしくはどうしてもある種の実装が必要だ。
(interface は実装をもてない。abstract class はもてる。)
・その性質の出現する場面が予想できる。もしくは限定した局面でしか使用しない。
(あとから再利用を試みる場合、interface の方が制約が少ない。
abstract class だと、別のクラスの継承が必要な時にはもう使えない。)
上記を満たすなら abstract class。
制限をかけることによって(考えることを減らすことで)実装を容易にしたい場合も。
それ以外は interface。
interface の方がより純粋。制限が少なくて柔軟性が高い。
反面、実装の手間が多くなる。
最近は「とりあえずinterfaceにしとけ」な気がする。
実装に関してはヘルパークラスやテンプレートクラスを内包して、
そっちに処理を転送する方法で、継承と大差ない手間で済む。
その上で拡張性を保てる。
GUIフレームワークの基本部品なんかは abstract class ベースのものが多い。
画面表示に関する基本実装がどうしても必要とかそんなんだろうか。
385:デフォルトの名無しさん
07/03/13 23:08:57
非オブジェクト指向言語だからといって
オブジェクト指向的にプログラムがかけないことはないように、
abstract class を interface代わりに使ってプログラムは書けるだろうけど、
そんな悲しいことは普通はしない。
386:デフォルトの名無しさん
07/03/13 23:27:22
x64で動作するeclipseってあったっけ?
もしくはjava用のIDE
387:デフォルトの名無しさん
07/03/13 23:34:38
>>380
interfaceを作って、abstract で骨格実装(デフォルトの実装)を作って、
多くの実装クラスを骨格実装を継承するようにすると
柔軟な構造になるよ。ひと手間掛かるけど
388:380
07/03/14 00:14:01
なるほど…
デフォルト実装の必要性と、プログラムの柔軟性との兼ね合いってことでつね。
みんなありが㌧
389:デフォルトの名無しさん
07/03/14 00:38:02
>>333
不変クラスつくればいいだけだろう。
あれでconstなクラスは作れる。
無理って事は無い。
390:デフォルトの名無しさん
07/03/14 00:39:26
>>324
配列の中身が書き換えられないように、
Collections.unmodifiableList()を使うとか、
clone()を使うとか、考えようぜ。
IBMのdwで、不変クラスで検索してみ。
constに相当するものを作る方法がのってる。
Wikipediaの「イミュータブル」でも検索してみると良い。
391:デフォルトの名無しさん
07/03/14 00:39:54
>>327
しばらくスレを見ていなかったので>>322のことにまだ気づかなかっただけだ。
392:デフォルトの名無しさん
07/03/14 00:41:03
>>332
それは、Effective Javaでは禁じ手とされているものだぞ。
攻めて、enum型にせよ。enumが駄目ならfinalでコンストラクタがprivateなクラスを。
393:デフォルトの名無しさん
07/03/14 00:41:49
>>337
定数インタフェースは、勝手に実装されることがあるからやめとけ。
394:デフォルトの名無しさん
07/03/14 00:41:58
public class Hello
{
public static void main(String args[])
{
System.out.println("Hello!");
}
}
395:デフォルトの名無しさん
07/03/14 00:43:43
>>343
代替手段があるからいらないんだよ。
constは余計なゴミなんだよ。ゴミ。
全てを不変にしたくないときはfinalのほうが柔軟性が効くんだよ柔軟性が。
部分的に可変にしたほうがよいこともあろう。
>>345みたいな浅はかでお馬鹿なC言語厨には理解できないが。
396:デフォルトの名無しさん
07/03/14 00:44:43
>>351
FindBugsを使え。そういう問題が起きても
困惑することは無くなるだろう
397:デフォルトの名無しさん
07/03/14 00:47:22
>>375
switchは総ナメ野郎の糞だから
398:デフォルトの名無しさん
07/03/14 00:53:34
>>395
防御的コピーって知ってる?
代替手段がないからこんなことしないといけないんだけど。
399:デフォルトの名無しさん
07/03/14 01:06:51
質問なんですが、下記のようにジェネリクスを使ったインタフェースを使って
実装クラスを書くと意図したように実行まで行えるのですが、
アノテーションを入れるとメソッドのオーバライドをしていないと怒られてしまいます。
これはアノテーションが間違っているのでしょうか?
それともアノテーションを使っていない方はたまたま実行まで出来てしまっただけで、
本来ならコンパイルが出来ないはずなのでしょうか。
public interface Base<T>{
public void print(T data) ;
}
public Derived implements Base<Integer> {
public void print(Integer data ) {
System.out.println(data.toString() ) ;
}
}
400:デフォルトの名無しさん
07/03/14 01:23:52
>>399
Derived のメソッド定義に @override をつけたものとして話を進めるけど
それはオーバライドじゃないから怒られる。ジェネリクス関係ない。
401:デフォルトの名無しさん
07/03/14 01:42:18
>>398
不変じゃなかったら、constつけてても防御コピーしなきゃだめだろ
402:デフォルトの名無しさん
07/03/14 01:56:36
>>401
残念ながらC++のconstは防御的コピーする必要はない。
403:デフォルトの名無しさん
07/03/14 02:20:34
勝手にコピーされるから?
不変でないオブジェクトは、明示的にせよ暗黙的にせよコピーしないと、
中にしまいこんだはずのオブジェクトを勝手に編集される可能性がある。
404:デフォルトの名無しさん
07/03/14 02:42:49
不変バージョンと可変バージョンが1つのクラスで定義でき、
const つけると不変クラスとして使えるってことか?
たしかに、両方のバージョンをそれぞれ作るのは面倒
405:デフォルトの名無しさん
07/03/14 02:43:16
超初心者です。。midiを内部で生成して再生するプログラムを作ろうと、ググっていて
URLリンク(java-house.jp)
の話を見つけました。確かに
static byte test [] = new byte [] {0x7f, 0x80};
とやってみると、0x80以上を代入しようとすると「精度が落ちている可能性 期待値int」
とか言われてしまいます。
リンクにあるようにjpgBuff[j] = (byte)jpgBuff_i[j];で変換すると正しく扱えるようなのが不思議です。
>しかし int に入れておいて byte にするというのは、意味がないように
>思います。というか、int でできるなら byte でソースに埋めこんでも
>できなきゃおかしいですよね。ただ代入しているだけなんだし。何か
>その辺もおかしいのでは?
とあるように0xffまではbyteで扱えるはずですよね?
0x80以上をbyteな配列に代入するにはどうすればいいんですか?
何か勘違いをしているようでしたらご指摘をお願いします。。
406:デフォルトの名無しさん
07/03/14 02:58:05
byte は 0 ~ 255 じゃない
-128 ~ 127 なんだよ……
407:デフォルトの名無しさん
07/03/14 03:04:54
>>405
> とあるように0xffまではbyteで扱えるはずですよね?
違う。byteは -128~127まで。
キャストを使って符号を無視するように明示しないかぎり byte では 255(0xFF) は扱えない。
> 0x80以上をbyteな配列に代入するにはどうすればいいんですか?
直接的にはキャストを使う。
間接的には String から byte配列に変換するようなユーティリティメソッド作るとか
"\u007F\u0080".getBytes("ISO8859-1"); みたいに文字列リテラル使ってみるとか。
408:デフォルトの名無しさん
07/03/14 03:21:44
>>406-407
ありがとうございます。
>直接的にはキャストを使う。
URLリンク(java-house.jp)
を参考に byte b = (byte)0xff;
でエラーが出ないことは確認できました。
配列の場合は
static byte test [] = (byte []) new int [] {0x7f, 0x80};
とかやってみたんですが、どうもうまく行きません(変換できない型)
これは後出しで変換するしかないんでしょうか?
409:デフォルトの名無しさん
07/03/14 03:24:00
static byte[] test = new byte [] { (byte)0x7f, (byte)0x80 };
410:デフォルトの名無しさん
07/03/14 03:33:54
なるほど、確かにうまく代入されています。
ただ毎度面倒くさいし、見掛けも悪いのであらかじめ
-128 ~ 127 の数値で扱うようにしておいたほうが
良いかも、と思いました。。。
ありがとうございました。
411:デフォルトの名無しさん
07/03/14 04:26:00
UByte 型作っちゃいなYO
412:デフォルトの名無しさん
07/03/14 05:30:50
ejbってもう誰も使ってないの?
みんなjspで力つきたのか? phpレベルの底辺が好きなんだね。
413:デフォルトの名無しさん
07/03/14 08:25:06
>>412
ばかめ!EJB2は死んだわ!
414:デフォルトの名無しさん
07/03/14 09:01:03
誰かこれを解説してください。
>3個の数字の並び替えの場合、その並び替えは 3! = 3 * 2 * 1 = 6通り、
>ですが、1回だけ shuffleを行う際に使っている j、k の選び方は 36 通りです。
>つまり、これが6通りの並び替えのどれかに対応します。
>しかしながら、 (36 ) ÷ ( 3 ! )は割り切れないのでどれかの並び方に偏ってしまうということがわかります。
URLリンク(blogs.sun.com)
415:デフォルトの名無しさん
07/03/14 09:31:16
>>414
実際に並べかえてみりゃわかるよ。小学生並の解き方だけど。
例えば、
> for (int i = 0; i < a.length; i++)
を削った場合、j,k は 9通り(3^2)で、実際に並べ替えてみると
j=1::k=1:A、B、C, k=2:B、A、C, k=3:C、B、A
j=2::k=1:B、A、C, k=2:A、B、C, k=3:A、C、B
j=3::k=1:C、B、A, k=2:A、C、B, k=3:A、B、C
出現確率はこんな感じに偏る。
A、B、C::3/9,
A、C、B::2/9,
B、A、C::2/9,
B、C、A::0/9,
C、A、B::0/9,
C、B、A::2/9
続きは自力で。
416:414
07/03/14 09:37:37
>>415
ありがとうございます。助かりました。
417:デフォルトの名無しさん
07/03/14 16:24:34
作成したjarファイルを、JREが必要無い状態で、exe形式で実行したいと考えています。
検索してみたところ「JET」なるコンパイラが見つかり、
「パーソナルエディション」なら個人に限り無料で使用できると聞いたのですが、
公式サイト内を探してみてもパーソナルエディションが見つかりません。
ひょっとして配布終了してしまったのでしょうか?
418:デフォルトの名無しさん
07/03/14 16:36:12
>>398
知っとるわい馬鹿
419:デフォルトの名無しさん
07/03/14 16:37:18
>>402
constするとその内部にあるものまですべてfinalになるなら
部分的にconstにできるfinalのほうが柔軟性が良いんだけどね。
420:デフォルトの名無しさん
07/03/14 16:38:42
>>417
ないっぽいね。exe化はあきらめて、JSmoothかexewrapあたりにしておくのが吉。
421:デフォルトの名無しさん
07/03/14 16:52:00
double型からint型に変えるやり方はあるのですが
逆にint型らdouble型にかえるやり方があるのでしょうか?
一応double型からint型に変えるやり方を参考にして
やってみたのですがどうもエラーがでるようで・・・」
422:デフォルトの名無しさん
07/03/14 17:00:15
何をやった。
意図していた結果 / 実際の結果
を具体的に書くといいぞ。
double doubleValue = (double)100; と書いたらコンパイル時に~という
メッセージが出ました、とか。
423:デフォルトの名無しさん
07/03/14 17:16:08
public class Henkan{
public static void main(String[] args) {
double s = 5.0;
int i = (int)s;
System.out.println(i);
}
}
これを参考にしてdoubleをint、intをdoubleにすれば変換できると
思いやってみたのですが結果
Henkan.java:3: 精度が落ちている可能性
検出値 : double
期待値 : int
int s = 5.0;
^
エラー 1 個
になってしまいまして、どうすればいいのがわからないです。
424:デフォルトの名無しさん
07/03/14 17:26:26
>>423
URLリンク(www.google.com)
425:デフォルトの名無しさん
07/03/14 17:27:15
intとdoubleを入れ替えたということは
int s = 5.0; // A
double i = (double)s;
としたわけだな?
今回の目的はintをdoubleに変換することなんだよな?
Aの行で確かに精度が落ちている。
intなんだからただの5でないといけない。
426:デフォルトの名無しさん
07/03/14 17:27:40
>>423
> int s = 5.0;
5.0 は浮動小数点リテラルで、型は double だから、
int に代入するにはキャストしないとダメ。
int s = (double)5.0;
もしくは、整数リテラルを使って
int s = 5;
427:デフォルトの名無しさん
07/03/14 17:28:32
× int s = (double)5.0;
○ int s = (int)5.0;
428:デフォルトの名無しさん
07/03/14 17:39:05
解決できました!みなさま即レスで返していただきありがとうございました!
429:デフォルトの名無しさん
07/03/14 17:43:22
doubleにintを代入するときはそのまま入っちゃうのは、
情報欠落がないから。
プリミティブの
ワイドニング変換(widening primitive conversion)
ナローイング変換(narrowing primitive conversion)
というのを調べるといいかも。
430:デフォルトの名無しさん
07/03/14 17:53:17
初心者はこのJava入門(Wikibooks)を読むべし
URLリンク(ja.wikibooks.org)
431:デフォルトの名無しさん
07/03/14 18:19:30
>>417
gcjとかはどうよ?
432:デフォルトの名無しさん
07/03/14 18:40:46
> doubleにintを代入するときはそのまま入っちゃうのは、
逆?
433:417
07/03/14 19:24:05
>>420
>>431
ありがとうございます。>>431さんがおっしゃっているgcjを試してみたいと思います。
プログラム自体はSwingなんですが、gcjはSwingはダメなんですね。
この機会にSWTも勉強してみようかと思います。
ご親切にありがとうございました。
434:デフォルトの名無しさん
07/03/14 21:46:31
>>433
JRE無しでないと駄目な理由は?
たぶん他の代替手段も、各種DLLが必要になってくると思うけど・・・
435:デフォルトの名無しさん
07/03/14 23:13:15
>>429
doubleにlongを代入するとき、そのまま入っちゃうのは何故?
情報欠落があるのに。
436:デフォルトの名無しさん
07/03/14 23:23:36
>>435
int→floatでも情報損失があるけど言語規定上問題なく拡大変換される。
プリミティブ型の拡大変換は情報損失の有無に関わりなくコンパイル時も実行時もエラーを発生させない。
だから、変換の可否は情報損失とは関係なく、言語仕様でそうなっていると言うべき。
437:デフォルトの名無しさん
07/03/15 00:59:22
double d = Double.valueOf(args[i]);とdouble d = Double.valueOf(args[i]);の違いって何かあるんですか?
438:デフォルトの名無しさん
07/03/15 01:08:10
>>437
その2つ、全く同じに見えるけど。
439:デフォルトの名無しさん
07/03/15 01:08:24
なにもない
440:デフォルトの名無しさん
07/03/15 03:31:34
他スレで質問したのですが、
スレの進行が滞っているのでこちらに書きます。
class C1{
}
class C2 extends C1{
void f(){
System.out.println("f() is executed.");
}
}
class Example{
public static void main(String args[]){
C1 obj = new C2();
obj.f();
}
}
上記のプログラムをコンパイルすると、
「メソッド f() はclass C1 で見つかりません。」
というメッセージが出てコンパイルエラーとなりました。
あるクラスの変数によってサブクラスのオブジェクトを参照する場合、
そのオブジェクトが呼び出すメソッドは、スーパークラスでも宣言されている
オーバーライドメソッドでなければならないということですか?
441:デフォルトの名無しさん
07/03/15 03:51:11
>>440
> C1 obj = ほげほげ
> obj.f();
2行目は、C1 の f() を探す。
442:440
07/03/15 04:33:07
>>441
なるほど、あくまでその変数のデータ型に基づいてメソッドを選択するってことですね。
どうもありがとうございました!
443:デフォルトの名無しさん
07/03/15 09:46:06
見つかって呼ばれるメソッドは変数のほうではなく、
オブジェクトに定義されているもの。
444:デフォルトの名無しさん
07/03/15 12:12:22
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(name)));
try {
...
} finally { reader.close(); }
とかって、素直で読みやすいコードだと思うんですが、
InputStreamReader や BufferedReader のコンストラクタで例外が発生したら
name のファイルが開きっぱなしになってしまいますよね?
(実際はもっと複雑なフィルタがかぶさってます。)
↓みたいに FileInputStream だけ別の変数にしとかないといけないんでしょうか?
FileInputStream file = new FileInputStream(name);
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(file));
try {
...
} finally { reader.close(); }
} finally { file.close(); }
close() がダブってるんでキモイのと、これだともしかしてさらに
InputStreamReader でもう一段 try しないといけないのかも・・・と、
なんだか釈然としないです。
445:デフォルトの名無しさん
07/03/15 12:27:25
以下のようなソースがあった場合、
readerでIOExceptionを発生させるには読み取り権限がないファイルを渡すことでテスト
FileNotFoundExceptionを発生させるには存在しないファイルを渡すことでテストしようと思いますが
writerでIOExceptionやclose()メソッドでIOExceptionが発生した場合、
JUnitでどんなコードを書いたらよいのかがわかりません
よろしくお願いします
public String read(String name) {
Reader reader = null; StringWriter writer = null;
File file = new File(name);
try {
reader = new InputStreamReader((new FileInputStream(file)));
writer = new StringWriter();
int c;
while ((c = reader.read()) != -1)
writer.write(c);
return new String(writer.toString());
} catch (FileNotFoundException e) { System.out.println(e.getMessage());
} catch (IOException e) { System.out.println(e.getMessage());
} finally {
try {
if (writer != null)
writer.close();
} catch (IOException e) { System.out.println(e.getMessage()); }
try {
if (reader != null)
reader.close();
} catch (IOException e) { System.out.println(e.getMessage()); }
}
return null;
}
446:デフォルトの名無しさん
07/03/15 12:29:56
>>444
tryブロックの外で、closeすべき変数を null を初期値とし、まとめて宣言する。
finally で、null チェックして逆順に close を呼び出す。というのはどうでしょう
ラップしてる変数の close 処理がうまくいくことを前提にするなら、
if文をネストして、null ではない一番外側の変数だけでcloseを呼び出す。
と言うのもありかも?
447:デフォルトの名無しさん
07/03/15 12:33:56
>>444
1.5 以降なら、
URLリンク(www.atmarkit.co.jp)
の、かつのり氏の StreamUtils#close みたいなユーティリティメソッド作って、
FileInputStream file = null;
BufferedReader reader = null;
IOException e = null;
try {
file = new FileInputStream(name);
reader = new BufferedReader(new InputStreamReader(file));
//....
}catch(IOException ex){
e = ex;
}finally{
StreamUtils.close(e, reader, file);
}
みたいにするとか。
1.4までだと java.io.Closeable がないから この方法は使えないんだけどね。
448:デフォルトの名無しさん
07/03/15 12:45:55
>>445
InputStream を渡すメソッドだったら簡単だけど。
djUnit の Virtual Mock Objects 使ってみるとか?
449:デフォルトの名無しさん
07/03/15 14:13:34
質問です
画面に文字列を出力させるときに、その表示を一文字ずつ
順番に表示させるのって可能ですか?
例:ありがとう
と出力させるとしたら、「あ」が表示されて、少し待って「い」
みたいな感じです
450:デフォルトの名無しさん
07/03/15 14:21:45
可能不可能でいえば可能。
画面てのがコマンドプロンプトなどのキャラクタ表示装置なのか
ウィンドウなのか、ウィンドウの中のテキストフィールドなのか
などによってやり方は違う。
451:デフォルトの名無しさん
07/03/15 14:43:08
アプレット上にパネルを置いて、そのパネルでmouseWheelMovedイベントを拾うプログラムを作っているのですが
アプレットの外の部分(HTMLで文字などを表示してるところ)をマウスクリックすると
パネル上でマウスホイールを回してもmouseWheelMovedイベントが来ません。
何が問題なのでしょうか?
452:デフォルトの名無しさん
07/03/15 17:20:00
Java 1.6.0のソースのStringの部分を眺めていたら、public String toUpperCase(Locale locale)の部分(2556行)に
/* Now check if there are any characters that need to be changed. */
scan: {
for (firstLower = 0 ; firstLower < count; ) {
(ry
}
という部分があったのですが、このscan: {}はどういう意味ですか?
453:デフォルトの名無しさん
07/03/15 17:38:36
>>451
自分のウインドウの外の出来事を、しかもアプレットが知ることが出来たらやばくね?
>>452
ラベル:
ループの中でbreakやcontinueしてたりしない?
454:デフォルトの名無しさん
07/03/15 17:53:03
>>453
そうでなくて
パネル上にカーソル移動→マウスホイール動かす→イベント上がる
のに
パネルの外をクリック→パネル上にカーソル移動→マウスホイール動かす→イベント上がらず
ってことです。
455:デフォルトの名無しさん
07/03/15 18:14:23
マウスホイールって入力フォーカスのあるコントロールに通知されるんじゃなかったっけ?
なんかそれを変更するツールがあったよーな。
456:デフォルトの名無しさん
07/03/15 19:29:56
すみません、質問なのですが。自分、去年末あたりからプログラミング(java)
を学び始めたのですが、DBをjavaのプログラミングで弄る技術は必須でしょうか?
457:デフォルトの名無しさん
07/03/15 19:37:35
>>456 使わないなら不要、使うなら必要。
458:デフォルトの名無しさん
07/03/15 19:50:43
何故こんな質問が出るか想像してみた。
1.誰かからできないといけないと言われた
2.その手の本を読んで、「javaでDBを使ってみよう」という所で詰まっている
3.ネットでDBを使う例をよく見かけるので必要かと思った
4.面接で「javaはひととおりできます」と言ってしまったので入社前に「ひととおり」というのはどの程度か知りたい
で、>>456が聞きたいのは「javaでDBを弄る技術がないと役立たずなのか」って事ではないだろうか。
459:デフォルトの名無しさん
07/03/15 19:58:17
>>456
ヒント:いまどきRDB使わない業務アプリはほとんどない。
460:デフォルトの名無しさん
07/03/15 20:02:45
>>456
その質問はこんな感じ。
「すみません、質問なのですが。自分、駅前商店街のあたりで料理屋を探していて、さて
これから適当な店に入ろうというところなのですが、食前にワインを注文すべきでしょうか」
吉野家でワインを注文するひとは少ないと思われ。
461:デフォルトの名無しさん
07/03/15 20:04:50
>>458ええ、最近とうとうeclipseを導入したのですがHSQLDBを起動するためのソースが
eclipse上で上手く動かないのです。んで考えた末に出た結論がHSQLDBplugin
テキストエディタの時は上手く動いたのに何でだろorz クラスパス等の考慮は
完璧なんですが・・・
462:デフォルトの名無しさん
07/03/15 20:12:45
やっぱり、eclipse破棄してテキストエディタでソース組むようにします。
eclipse使ってると技術が退化する。
463:デフォルトの名無しさん
07/03/15 20:18:42
>>462
作業効率が落ちると消化できる量も当然減るわけで一概に技術が退化するとは思えない。
要するに
「コアな部分を解釈するか」
「作業効率を上げて色々な技術に触れるか」
方向性の違いじゃない?
464:デフォルトの名無しさん
07/03/15 20:23:53
eclipseもプログラム言語もプログラマーにとっては道具
どのような道具を使えば望んだ結果が得られやすいのかが一番重要
465:デフォルトの名無しさん
07/03/15 20:30:16
そうですね。eclipseは構文エラーなどをした時、その場で教えてくれるので
とても便利ですよね。じゃあ、どういった種類のソースを組むのかによって
使い分けることにします。
466:デフォルトの名無しさん
07/03/15 20:51:53
経験の浅いプログラマは、たまにはテキストエディタで書いて
いろいろ振り返ってみるのも良いと思う。
「退化する」ってのは、本当は退化じゃなくて基礎があやふやになるということ。
ある程度の経験があって基礎がしっかり固まっている人はIDEを使ったところで
「退化」なんてしないし作業効率が上がるので、どんどん使えばいい。
そういう人は仮にIDEが使えない環境下で作業しなければいけない場面でも
問題なく普通に対応できる。
467:デフォルトの名無しさん
07/03/15 20:54:21
要するに何が言いたいかっていうと
>>462は半年ROMってろってことですね
468:デフォルトの名無しさん
07/03/15 20:56:02
IDE使うと楽にコーディングできるからテキストエディタには戻れなくなる。
覚えていなくてもいいことは人は忘れるものだ。
469:461
07/03/15 21:06:35
すみません、続報ですが、テキストエディタで組んだ奴は上手くDBに接続できたので、
そのソースをeclipseにコピーして実行したら上手く接続できました。
どうやら原因は私がeclipseに甘えていたことのようです。orz
470:デフォルトの名無しさん
07/03/15 21:07:47
>>466
文法をしっかり覚えている=プログラマとしての経験が豊富
みたいな口ぶりだな。
471:461
07/03/15 21:16:25
下らない審問ばかりで申し訳ないのですが、私まだjavaしか使えないので
これからc,c++学ぶ予定なのですが、もしそれらの言語でGUIプログラムを組むとき
流れは( ContentPaneを拾得したり、JButtonなどを宣言する流れは同じなのでしょうか?
472:461
07/03/15 21:33:22
c,c++学ぶときのお楽しみって事で。Σ(´∀`;)
さっきの原因が分かりました。hsqldb/libにあるjarファイルを2つとも
importしてたのが原因だったようです。盲点でした・・・
473:デフォルトの名無しさん
07/03/15 21:36:28
>>470
いや、>>466の言いたいことは文法だけじゃなく開発全般にわたっての事ではないかと。
IDEでやっていることをIDEなしでもちゃんとできるようになろうよ、と。
それができれば自ずとプログラマとしての力もつくんでないの?
IDEなしで開発していると思いがけずいろんなものが見えてくることもあるし…
474:デフォルトの名無しさん
07/03/15 22:30:44
C++でGUIプログラム組む時は基本的にMFCまたはWTL/ATLを使う。
詳細はググるように。
.NETの場合はFormsとWPFがあります。
FormsはVBの流れをくんだ開発手法でWPFはJSPやASPの流れを組んだ開発手法と思えば良いと思う。
475:デフォルトの名無しさん
07/03/15 22:34:04
俺C++がメインでJavaは素人だからトンチンカンなこと言ってるかもしれないけど……
例えばある変数がintだったかlongだったかで手が止まるとか、
20文字の変数名を手入力して間違えてコンパイルエラーとか、
ある関数の内容を確認するときにいちいち検索が必要になるとか、
もうナンセンス極まりない話だと思う。
それじゃ自分が常に全体を把握できる程度の規模のプログラムしか書けないよ。
断言できる、統合環境と技術力とは一切関係がない。
476:461
07/03/15 22:38:01
さっきのHSQLDBのことですが、pc再起動してもう一度実行してみたら
IllegalStateExceptionと出てまた失敗しました。
成功してたのに・・・バグ?(´・ω・`)
477:デフォルトの名無しさん
07/03/15 22:44:00
>>476
APIでは、
public class IllegalStateException
extends RuntimeException
不正または不適切なときにメソッドが呼び出されたことを示します。
すなわち、Java 環境または Java アプリケーションは、要求されたオペレーションに適した状態ではありません。
設定ファイルやOSセキュリティなどで
サーバ・データベースの連携がうまくいってないのでは?
478:デフォルトの名無しさん
07/03/15 22:56:05
全自動洗濯機があるんだから洗濯板の使い方なんてどうでもいいよ
479:デフォルトの名無しさん
07/03/15 23:02:05
そういう奴は全自動洗濯機の性能評価・製品評価もできず、
自分が何をやっているのかも理解できない
いわれるがままに作業する全自動ロボットでしかないわけだが。
480:475
07/03/15 23:11:34
>>479
比喩を比喩で返すのは別にいいんだけどさ、
それは一体何を言わんとした比喩なの?
ある変数にカーソルを合わせたら「int」と出た、
じゃあこれはintなんだなと理解し、それに応じたコードを書き進めることが、
あるいはある関数で右クリックしてメニュー出して左クリックして
その関数の宣言されている場所に一気にジャンプして編集することが、
果たして「言われるまま作業する全自動ロボット」とまで
蔑まれるほど程度の低い行為だとはどうしても思えないんだけど。
君の言う「本当の」プログラミングって何よ?
481:デフォルトの名無しさん
07/03/15 23:18:55
>>444
>InputStreamReader や BufferedReader のコンストラクタで例外が発生したら
ドキュメントには何も書いてないけど、
チェックされない例外やエラーが発生するかもしれないん?
closeは一番外側を閉じると、元まで伝播するんじゃなかったけ。
482:デフォルトの名無しさん
07/03/15 23:21:56
>>480はコードアシストやジャンプ機能だけがIDEの機能だと思っているバカ。
483:デフォルトの名無しさん
07/03/15 23:23:40
そんな基本的な機能まで放棄してテキストエディタかよって話だろ
484:475
07/03/15 23:28:41
>>482
VS様は(少なくとも個人で買える範囲では)最高の統合環境だと思います
それで何の話でしたっけ
485:デフォルトの名無しさん
07/03/15 23:29:03
まあ、NetBeansあたりを使ってWebアプリ開発やっていると
・Servletコンテナのインストール方法を知らなくて良い
・それどころか、Servletコンテナの存在すら意識しなくて良い
・Servletをweb.xmlへ設定する方法を知らなくて良い
・それどころか、web.xmlの存在すら意識しなくて良い
・webアプリケーションのデプロイ場所・ディレクトリ構成を知らなくて良い。意識しなくて良い
・実行時クラスパス・ビルド時クラスパスを意識しなくて良い
・ソースディレクトリとデプロイ先ディレクトリが違うことを意識しなくて良い
等々のメリットだかデメリットだかが得られるわけだが、
どうなっているのか知らずに作業できる全自動ロボットという見方も出来るかもね。
486:デフォルトの名無しさん
07/03/15 23:30:21
自分の目的に合ったものを探せばいいと思うよ
487:デフォルトの名無しさん
07/03/15 23:30:32
>君の言う「本当の」プログラミングって何よ?
誰か「本当の」プログラミング なんて話してるのか?
488:デフォルトの名無しさん
07/03/15 23:33:23
俺、真のスーパープログラマーになるんだ!!!11
489:デフォルトの名無しさん
07/03/15 23:34:35
本当のプログラミング(笑)ってなんだよ
490:デフォルトの名無しさん
07/03/15 23:37:15
>>488
Shiftキー離してるぞw
491:デフォルトの名無しさん
07/03/15 23:44:13
自動的にエンコード・デコードしてくれるテキストエディタなんて使ってると、
技術が退化するぞ。
バイナリエディタを使うんだ。
492:デフォルトの名無しさん
07/03/15 23:46:42
高級言語なんて使ってると、
技術が退化するぞ。
機械言語を使うんだ。
493:デフォルトの名無しさん
07/03/15 23:47:17
>>447
外側が閉じれないのに、内側を閉じちゃっていいん?
494:デフォルトの名無しさん
07/03/15 23:53:49
ソフトウェアなんて組んでいると、
技術が退化するぞ。
チップセットを自作するんだ。
495:デフォルトの名無しさん
07/03/15 23:54:37
それが>>480の言うところの「本当の」プログラミングかwww
496:デフォルトの名無しさん
07/03/15 23:55:19
いま洗濯物を干したところ。
そうなんだ。乾燥機がないんだよ。。。
497:デフォルトの名無しさん
07/03/16 00:00:07
PCのスペックにうるさいやつがいるのはわかるけど
全自動洗濯機の性能評価とかいちいちするやついるんだな
JBuilderほどひどくなければ何でもいいだろ
498:デフォルトの名無しさん
07/03/16 00:01:39
全自動洗濯機しか使えない奴は、洗濯物の干し方を知らないからな。
壊れたときに途方に暮れる。
ちゃんとシワ伸ばしたか?
色物は裏返したか?
型くずれする物をハンガーに掛けたりしてないか?
499:デフォルトの名無しさん
07/03/16 00:02:12
JBuilderのどこがひどい?
eclipseとかNetBeansよりよっぽど使いやすいけど。
ああ、eclipseベースにした新しいやつのこと?
500:デフォルトの名無しさん
07/03/16 00:02:34
>>497
価格.com あたりに行ってみ。
家電マニアという人種は意外と多い。
501:デフォルトの名無しさん
07/03/16 00:05:05
>>497
つ URLリンク(bbs.kakaku.com)
URLリンク(bbs.kakaku.com)
URLリンク(bbs.kakaku.com)
502:デフォルトの名無しさん
07/03/16 00:06:39
>>498
それはない。自動でやってくれない部分については人はおぼえるよ。
IDEがお客さんとメールのやりとりまで勝手にやってくれるようになったら
メールも打てなくなるかもねw
503:デフォルトの名無しさん
07/03/16 00:08:26
洗濯の初心者は、たまには洗濯板で洗ってみるのがいい。
504:デフォルトの名無しさん
07/03/16 00:10:17
kakaku.comのリンクを貼るのはロングテールを利用してるだけ。
実際は性能評価なんてしてるやつはゼロに近いだろ。
まわりの人間からトシちゃんのファンをみつけるのはほぼ不可能だけど
トシちゃんのディナーショーにいけばトシちゃんのファンばっかだぞ。
505:デフォルトの名無しさん
07/03/16 00:11:08
>>503
うおっ。洗濯板か。さすが2chだ。何でもありだな。
できれば板アド教えてプリーズ。
506:デフォルトの名無しさん
07/03/16 00:11:36
>>493
閉じていいかどうかは、内側による。
FileInputStream の場合は開きっぱなしだと、
他のファイル開く時に OS で開けるファイルの上限にひっかかったりとか、
後で FileOutputStream で同じファイルを開けなかったりする可能性もあるので放置しない方が良いかも。
今回のは InputStream だったけど、
例えば OutputStream とかで close() 呼んだら DB に commit する、
とか、そーゆー実装になってる場合は閉じたら拙いだろうし。
507:デフォルトの名無しさん
07/03/16 00:23:44
本当のプログラミングはこれからだ!
508:デフォルトの名無しさん
07/03/16 00:24:17
まわりの人間から家電マニアを見つけるのは
トシちゃんファンを見つけるよりもたやすい。
509:デフォルトの名無しさん
07/03/16 00:25:18
「ロングテール」言いたいだけちゃうかと
510:デフォルトの名無しさん
07/03/16 00:25:26
javaでjcomboboxで選択したものを表示させるにはどうしたらいいですか?
511:デフォルトの名無しさん
07/03/16 01:13:51
つ【やさしいJava本】
512:デフォルトの名無しさん
07/03/16 02:18:23
>>508
やっぱりモーターは日立だよな。
513:デフォルトの名無しさん
07/03/16 02:41:10
↓マブチとタミヤの争い
514:デフォルトの名無しさん
07/03/16 02:54:32
>>513
模型オタの俺がマジレスするとタミヤはモーターは作ってないよ。あくまでも模型の会社だから。
タミヤの強みは金型とかでしょ。逆に、マブチは小型モーターに強み。
家電のことは詳しくないけど、マブチやタミヤって家電に絡んでるのか?
515:デフォルトの名無しさん
07/03/16 02:57:11
クソスレであってもこーゆー>>514みたいなレスがあるのが2chの醍醐味だと思う。
516:デフォルトの名無しさん
07/03/16 03:05:10
クソなのはこのスレじゃなくてこの流れなんだが、
その点を除けば同意
517:デフォルトの名無しさん
07/03/16 06:36:34
つ【同意】(:D)| ̄|_ =3=3
518:デフォルトの名無しさん
07/03/16 10:05:20
>>512
日立は「モートル」だろ。
519:デフォルトの名無しさん
07/03/16 16:32:25
昨日の>461ですが皆様のお陰で解決しました。
どうもありがとうございました。
520:デフォルトの名無しさん
07/03/16 19:02:48
エラー:パッケージ javax.servlet.http は存在しません。
どうしたらいいですか?
Tomcat 6.0
java1.6.0
521:デフォルトの名無しさん
07/03/16 19:09:53
ググれ
522:デフォルトの名無しさん
07/03/16 19:24:13
>>519
結局、原因はなんだったんだ?
523:デフォルトの名無しさん
07/03/16 19:30:11
>>520
クラスパス確認すれ
524:デフォルトの名無しさん
07/03/16 19:31:20
>>520
コンパイル時なのか実行時なのかくらい書け。
環境もなるべく詳しく書け。
525:デフォルトの名無しさん
07/03/16 20:35:13
>>524
コンパイル時です
>>523
通ってませんでした
servlet.jarが入ってなかったので名前が似ているservlet-api.jarをJAVA_HOME/jre/lib/extに入れたのが原因でしょうか?
526:デフォルトの名無しさん
07/03/16 20:48:54
>>525
よほどのことが無い限り ext とかはいじらん方が良かれ。
開発環境は何使ってます?
Eclipse や NetBeans なら
ターゲットの実行環境(tomcat6)から適切な jar を参照するんで
その辺りの煩わしさは皆無ですよ。
(tomcat6 に対応してたかはちと自信なし。)
テキストエディタだけでガリガリやってるなら
javac する時のクラスパスに、
実行環境のライブラリをまとめて指定したら
コンパイルは通ると思う。
527:デフォルトの名無しさん
07/03/16 21:50:19
>>526
jcpad231を使ってプログラムを書いています
528:デフォルトの名無しさん
07/03/16 22:10:22
>>522 結局原因はHSQLDB側のコマンドライン?を2つ起動してなかった事が原因
です。Σ(´∀`;)ちんけな原因orz
529:デフォルトの名無しさん
07/03/16 22:13:37
>>526 ベータ版だけど最新のtomcatpluginならtomcat6使えますよ。
個人的にはtomcat5.5の方が良いです。
530:デフォルトの名無しさん
07/03/16 23:12:15
CSVファイルって空白のデータもありえますよね?
最終列が空白の場合、splitでできるString配列のlengthが
異なってしまい処理が煩雑になります。みなさんどうしてますか?
自分は下記のようなデータがあったとき、
1,音原田九郎,
2,渋井丸拓男,事故死
3,LIND L TAILOR,
//いったん最終列に空白を追加して最終列を認識させる
text = text+" ";
String[] splitArray = text.split( "," );
処理1( splitArray[0] );
処理2( splitArray[1] );
//追加した空白はtrimで消去してから処理する
処理3( splitArray[2].trim() );
こうしているのですが、もうちょっとスマートなやり方ないですか?
531:デフォルトの名無しさん
07/03/16 23:30:29
","つけるといいよ
532:じゅん
07/03/17 02:22:13
ネットを開いてお気に入りを開くとフォルダがあるのですが、隠しファイルにしてしまい消えてしまいました。もう一度表示させるにはどうすればよいのでしょうか(>_<)
533:デフォルトの名無しさん
07/03/17 02:44:52
コントロールパネル→ツール→フォルダオプション
で隠しファイルを表示する設定にできます。
その状態でお気に入りを開けば半透明のフォルダが
出てくるはずなんで、右クリックしてプロパティから
隠しファイルを解除してください。
534:デフォルトの名無しさん
07/03/17 02:47:13
それJavaなん?
535:デフォルトの名無しさん
07/03/17 02:47:45
>こうしているのですが、もうちょっとスマートなやり方ないですか?
末尾データが無いからとカンマを削る事がそもそもスマートじゃない
536:デフォルトの名無しさん
07/03/17 04:14:15
何の説明も無いまま空白を半角空白と空文字列の二つの意味で使ってることに驚く。
537:デフォルトの名無しさん
07/03/17 04:24:36
>>530
予め最大の列数が決まってるなら
String[] splitRecord(String record){
String[] splitted = record.split(",");
String[] result = new String[3];
System.arraycopy(splitted, 0, result, 0, splitted.length);
return result;
}
みたいな処理を通せば配列のサイズは統一される。
けれども、普通はクラスを定義して
CSVレコード1行からインスタンス1コを生成するファクトリメソッドを用意する。
そんなにも文字列で処理したい理由って何?
538:デフォルトの名無しさん
07/03/17 10:21:01
import java.io.*;
public class File {
public static void main(String[] args) {
try{
FileReader f = new FileReader("test.txt");
BufferedReader b = new BufferedReader(f);
String s;
while((s = b.readLine())!=null){
System.out.println(s);
}
}catch(Exception e){
System.out.println("ファイル読み込み失敗");
}
}
}
ここのソースのwhileの部分がすこし理解ができないので
教えてください。
539:デフォルトの名無しさん
07/03/17 10:24:48
s = b.readLine() は一行読んで代入
で、それが !=null の間だけ実行ってことは読み込めなくなったら終了ってこと
540:デフォルトの名無しさん
07/03/17 10:37:54
>>538
大雑把に言うと、b.readLineメソッドの戻り値がnullになるまで繰り返すんだけど、
その読み出した値を処理で使いたいからsに代入してる
541:デフォルトの名無しさん
07/03/17 10:46:23
理解できました!ありがとうございます。
また質問があります
Syouhizei syouhizei1 = new Syouhizei();
syouhizei1.a = 9600;
syouhizei1.b = 1.05;
syouhizei1.kakezan();
↓
class Syouhizei {
double a;
double b;
double c = a*b;
void kakezan()
{
System.out.println(c);
}
}
とやるとどうしても結果が0,0になってしまいます。
理由ががわからないので教えてもたらいたいです。
542:デフォルトの名無しさん
07/03/17 10:53:45
処理の順番を考えろ
543:デフォルトの名無しさん
07/03/17 10:54:15
>>541
cが計算されるのはSyouhizeiがインスタンス化されたときの一回だけ
syouhizei1.keisan()を呼び出す時点でa,bになにが設定されていても既にcは
初期値で計算済だから0.0が表示される、と。
それ以前にaやbを外部から直にいじるのはちょっといやだな
パラメータで渡そうよ。
544:デフォルトの名無しさん
07/03/17 11:07:28
順番が違っていたんですね、わかりやすく説明していただいて
ありがとうございました!
パラメータで渡したほうが見栄えがいいってことでしょうか?
545:≠543
07/03/17 11:14:44
>>544
見栄えっつーか安全性の問題
デバッグもしやすいしね
コンストラクタとか勉強汁
546:デフォルトの名無しさん
07/03/17 13:30:11
import java.io.*;
public class Kingaku {
public static void main(String[] args) {
try {
FileReader f = new FileReader("test01.txt");
BufferedReader b = new BufferedReader(f);
String s;
while((s = b.readLine())!=null){
String st[] = new String[4];
st[0] = s.substring(0,8);
st[1] = s.substring(9,13);
st[2] = s.substring(14,22);
st[3] = s.substring(23,31);
String t = st[2];
String t2 = st[3];
int nu = Integer.parseInt(t);
int nu2 = Integer.parseInt(t2);
int nu3 = (nu*nu2);
double nu4 = (nu3*1.05);
FileWriter fw = new FileWriter("test02.txt");
fw.write(st[0]+","+st[1]+","+nu4);
fw.close();
}
}catch(Exception e){
System.out.println("ファイル読み込み失敗");
}
}
}
入力ファイルに3行文字列がはいってるのですが
出力ファイルには3行目の文字列しか出力してくれません。
これを3行まるまる出力させるにはどうすればいいいのでしょうか?
547:デフォルトの名無しさん
07/03/17 13:42:32
buffer は怠惰だから flush しないと仕事を全うしない。
548:デフォルトの名無しさん
07/03/17 13:45:42
アホか。ループ内で毎回ファイルを開きなおしてるからだ。
549:デフォルトの名無しさん
07/03/17 13:48:18
>>546
斜め読みの脊髄反射で申し訳ないが fw.close()の前にfw.flush()
違ってたらすまん
ところで、try~catchをException一つで受けるのって乱暴じゃね?
せめてファイル入出力系、数値変換系、その他で分けないと問題起こったとき原因の
切り分けができんぞ
550:デフォルトの名無しさん
07/03/17 13:52:07
テストのために書くコードならよくやるなあ、めんどくさいし
551:デフォルトの名無しさん
07/03/17 13:53:48
>>549
Exception e の内容を表示すれば問題ないと思われ。
552:デフォルトの名無しさん
07/03/17 13:59:23
>>546
正しいこと言ってるのは>>548だけだからな。
553:デフォルトの名無しさん
07/03/17 14:18:47
対処法がわからないです…教えていただけないでしょうか?
554:デフォルトの名無しさん
07/03/17 14:26:54
めんどいから、これでいいじゃん
FileWriter fw = new FileWriter("test02.txt", true);
555:デフォルトの名無しさん
07/03/17 14:42:22
>>553
BufferedReader b = null ;
FileWriter fw = null;
try {
b = new BufferedReader(new FileReader("test01.txt"));
fw = new FileWriter("test02.txt");
String s;
while((s = b.readLine())!=null){
// 略
fw.write(st[0]+","+st[1]+","+nu4);
}
b.close();
b = null;
fw.close();
fw = null ;
}catch(Exception e){
System.out.println("ファイル読み込み失敗");
}finally{
try{if(b!=null)b.close()}catch(Exception e){}
try{if(fw!=null)fw.close()}catch(Exception e){}
}
Exceptionのハンドリングは適当だし、動作は確認してないぞ
556:デフォルトの名無しさん
07/03/17 14:49:32
>>554
ファイルがなかったらExceptionがThrowされなかったけ?
557:デフォルトの名無しさん
07/03/17 14:58:15
あそっか。じゃあ先頭にorg.apache.commons.io.FileUtils.touch("test02.txt")
かなんかで空ファイル作成追加
558:デフォルトの名無しさん
07/03/17 16:13:07
ものすごい勢いで本末転倒だなw
559:デフォルトの名無しさん
07/03/17 20:31:36
JMSの仕様について勉強できるサイトや本ってないですか?
できれば日本語で・・・。
オライリーのJavaメッセージサービスは所持してます。
560:デフォルトの名無しさん
07/03/17 20:43:49
クラスローダを独自に用意すれば、並行処理で同じstatic変数にアクセスしても値が違う
みたいなことが出来るのでしょうか?
561:デフォルトの名無しさん
07/03/17 20:51:40
>>559
仕様はSUNのAPI仕様読むのが一番じゃないでしょうか。
仕様そのものはシンプルでキレイだけど
実装によるクセが大きいので、勉強はそこそこに
実装の調査に入った方が良い気がします。
562:デフォルトの名無しさん
07/03/17 21:16:56
>561
利用する側でなく、JMSプロバイダを作る側なため、
仕様をきちんと理解してからでないときついかなと思った次第です。
オープンソースとか参考にするのがいいんですかねぇ・・・。
563:デフォルトの名無しさん
07/03/17 21:16:56
VISTAでJAVAは使えますか?
564:デフォルトの名無しさん
07/03/17 21:20:54
とりあえず使えます
565:デフォルトの名無しさん
07/03/17 21:31:18
>>562
であるならなおのことSpecification読むしかないのでは。
あれが最終にして完全(であるべき)ですから。
差しさわりがなければMQ作ることになった理由を聞かせて欲すぃ・・
566:デフォルトの名無しさん
07/03/17 21:39:02
> であるならなおのこと
おとこのこなら
に読めてしまったので眼科行ってくる
567:デフォルトの名無しさん
07/03/17 21:42:51
アッー!
568:デフォルトの名無しさん
07/03/18 14:13:19
SwingでBeanを編集するためのよいバインドツールみたいなものはありませんか?
569:デフォルトの名無しさん
07/03/18 14:36:53
仕事関係です。SOAという言葉が大好きな人がいまして・・・。
まあまだ作ると決まったわけではないんですが。
英語大嫌いなんでキツイ(;´Д`)
570:デフォルトの名無しさん
07/03/18 14:41:34
SOAと英語にどういう関係が、つーか誤爆か?
571:デフォルトの名無しさん
07/03/18 14:43:18
そあー大変だな
てか別に英語関係なくね?
572:デフォルトの名無しさん
07/03/18 14:45:12
URLリンク(kajuhome.com)を見てTomcatをセットアップしているのですが、起動時にはTomcatが起動していません。
起動後、コマンドラインから/etc/rc.d/init.d/tomcat5 start(中でcatalina.sh startを呼んでいます)で起動すると問題なく起動します。
catalina.outを見ると、停止時に
致命的: プロトコルハンドラの一時停止に失敗しました
java.net.SocketException: Network is unreachable
というエラーが出ています。また、起動時の表示を見ていると、上記のtomcat5より先にhttpdが起動しています。
上記URLには「必ずtomcat→apacheの順で起動すること」とありますので、ここも気になるところです。
以上二点、何かお気付きの点があれば御指摘ください。よろしくお願いします。ちなみに環境は
・CentOS 4.4
・jdk-1_5_0_11-linux-i586-rpm.binからインストールしたJDK1.5.0_11
・apache-tomcat-5.5.23.tar.gzから解凍したtomcat5.5.23
・jakarta-tomcat-connectors-jk2-2.0.4-src.tar.gzからmakeしたmod_jk2.0.4
です。他に必要な情報があれば御指摘ください。
573:デフォルトの名無しさん
07/03/18 15:09:04
>>572
CATALINA_HOMEとかが読まれてないんじゃないか?
しかし、/etc/profileを更新するとは強引だな
あと、jk2は終わってるぞ
574:デフォルトの名無しさん
07/03/18 15:23:40
JAVA勉強してるのですが、将来的にもLG3Dを取り敢えずインスコしといたほうがいいですか?それともBistaにしとく?
575:572
07/03/18 15:29:14
>CATALINA_HOMEとかが読まれてないんじゃないか?
>
>しかし、/etc/profileを更新するとは強引だな
解決策&お勧めの方法などありましたら、「ここを見ろ」でOKですのでご教授ください(;´∀`)
ちなみにmod_jkも試してみたのですが、まったく同じ問題が出たのでクリーンインストールしなおしたとです……。
576:デフォルトの名無しさん
07/03/18 15:32:46
今eclipseでdbを利用した簡単なアプリケーションを作っているのですが、
eclipseにhsql pluginを導入しました。しかし、
作ったアプリケーションをいざプラウザで表示しようとすると
HTTP????? 500 -
--------------------------------------------------------------------------------
type ??????
?????
?? The server encountered an internal error () that prevented it from fulfilling this request.
??
javax.servlet.ServletException: org.hsqldb.jdbcDriver
ってエラーが出るのですが。ちなみにDBへの接続は別のクラスがやるようになってます。
解決策分かる方、教えてください。お願いします。
577:デフォルトの名無しさん
07/03/18 15:41:48
その別クラスからのDBへの接続は大丈夫でした
578:569
07/03/18 15:56:03
>570-571
565への返信です。
SOA→JMSという流れらしくて・・・。
で、JMSの仕様書英語しかなさそうなんで面倒だなと。
579:デフォルトの名無しさん
07/03/18 15:57:47
ならまぁ、「SOAだから」じゃなくて単に英語苦手だからだな。
つ エール
580:デフォルトの名無しさん
07/03/18 16:01:17
>>576
スレリンク(tech板:771番)
581:デフォルトの名無しさん
07/03/18 16:13:55
今 Sun のサイトから
jdk-1_5_0_11-windows-i586-p.exe をダウンロードしてインストールしたのですが、
bin フォルダ内に javac コマンドがありません。
何か変更があったのですか?
javac に替わるコンパイルコマンドはどれでしょうか。
582:
07/03/18 16:26:28
キーボードから任意の数値nを入力させて、1からnまでの和を表示させるプログラムです。
たとえばnが7であれば、「1+2+3+4+5+6+7 = 28」という具合に表示させます。
本に載っている模範解答だと、この処理部分を
int sum = 0;
for (int i = 1; i <= n; i++) {
System.out.print(i + " + ");
sum += i; // sumにiを加える
}
System.out.println("= " + sum);
としているのですが、これだと「1+2+3+4+5+6+7+ = 28」になって、最後の余計な"+"が入っちゃうと思うんです。
そこで、この処理部分を
int sum = 0;
for (int i = 1; i <= n; i++){
if (i != n){
sum += i;
System.out.print(i + "+");
}
else{
sum += i;
System.out.print(i);
}
}
System.out.println("=" + sum);
というふうに修正してみたんですが、これって一般的な方法と言えるんでしょうか?
583:デフォルトの名無しさん
07/03/18 16:30:10
Project Looking Glassに参加してる方は2chなんかにいないですよね?
584:デフォルトの名無しさん
07/03/18 16:41:17
仮に居たとしても会話したくないだろうな
585:581
07/03/18 17:05:34
JDK のインストールの後の JRE のインストール先を JDK と同じフォルダにしたため
bin が上書きされてしまっていました。
失礼ぶっこきました。
586:デフォルトの名無しさん
07/03/18 17:38:47
>>575
解決策はエスパーでもない限りわからん
スクリプトにechoでも埋め込んで確認するとかで調べるとかして原因を特定
お薦めは
URLリンク(ichimura.chi.its.hiroshima-cu.ac.jp)
の方法
ただし、内容は少し古いから適時読みかえること
jsvcのマニュアルも読んで適切にスクリプトを書き換えること
587:572
07/03/18 18:45:18
>>586
アドバイスありがとうございました。結論からいうと
>CATALINA_HOMEとかが読まれてないんじゃないか?
で大当たりでした。
/etc/rc.d/init.d/tomcat5の先頭にechoを入れると、起動時に環境変数まわりのエラーメッセージがドカンと表示されたので、
先頭に(/etc/profileとはまた別に、フルパス直書きで)環境変数を設定したところ、うまく起動できました。
また、念のためinit.dによる自動起動を停止し、/etc/rc.d/rc.localに記述する方法で明示的にtomcat→httpdと起動するようにしておきました。
大変助かりました。アドバイス、ありがとうございました。
588:デフォルトの名無しさん
07/03/18 22:02:10
>>587
RH系なら、起動スクリプトの「# chkconfig」の行に、起動する順番を書けばいいでしょ。
「linux chkconfig 順番」でググってみたら?とりあえず1件見つけてみた。
URLリンク(www.geocities.co.jp)
589:デフォルトの名無しさん
07/03/18 22:06:08
>>582
sum+=i;が重複してるからif-elseの外に出した方がいいな。
けどそれ以外はみんなそんな感じに書くと思うぞ。
逆に変態的な書き方があったらぜひ教えて欲しいもんだ。
590:デフォルトの名無しさん
07/03/18 22:12:10
for (int i = 1; i <= n; i++) {
sum += i;
System.out.print(i);
if (i != n) {
System.out.print("+");
}
}
591:デフォルトの名無しさん
07/03/18 22:19:27
java -jar foo.jar としたときにシステムプロパティ java.class.path って
確実に実行モジュールである foo.jar のみが表示されるのかな?
仕様や実行結果を見るにどうもそうらしいんだけど。
絶対パスならそのまま、相対パスなら user.dir を付加すれば Win32 のGetModulePath の代わりになる?
592:582
07/03/19 00:42:19
>>589-590
そうですね。その方がスマートですね。
ありがとうございました!
593:デフォルトの名無しさん
07/03/19 01:44:21
>>582
まぁ、あえて違う書き方をしたいと思ったら、
int sum = 1;
System.out.print(1);
for(int i = 2; i <= n; i++ ) {
sum += i;
System.out.print(i + "+");
}
System.out.print(" = " + sum);
ぐらいかな? あまりこういう書き方はしないと思うけど・・・。
594:デフォルトの名無しさん
07/03/19 01:45:29
ごめん間違った
> System.out.print(i + "+");
System.out.print(" +" + i);
に修正
595:デフォルトの名無しさん
07/03/19 02:16:02
>>589
普通に
for (int i = 1; i <= n; i++) {
sum += i;
System.out.print(i + (i != n ? " + " : " = "));
}
System.out.println(sum);
みたいなのを考えたけど、希望してるのならこんなの
for (int i = 1; i <= n; i++) {
System.out.print(i + " + ");
sum += i;
}
System.out.println("\b\b= " + sum);
596:デフォルトの名無しさん
07/03/19 09:22:24
>>595
\bとはマニアックな・・・。
けどこうしてみるとifもないしスマートに見えるな。
機会があれば使ってみよう。
597:デフォルトの名無しさん
07/03/19 14:01:53
開発はユニクソ?リヌクス?の方が多い?
598:572
07/03/19 15:25:20
>>588
フォロー、ありがとうございます。これでinit.dの下で管理できそうですね。
大変参考になりました。重ねて御礼申し上げます。
599:デフォルトの名無しさん
07/03/19 21:11:24
新人教育でJavaを教えることになりました
知らないやつを基準に変数からクラス、オブジェクトまで教えるのですが
これだとすでにJavaやプログラミングを知っている人が退屈してしまうので
そいつらむけの適当な自習課題を用意しようと思います。
(簡単なゲームとかメモ帳作成とか)
参考になりそうなページはないですか?
600:デフォルトの名無しさん
07/03/19 21:40:06
お前が作れよ
601:デフォルトの名無しさん
07/03/19 22:01:06
ゲームとかメモ帳ってGUI方面だろ。
Webアプリ作らせたほうが実用的かと。
602:デフォルトの名無しさん
07/03/19 22:24:57
Java知ってるやつにはDB使ったアプリを教えろ
603:デフォルトの名無しさん
07/03/19 22:29:40
>>601
知らないやつ基準ということなのでそういう人が大多数という前提だと、
新人研修の自習でWebアプリ作るほどの力があるならそのまま現場投入で
たたき上げた方がよほど本人及び会社の為ではないかと
604:603
07/03/19 22:50:47
あ、現場投入云々はあくまで技術者として、ね。
社会人としてどうとかはまた別の話。
605:デフォルトの名無しさん
07/03/19 22:59:07
>>599
URLリンク(java.cs.vt.edu)
の javax.media.sound.sampled 使った何か
606:1/2
07/03/20 00:17:04
import java.awt.*;
import java.awt.event.*;
class Awt10{
Frame frame;
Button button;
TextField text;
public Awt10(){
frame = new Frame( "フレーム" );
button = new Button( "クリックするとダイアログ表示" );
text = new TextField();
button.addActionListener( new ActionListener() {
public void actionPeformed(ActionEvent e){
new Dialog01( frame );
}
} );
frame.add( button, BorderLayout.NORTH );
frame.add( text, BorderLayout.SOUTH );
frame.pack();
frame.setVisible( true );
}
public static void main( String[] args ){
Awt10 awt10 = new Awt10();
}
}
607:1/2
07/03/20 00:21:12
class Dialog01{
Dialog dialog;
public Dialog01( Frame frame ){
dialog = new Dialog( frame, "ダイアログ", true );
Label label = new Label( "ラベル" );
dialog.add( label );
dialog.pack();
dialog.setVisible( true );
}
}
これでコンパイルすると、
Awt10.java:15: <anonymous Awt10$1> は abstract でなく、java.awt.event.ActionList
ener 内の abstract メソッド actionPerformed(java.awt.event.ActionEvent) をオーバ
ーライドしません。
public void actionPeformed(ActionEvent e){
こういうエラーが出てきてしまいます。
javaの入門本のコードそのまま打ち込んでいるんですが、どうしたらいいんですか?
608:デフォルトの名無しさん
07/03/20 00:26:22
> actionPeformed
performed?
609:デフォルトの名無しさん
07/03/20 00:36:55
>>607
>class Awt10{
これ本当?コピペ間違ってない?
このソースであのエラーが出るとは思えんが…
610:デフォルトの名無しさん
07/03/20 00:40:10
うわーありがとうございました。
performedのスペルが間違ってました。恥ずかしい。
>>609さん
コピペは間違いはないと思います。。。
こういうエラー見たことなかったのでスペルちゃんと見てませんでした
611:609
07/03/20 00:49:21
すまん。勘違いだった(汗)
普段の自分のコーディングスタイルと違うので(と言い訳してみる)
612:デフォルトの名無しさん
07/03/20 10:26:06
*=ってどういう意味?
613:デフォルトの名無しさん
07/03/20 10:27:42
a = a * b; と a *= b; が同じ
614:デフォルトの名無しさん
07/03/20 10:38:18
さんくす。
615:デフォルトの名無しさん
07/03/20 11:38:00
a *= bってスタックに積む数が少ないから実行速度a = a * bより早いのかな?
616:デフォルトの名無しさん
07/03/20 11:44:40
>>615
> スタックに積む数が少ない
そもそも、この違いがない、はず。
617:デフォルトの名無しさん
07/03/20 12:44:50
単なる表記法の違いだよね…?
618:デフォルトの名無しさん
07/03/20 13:04:47
a #= b と a = a # b の違いは、aが評価される回数。
x[func()] += y; と x[func()] = x[func()] + y;
だとfunc()の性能によっては大きな速度差が出ることがあるし、
func()が副作用を持つ場合は動き自体が違う可能性もある。
619:デフォルトの名無しさん
07/03/20 13:18:13
a, b をメタ変数と考えるなw
620:デフォルトの名無しさん
07/03/20 14:37:53
完全なインタープリタならいざ知らず、バイトコードまではコンパイルしてるのだから
式の評価順の解析(スタックや逆ポーランドといった)はコンパイル時におわってる。
より短くコードを書くことを良しとしていたCの文法を受け継いでるだけだ。
621:デフォルトの名無しさん
07/03/20 16:16:30
>>620
要するにコンパイラが勝手に最適化するから気にするなでおk?
622:デフォルトの名無しさん
07/03/20 19:12:20
WebappClassLoaderをサーブレット側から手動で動かすにはどうしたらいいですか?
623:デフォルトの名無しさん
07/03/20 20:48:28
eclipseでワークスペース使ってコンソールから窓を開いて3DCGを表示するアプリ作ったのですが
それをアプレットに落とし込むにはどうしたらいいでしょか。
やり方教えて下しア
624:デフォルトの名無しさん
07/03/20 20:52:01
C/C++ だと _ で始まる名前や場所を問わず __ を含む名前はシステムで予約されてるけど、Javaではどうなん?
625:デフォルトの名無しさん
07/03/20 21:09:19
_については制限なし。
$も使えるが、機械生成されたものなど、用途を制限されている。
ただし、「それが望ましい」程度の縛り。
626:デフォルトの名無しさん
07/03/20 21:09:25
>>624
Character#isJavaIdentifierStart も Character#isJavaIdentifierPart も true を返すから '_' 自体は使える。
_ で始まる名前とか __ で始まる名前とかで、予約はされてないはず。
コーディング規約で使わないのを推奨してたか、は忘れた。
627:デフォルトの名無しさん
07/03/20 21:16:04
>>625-626
サンクス。自分でそんな名前を進んで使うつもりはないけど、
いま弄ってるソースでバンバンそんな名前が使われてたから気になってた。
628:デフォルトの名無しさん
07/03/20 21:41:28
>>617
どこにレスを付けるのか迷ったけど、ここにレス付けるわ。
例A
short x = 0;
int i = 123456;
x += i; // エラーなし
x = x+ i; // エラー 精度が落ちている可能性
例B
Object o = "Hoge";
String s = "Test";
o = o + s;// エラーなし
o += s; // エラー 互換性のない型
元ネタ 書籍「Java Puzzlers」
629:デフォルトの名無しさん
07/03/20 22:06:08
>x += i; // エラーなし
なんで?
630:デフォルトの名無しさん
07/03/20 22:18:46
JLS15.26.2を読んでみた。
前者は、複合代入演算
E1 op= E2
の意味するところは
E1 = E1 op E2
ではなく、
E1 = (T)(E1 op E2) // TはE1の型
すなわち、複合代入演算子は暗黙のうちに代入される側の方へのキャストを
行うというのがポイント。
後者は、複合代入演算子が使えるのはプリミティブ型/そのラッパー型、そして
+=については左辺がStringの場合のみ、文字列連結が行われる。
(右辺はどんな型でもよい)
631:デフォルトの名無しさん
07/03/20 22:22:58
>>629
例えば
byte b = 0;
b += 2; // 2 は int型
とかがコンパイルエラーになったらウザいでしょ。
632:デフォルトの名無しさん
07/03/20 23:34:47
JPanelにCanvasをはりつけてCanvasにイメージを描画しようと思ってます。
JPanel内に↓のようなMyCanvasクラスを定義してpaint()を実装しました。
private class MyCanvas extends Canvas {
public void paint(Graphics g) {
g.drawImage(resultImage, 0, 0, null); // resultImageはJPanelのインスタンス変数
}
}
JPanelでresultImageが変更されたときにmyCanvas.repaint()を呼んでいるのですが
Canvasのイメージが更新されません(一度、最小化して戻すと表示されてます)
再描画がうまくいってないようなのですがどのようにすればよいでしょうか。
633:デフォルトの名無しさん
07/03/20 23:39:03
- MyCanvasはCanvas(AWTコンポネント)を継承せず、代わりにJPanelを継承
- paintではなくpaintComponentをオーバーライド
でどうか?
634:デフォルトの名無しさん
07/03/20 23:51:18
アドバイスありがとうございます。
ただそれでもだめでした。
paintComponent()でSystem.out.println()やるとちゃんと表示されてるのでrepaint()で
メソッドは呼び出されてはいるようです。
ただはりつけたJPanelに表示はされません・・・
もとのパネル(MainPanel)では
setLayout(new BorderLayout());
imagePanel= new MyPanel();
add(imageCanvas, BorderLayout.CENTER);
ではりつけてます。
635:デフォルトの名無しさん
07/03/20 23:52:10
add(imagePanel, BorderLayout.CENTER)
の間違いでした
636:デフォルトの名無しさん
07/03/20 23:58:52
自己レスです
はりつけたMyPanelのpaintComponent()にsuper.repaint()を入れたらすぐ再描画されました。
貼り付け元のJPanelも再描画する必要があるってことでしょうか・・・
637:デフォルトの名無しさん
07/03/21 00:02:58
関係ないかもしれないけど、
paintComponentでsuper.paintComponentは呼んでる?
638:デフォルトの名無しさん
07/03/21 00:19:55
呼んでます・・・
JFrameの上にJPanelを貼り付けた場合は、paintComponent()ですぐ再描画されてたんですが、今度はJPanelの上にJPanelを貼り付けたからかと疑ってるんですが、関係ないかな。
639:デフォルトの名無しさん
07/03/21 00:25:58
超初心者です。
本を見ると
「swingはAWTと異なり、コンテンペインを取得し、そこにコンテンツを配置する。」
というように書いております。
で、そのとおりgetContentPane()してaddしたらもちろん上手くいきました。
流れとしてはこんな感じで。→new JFrame().getContentPane().add(new JPanel());
その後もしかしてと思って、
new JFrame.add(new JPanel())
ってやっても普通にうまくいきました。
コンテンツペインを取得する必要ってあるんでしょうか?
640:デフォルトの名無しさん
07/03/21 00:35:17
>>638
自己レスですが
g.drawImage(resultImage, 0, 0, this);
で解決したようです。null->thisにしました。
641:デフォルトの名無しさん
07/03/21 00:37:44
>>639
最近のJFrameでは不要。必要に応じて内部でgetContentPane()した先に
要求をたらい回ししてくれる。
642:デフォルトの名無しさん
07/03/21 00:41:07
URLリンク(java.sun.com)
URLリンク(bugs.sun.com)
だな。
643:639
07/03/21 00:48:04
おお、、ありがとうございます。
getContentPane()は面倒だけどswingの構造を理解するのに役立ってたので
ちょっと複雑な気分です。
644:デフォルトの名無しさん
07/03/21 13:28:38
jarファイルからカレントディレクトリにある任意のJDBCドライバを読み込ませるようにしたいのですが、
MANIFESTのクラスパスには何と記述すればよいのでしょうか?
.や*.jarでは認識しませんでした。
直接名前指定 or jre/lib/extにドライバを格納するしかないのでしょうか?
645:デフォルトの名無しさん
07/03/21 13:39:51
記述部さらしてみ
646:644
07/03/21 13:49:58
Manifest-Version: 1.0
省略
Class-Path: *.jar xxxx.jar xxxx.jar
Manifest-Version: 1.0
省略
Class-Path: . xxxx.jar xxxx.jar
という感じです。記述の仕方に問題ありますか?
647:ひょこたんだお(^ω^ ◆E9k1wjKgHI
07/03/21 16:21:36
ごめんなすm(^ω^#)m
static Class forName(String className)
の使い方がわかんなひ(;ω;)おっおっお
簡単なソースをいくつかキボンヌッ
(#^ω^)ノたのんだうお
648:デフォルトの名無しさん
07/03/21 16:43:35
>>644
必要なものを明示的に指定するという観点から、
ワイルドカードは使えないんじゃないのかねぇ。
URLリンク(java.sun.com)
使えるとは書いてない。使えないとも書いてない。
649:デフォルトの名無しさん
07/03/22 03:33:29
>>647
ここの
URLリンク(blog.goo.ne.jp)
Mainクラスがいっぱいの時
にソースがあった。
650:デフォルトの名無しさん
07/03/22 10:34:01
独学で苦戦している超初心者です。
自分でもいろいろ調べてみたのですが、困り果てて皆さんのお力に頼ることになりました。
今、コマンドラインに数字を一行で 10,24,35,40 のような形で入力させてそれぞれの数字を表示させるものを作っているのですが、コンパイルをして実行までは出来るのですが、数字を入力したあとにエラーが出ます。
エラーメッセージをググってみたのですが、検索には引っかかるものの「これだ!」というものが見つからなかったのでココに質問させていただきました。
以下にコードの一部とエラーメッセージを記載します。
public static void main(String[] args) throws IOException {
int input[];
System.out.println("数列はカンマ区切りの文字列で入力してください。");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String numbers[] = str.split(",");
int i=0;
input = new int[i];
while(i < numbers.length){
input[i] = Integer.parseInt(numbers[i]);
System.out.println(i + "つめは" + input[i]+ "です。");
i++;
}
}
以下エラーです。
java.lang.ArrayIndexOutOfBoundsException: 0
at Test.main(Test.java:28)
Exception in thread "main"
*ココでいう28というのがコードの28行目であれば
input[i] = Integer.parseInt(numbers[i]);が28行目にあたります。
どなたか、お助けください。
651:デフォルトの名無しさん
07/03/22 10:39:17
> int i=0;
> input = new int[i];
だれが見てもここだ
652:デフォルトの名無しさん
07/03/22 10:40:31
>650
右辺の numbers[i] ではなく、恐らく input[i] から出ている例外かと。
int i=0;
input = new int[i];
この時点で input[] の要素数はゼロになっているが
それ以降 input[] の要素数を増やしていない以上 input[] の要素数はゼロのままだ。
input = new int[i];
を
input = new int[numbers.length];
にしてみたら?
653:650
07/03/22 11:07:57
>>652
どうもありがとうございます!解決しました!
答えだけでなく、どこがどのように間違っているかまで答えていただいて
大変勉強になりました。
654:デフォルトの名無しさん
07/03/22 13:47:44
これってどうよ?
URLリンク(ja.wikibooks.org)
655:デフォルトの名無しさん
07/03/22 14:13:36
>>654
個人的には、「Javaをはじめよう」以下は要らないような気もする。
char が -32768~32767になってたり、
「リファレンス型というのは、クラスのことです」とか、間違いもちらほらあるし。
文法とかは、JLS へのリンク貼って終わりで良いとか、
入門者用のコンパイル手順を示すんなら、テキストでやるより
flash movie とかでやった方が親切なんじゃないか、と思ったり思わなかったり。
wikibook に flash 置けるのか知らんけど。
656:デフォルトの名無しさん
07/03/22 15:35:54
>>514
おやおや? Java家電時代の到来か?
将来は、Javaで家電制御を企んでいるのかねー? Jiniかねー?
657:デフォルトの名無しさん
07/03/22 17:43:49
まずはおいしいご飯からお願いします
658:デフォルトの名無しさん
07/03/22 17:45:39
すみませんが、質問です。
HttpServlet のソースコードは、どのソフトに含まれているのでしょうか?
たぶんTomcatにあるのだろうと思っていたのですが、うまく見つけられません。
利用中のTomcat は4.1です。
659:デフォルトの名無しさん
07/03/22 17:59:27
質問です。
HTTP Get のクエリ文字列から、パラメータ名とその値の組み合わせの集合を取
得するには、どうしたらいいでしょう?
660:デフォルトの名無しさん
07/03/22 18:18:15
>>658
classならcommon/lib/servlet-api.jarの中。ソースは入ってないよ。
661:658
07/03/22 18:37:21
>>660
> classならcommon/lib/servlet-api.jarの中。ソースは入ってないよ。
ありがとうございます。ソースはどこで手に入るのでしょうか?
オープンソースですから、どこかで配布はしているはずなのですが。
実は>>659も私なのですが、以下の処理の参考にしたかったのです。
目的:URL文字列からクエリパラメータを手動で取り出す
URL文字列を与えられて、
String url = "URLリンク(www.youtube.com)
ここからクエリ文字列を取り出し、
String qstring = new URL(url).getQuery();
//qstring = "v=pd74BKx0x-w"
ここまではできるのですが、それをパラメータと値に分解する方法が分かりません。
正規表現などで愚直に分けるしかないのでしょうか?
何か既存のAPIがあるのではないかと思うのですが。
662:デフォルトの名無しさん
07/03/22 18:50:24
>何か既存のAPIがあるのではないかと思うのですが。
request.getParameter( "v" )で一発だ。
ソースではなくAPIドキュメントを利用するのがJavaでは普通。
URLリンク(sdc.sun.co.jp)
URLリンク(sdc.sun.co.jp)
663:658
07/03/22 19:06:03
>>662
ありがとうございます。
HttpServletRequestは与えられていなくて、ただURL文字列だけがあるのです。
だから「手動で」取り出す必要があります。
説明不足ですみません。
664:デフォルトの名無しさん
07/03/22 19:16:22
>>663
ほいっURLリンク(www.google.com)
?hl=ja&q=show:WeBMAMCdhTg:T67KRquB4ao:axPaDrtTH9s&sa=N
&ct=rd&cs_p=URLリンク(download.nextag.com)
tomcat/tomcat-5/v5.5.17/src/apache-tomcat-5.5.17-src.tar.gz
&cs_f=apache-tomcat-5.5.17-src/container/catalina/src/share/
org/apache/catalina/core/ApplicationHttpRequest.java
このvoid parseParameters()あたりから辿ってけばいんじゃね?
665:デフォルトの名無しさん
07/03/22 19:17:47
ソース tarballには入ってないの?
svnならURLリンク(svn.apache.org)
中は見てない。
666:658
07/03/22 20:20:55
>>664
ありがとうございます。どうやら↓のparseParameters()のようです。
これはどのjarファイルにあるのかなあ。
どうも探し方が分かりません。
URLリンク(src.opensolaris.org)
apache-tomcat-5.5.17-src/container/catalina/src/share/org/apache/
catalina/util/RequestUtil.java
>>665
> ソース tarballには入ってないの?
実装クラスは入っていますが、HttpServletRequest自体のソースは無いようです。
667:デフォルトの名無しさん
07/03/22 20:26:32
質問です。
server.xmlの<context>のreloadable属性が
falseかtrueかの情報を
クラスから取得する方法はありますか?
668:デフォルトの名無しさん
07/03/22 20:26:38
javax.servlet.http.HttpServletRequestはinterfaceだから、
ソース見ても実装情報はないよ。
669:658
07/03/22 20:36:56
>>668
> ソース見ても実装情報はないよ。
それはそうなのですが、ソースが無いと、Eclipseで追いづらいと思います。
なお、RequestUtil.class は catalina.jar に含まれていました。
publicクラスですが、一般ユーザが利用することが適切なのか、よく分かりません。
ところで、どのクラスがどのjarに含まれるのかを簡便に知るにはどうしたらい
いでしょう?
・1つ1つJarコマンドで表示
・拡張子をzipに変えて検索
・片端からEclipseのプロジェクトに組み込んでみる
これらよりもっといい方法はあるでしょうか?
670:デフォルトの名無しさん
07/03/22 20:45:49
>>669
Eclipseで追うだけなら、jadclipseを入れておくとソースがないものは
jadで逆コンパイルしたものを表示してくれたりする。
jar探しは、コマンドラインに苦痛を感じないヒトなので、
jar tfで探すかなー。Eclipseに組み込むのはいい方法だと思います。
671:デフォルトの名無しさん
07/03/22 21:42:42
String url = "URLリンク(foo.bar.com)
String[] params = url.substring(url.lastIndexOf('?')+1).split("[&=]");
これで{"a","b","x","y","foo","bar"}っていう配列ができる。
後は、配列の偶数と奇数で分けて適当に処理すればいけるだろ。
672:デフォルトの名無しさん
07/03/22 21:53:10
>>671
フラグメントがあったら最後の要素が "bar#hoge" みたいにならんか?
673:デフォルトの名無しさん
07/03/22 22:06:09
>>672
なるほど。じゃあこれでどだ。無理矢理1行。
String[] params = url.substring(url.lastIndexOf('?')+1, url.indexOf('#') > 0 ? url.indexOf('#') : url.length()).split("[&=]");
674:658
07/03/22 22:50:29
>>670
ありがとうございます。参考になります。
できたら配布元のサイトでドキュメント化してくれていたら楽なのですが。
>>671-673
標準のAPIには存在しないらしいので、自分もそれなりに書いてみました。
String url = "URLリンク(www.youtube.com)
String q = new URL(url).getQuery();
Map<String, String> map = new HashMap<String, String>();
for (String pv : q.split("&")) {
String[] p = pv.split("=");
map.put(p[0], p[1]);
}
675:デフォルトの名無しさん
07/03/22 22:53:43
a=&x=yみたいに値がないパラメタがあったらうまくいかない気がする。
676:デフォルトの名無しさん
07/03/22 22:55:13
675は>>673ね。
>>674
たいていはそれでいいけど同じキーの値が複数あったらうまくいかないので注意。
677:デフォルトの名無しさん
07/03/22 22:58:46
パラメータ間の区切りに最近は;も使うので、汎用性から言ったらこれも認識する
とよい。
>>675のケースを回避するために、まず &(および; )だけで区切り、そののち=で
分解するといいだろう。
>>676を考慮するならmapの値側をコレクションクラスにする必要がある。
678:デフォルトの名無しさん
07/03/22 23:26:33
書式指定子について教えてください。
ある本で↓みたいなのがでてきたんですが、%が多くて何やってんのかよくわかりません。
System.out.printf(String.format("%%2d | %%%dd\n", n), r, x);
%dで10進数に変換。2は2桁の長さを表す。ということはわかったのですが、
引数に対して書式指定子がやたら多いような気が・・・
メソッドが入り子になってるからややこしいんでしょうか?
そもそもformat()の第2引数 n は何に変換されるんでしょう?
679:658
07/03/22 23:27:54
>>675氏のケースに対応
String[] p = pv.split("=");
↓
String[] p = pv.split("=", 2);
自分の用途には>>676氏のケースはなさそうなので、これで何とかなりそうです。
ありがとうございました。
680:デフォルトの名無しさん
07/03/22 23:35:52
%%が%そのものになるというのは理解してる?
順番に書くと、
String format = String.format("%%2d | %%%dd¥n", n);
System.out.printf(format, r, x);
たとえばnが5だと最終的には System.printf("%2d | %5d¥n", r, x) を行う。
# 一つ指摘しておくと、フォーマット指定として改行を記述するには¥n
# ではなく%nを使うべき。
681:デフォルトの名無しさん
07/03/23 01:30:23
すみません、XPathAPIを使って、以下のXMLから<media:thumbnail> のurl属性
を取得するには、どのようにXPathを記述したらいいでしょうか?
URLリンク(video.google.com)
(以下、抜粋)
<rss>
<channel>
<item>
<media:group>
<media:thumbnail
url="URLリンク(video.google.com)
c5ed681df175c4b0&offsetms=5000&itag=w320&lang=en&sigh=8GjvM1prox25GC-jte15jydXiAA"
width="320"
height="214" />
</media:group>
</item>
</channel>
</rss>
以下のページなどを参考にしているのですが、具体的な記述が無くて困っています。
URLリンク(msugai.fc2web.com)
682:デフォルトの名無しさん
07/03/23 02:18:50
java関係ないね。と言っても該当スレがここしか見当たらない。
スレリンク(tech板)l50
683:681
07/03/23 02:31:04
>>682
すみません、XPathAPIに固有の問題もあるかと思い、こちらで質問しました。
例えば、.NETならこんなページがありますが、
URLリンク(www.atmarkit.co.jp)
この内容(addNameSpace)はJavaでは使えないようです。
684:デフォルトの名無しさん
07/03/23 02:39:18
XmlNamespaceManager site:w3c.org
に該当するページが見つかりませんでした。
おや?
685:デフォルトの名無しさん
07/03/23 04:58:49
>>681
>どのようにXPathを記述したらいいでしょうか?
こういう事聞くレベルなら仕様を理解してない。実装されたAPI以前の問題。て言うかW3Cの仕様に対してMSの実装出してくるなんて釣りにしか見えないんだが・・・。
>XMLから<media:thumbnail> のurl属性
を取得する
ロケーションパスの書き方は分かるのか?
>>684
.NETのクラス名がw3cのページでヒットするわけ無いだろ。煽るならもっと頭使え。
googleくらい使えるようになろうな
xpath site:URLリンク(www.w3.org)
~~~~~~~~~~~~~~~~~~~~~~~~
686:681
07/03/23 05:12:15
すみません。
>>685
>
> こういう事聞くレベルなら仕様を理解してない。実装されたAPI以前の問題。
> て言うかW3Cの仕様に対してMSの実装出してくるなんて釣りにしか見えないん
> だが・・・。
おっしゃるとおり、よく理解しておりません。
> >XMLから<media:thumbnail> のurl属性
> を取得する
> ロケーションパスの書き方は分かるのか?
おそらく、
/rss/channel/item/media:group/media:thumbnail/@url
ではないかと思うのですが…。
687:681
07/03/23 05:18:48
追記です。
よく分かっていないのは、名前空間の扱いです。
.NETの実装を見て、JavaのXPathApiにも、addNameSpace にあたる関数があるの
だろうと考えたのですが、それを見つけられなくて困っていました。
688:デフォルトの名無しさん
07/03/23 09:54:40
>>685は、XmlNamespaceManagerなんぞw3c標準にないのに知るかよ!
という回答するつもりだった人からのピーデーの某氏へのイヤミです。
689:デフォルトの名無しさん
07/03/23 09:55:34
×という回答するつもりだった人からの
○という、回答するつもりだった人からの
「、」いっこ抜けて意味が変わってるしorz
690:デフォルトの名無しさん
07/03/23 12:06:23
ログを解析するアプリケーションを作りたいのですが、SwingやAWTで
UI部分を作り、エンジン部分をC言語で作る事は出来るのでしょうか?
出来る場合、JAVA側(UI)とC側(エンジン)とのやりとりはどのような
感じになるのでしょうか?
C言語は少し経験ありますが、JAVAはまったくの初心者です。
よろしくお願いします。
691:デフォルトの名無しさん
07/03/23 12:11:49
出来る。
やりとりはソケットを使う/JNIを使うなど。
692:デフォルトの名無しさん
07/03/23 12:15:33
>>691
即レスありがとうございます
その単語でぐぐったら期待通りのAPIがHITしました!
693:681
07/03/23 12:54:47
自己フォローです。
Java XPath API
URLリンク(www-06.ibm.com)
> しかし、pre という接頭辞を、URLリンク(www.example.com) という URI
> にマップする必要があります。NamespaceContext インターフェースが
> JDK(Java software development kit) や JAXP にデフォルトで実装されてい
> ないのは多少ばかげた話ですが、実際にないのです。
この後、記事は「名前空間マッピングクラスを自作する」ことになります。ど
うなってるの?何か意見の対立と混乱があるように見えます。
ちょっと使おうと思っただけなのに。弱りました。
694:デフォルトの名無しさん
07/03/23 13:05:58
PS3でFolding@homeが利用可能になりました!
タンパク質解析プロジェクトFolding@homeで病気で苦しむ人達を救えるかも。
PS3でFolding@homeしようぜ(Team 2ch)
スレリンク(ghard板)
チーム番号:162
チーム名:Team 2ch
URLリンク(fah-web.stanford.edu)
☆PS3での参加方法
PS3からFolding@homeを起動し、チーム番号162に入力すればOK。
ユーザ名は何でも良いが、URLリンク(folding.stanford.edu)
にて、名前が既に使われているかどうか確認する事を推奨。
参加の確認としては、「オプション(△)」→「関連サイト」→「チーム処理統計量」と開き、
「Team 2ch」(上記URLのページ)が表示されればちゃんと参加できている。
☆Folding@homeについて
URLリンク(folding.stanford.edu)
695:デフォルトの名無しさん
07/03/23 14:02:20
File#mkdirsが失敗した場合に
その原因を取得する方法ってありますか?
696:デフォルトの名無しさん
07/03/23 14:23:47
>>695
無いよ。
SecurityManager が許可しない場合だけは例外もらうから分かるけど。
mkdir() する前に、作ろうとするディレクトリが既に存在しても失敗するし、
同名ファイルがあってディレクトリ作れなくても失敗するし、
ディレクトリの名前が不正な場合 名前が長すぎたり名前に使えない文字が含まれたり でも失敗するし、
ファイルシステム上の権限がなくてディレクトリを作れなくても失敗する。