【初心者】Java質問・相談スレッド54【大歓迎】
1 :
デフォルトの名無しさん :
04/09/30 21:50:18
2 :
古代帝國富士皇朝総帥・伯壬旭 :04/09/30 21:52:38
よくぞ次スレを立てた。 ほめてつかわす。
3 :
デフォルトの名無しさん :04/09/30 21:52:38
2
4 :
デフォルトの名無しさん :04/09/30 21:53:29
惜しかった(。・_・。)
5 :
デフォルトの名無しさん :04/09/30 21:56:02
惜しかった。
8 :
デフォルトの名無しさん :04/09/30 22:08:34
J2SE5だと、こんなコードが可能に、、、。 public String printf(String format, String... args) なんかいやん。
新スレたったばっかりで恐縮ですが質問です。 Jpanelの上にpaintcomponentメソッドで図を描いていて,それをjpgで出力する メソッドを書いたのですが,実際実行すると非常に画質が悪いものが出力されてしまいます。 例えばある直線を書いてjpgで出力すると直線の周りに微小な斑点がついてたりとかで とにかく画質が悪いのです。 コードの概略は以下の通りです。 String curDir = "../image"; JFileChooser fileChooser = new JFileChooser(curDir); fileChooser.setFileFilter(new ImageFileFilter()); int ret = fileChooser.showDialog(content, "選択"); if (ret != JFileChooser.APPROVE_OPTION) return; File file = fileChooser.getSelectedFile(); String fileName = file.getAbsolutePath(); File outFile = new File(fileName + ".jpg"); try { canvas_image.getGraphics().drawImage(cakeImg, 0, 0, this); ImageIO.write(canvas_image, "jpg", outFile); } catch (IOException e) { } 基本的に画質を上げるには,どういう風に修正すれば良いのでしょうか?それとも 根本的なところが間違っているのでしょうか?
>>10 >例えばある直線を書いてjpgで出力すると直線の周りに微小な斑点がついてたりとかで
>とにかく画質が悪いのです。
普通 jpeg とはそういうものです。
pngだとキレイだよ
>>10 アニメ的な色の境目がはっきりしている絵は、pngやgifを使って
写真のような色の境目が滑らかな絵は、jpegを使うとよいですよ
ありがとうございます。確かにpngにすると画質がよくなりました。 ただ,上のコードの File outFile = new File(fileName + ".jpg"); ImageIO.write(canvas_image, "jpg", outFile); のjpgをpngにすると綺麗な画像が出力されたのですが、このjpgの部分を bmpやgifなどの画像用の拡張子へ変えるだけでそれに対応する画像ファイル が出力されるというのがちょっとしっくりこないのですが,そういうもの なのですかね?
>>10 対応形式はプラグインで増えるので
保存形式を文字列で指定するのは妥当かと。
あとImageWriterを取得して使えば
圧縮率とか細かく指定して保存できるはず。
16 :
デフォルトの名無しさん :04/10/01 01:02:10
Javaから呼び出して、実行できるスクリプトは無いですか? Luaみたいなのでお願いします。
17 :
デフォルトの名無しさん :04/10/01 01:22:04
今日、checkstyleってやつをインストールして、以下のようなクラスでテストしてみました。 public class Test { public static void main(String[] args) { ・・・ } public static void aaa() { ・・・ } } そしたら、warningで 「スタティックメソッドしかもたないユーティリティクラスは、インスタンス化されないために publicなデフォルトコンストラクタを持ってはいけないし、クラスはfinalにすべきだ」 って言われたんですけど、そういうもの? 継承したりしちゃいけないの?
jacl = Java版Tcl rhino = Java版JavaScript jython = Java版Python jruby = Java版Ruby pnuts = Javaをスクリプト化したもの groovy = Javaをスクリプト化したもの
>>17 継承したいならabstract指定すれば?
>17,19 「スタティックメソッドしか持たない」ユーティリティクラスを 継承したいという場面が思いつかないんだが、どんな場合?
>>20 テストクラスにスタティックイニシャライザを持った基本クラスを置いておくと
main 呼び出し前に自動的に共通の初期化処理が実行されて便利。
便利だからという理由(
>>21 の例では便利かどうかもあやしいが)
で継承してるんだったらやめたほうがいいよ。
>>18 BeanShell を忘れとるがな。他にもいっぱいありそうな予感。
25 :
デフォルトの名無しさん :04/10/01 08:47:01
>>21 それならmainの先頭に、そのユーティリティクラスのスタティック
イニシャライザ部分をメソッドにしたやつを呼び出せばいい訳で。
exteds UtilityClass
public static void main(..) { UtilityClass.initializer();
両方とも同じ一文を追加する事は変わらないから。。。
26 :
デフォルトの名無しさん :04/10/01 08:47:54
それならmainの先頭に、そのユーティリティクラスのスタティック イニシャライザ部分をメソッドにしたやつを呼び出せばいい訳で。 exteds UtilityClass public static void main(..) { UtilityClass.initializer(); 両方とも一行だけを追加する事には変わらないから。。。
OpenAMFやFlexなどのFLASHリモーティングに関する 情報って、どっかにありますか?
28 :
デフォルトの名無しさん :04/10/01 09:13:31
iアプリでも動作して、かつ、WinやLinuxでも動くアプリというかバイナリは作れまつか?
30 :
デフォルトの名無しさん :04/10/01 09:38:34
jdk入れたら、jreは不要でつか?
>>30 不要。
JDKインストール時にJREもインストールされる。
J2MEで作れば、全ての環境を制覇できまつか?
>>32 profileが細かく違うから制覇できない。
j2meの派生がj2seにしときゃ、制覇できたのにぃ。 S∪∩に抗議しる!
連載記事「スマートなサーバ・サイドJava」は読んでためになりまつか?
ならない。
>>19-22 ,25,26
ありがと。
で、
>>22 >便利だからという理由(
>>21 の例では便利かどうかもあやしいが)
>で継承してるんだったらやめたほうがいいよ。
この「便利かもしんないけど、やめたほうがよい」理由を知りたいというのが、
今回の質問の根本なんです。
できれば、教えてください。
39 :
デフォルトの名無しさん :04/10/01 14:56:19
>>38 クラス設計の根底に関わる問題だからです。
継承を用いる正しい基準に沿わないからと言えるでしょう。
継承は、インスタンスの機能を増やす為にこそ用いられるべきですので
インスタンスの操作が出来ないstaticメソッドonlyクラスでは
その意味が全く無くなるからです。
他にも、集約による多態性を実現する為にだけ継承を用いるのは良くない
など幾つかの制約基準があります。
まだ大きなプログラムを組んでないと、そこら辺の基準のありがたみが
なかなか分からないものですが、しばらくして大きなのを組むように
なり、いろいろクラス設計をしだせば、以前は便利だからとやってた事でも
なんか変な設計で気持ち悪いなって感じでやらなくなるものなのです。
40 :
デフォルトの名無しさん :04/10/01 15:03:29
>>38 「スタティックメソッドしかもたないユーティリティクラスは、インスタンス化されないために
publicなデフォルトコンストラクタを持ってはいけないし、クラスはfinalにすべきだ」
に関してはそうだと思う。
クラスというより、ライブラリの性質をもったモノを作ろうとしてるわけだから
インスタンス化して使うモノとは区別しておいたほうがプログラム構造上わかりやすいということ。
これは、継承クラスの使い方を気をつければ問題ないんだが、継承したクラスのインスタンス化を
禁止する書式がないため、 1.4まででは もし、機能拡張をするのであれば継承せず、
内部で参照(USE)するなりして実現するということで表現することになる。
昨日リリースされた、J2SE5.0ではこの問題を解決する StaticImportという機能が用意されている。
ttp://www5.airnet.ne.jp/sakuraba/java/laboratory/J2SE1.5/LangSpec/StaticImport/StaticImport.html スタティックメソッド(定数もOK)をインポートする機能です。
チェックしてみては?
>>39 そうそう、そういいたかった。
>>39 の言い方だと、 インスタンスに対する操作を拡張したくってするのが継承、
ライブラリの機能を拡張したくってつかうのが StaticImport。で、よろしい?
Seasar2とSpringの違いって何? できることとか文法とか、だいたいいっしょみたいなかんじが するんですが
43 :
sage :04/10/01 15:56:26
CSVをダウンロードするServletについてお聞きしたいことがあります。 Windows2000、IE5 SP3の環境で、 response.setContentType("application/x-csv"); response.setHeader("Content-Disposition", "attachment; fileName=\"" + fileName + "\""); 以上のように設定すると、ダウンロードダイアログで「ファイルを開く」を選択 すると、もう一度、ダウンロードダイアログが表示されます。 (さらに選択すると、正常にファイルが開かれる) ContentTypeにダミーの文字を入れ、Content-Dispositionをinlineにすれば、こ の問題は解消されましたが、 WindowsXP SP2の環境で、ダウンロードダイアログが表示されないという現象が 発生しました。 両環境で、一度だけ、ダウンロードダイアログを出したいのですが、良い解決策 があれば教えてください。
>>20 ええと、マジで良く分からんのだけど、static初期化ブロックのことをいってるんだろうけど、
これってクラスロード時に自動的に呼び出されるんだよねえ? しかもstaticメンバにしか
アクセスできない。
ということは、スーパークラスのstatic初期化ブロックが初期化できるのは、スーパークラス
のstatic変数のみってことだよな。
一方、staticメンバにアクセスする時って、継承していようがなんだろうが、「クラス.staticメンバ」
という形になるよな(staticインポートを使ってないとする)。この段階でクラスがロードされるので、
static初期化ブロックが実行されるよな。
で、継承するとこれより便利になるってのが良く分からないんだけど。おれがバカなのかな。
まじ分からない。
>>43 content-typeが間違ってる。
text/comma-separated-values
あと、サーブレットコンテナの設定でmimeにあるかどうかも確認。
>>43 あー、でも
>>46 のにしちゃうとDLダイアログが出ずにそのまま表示されるかも。
確実にDLダイアログだしたい場合は、
application/octet-stream
かなりスレ違いな質問ですが、どなたかご教授ください。 Hotmailのメール内URLをクリックすると、そのページに ちゃんと飛ぶ場合とそのまま開かない場合があります。 開かない場合のURL上にマウスを持っていくと、左下に 「javascript:OpenWin('http:・・・・・・・・」と表示されます。 たぶんこれが原因だと思うのですが、どう操作すれば元通りに なるのでしょうか?ちなみにyahooのメール内URLはちゃんと 開きます。よろしくお願いします。
>>47 Javaというキーワードだけで来ちゃったね。
左下にそうでるのは問題ないと思うけど・・・?
ポップアップブロッカーとかが悪さしてない?
早速の回答ありがとうございます!!
たぶんポップアップブロッカーが悪さしてるとは
思えないのですが、つい一昨日ぐらいまでは
普通にメール内URLをクリックすると、そのページに
ちゃんと飛んだのですが・・・ メールの送り主に
関係なく、メール内URL左下の表示が
「javascript:OpenWin('
http:// ・・・・・・・・」
ならば開かなく、(URLコピペでは開くのですが)
「
http:// ・・・・・・・・」
ならばちゃんと開く始末です。たまに左下表示が
前者のように表示される時があるので、
そのページにストレートに飛べなくて困ってます。
たぶんどれも後者になるようにすれば
問題ないのですが・・・ もう一度アドバイスお願いします。。
現在実行しているメソッド名を動的に取得したいのですが、 どうすれば実現できるのでしょうか? public void doSomthing() { System.out.println(何らかの処理); // doSomthingという出力を得たい } 例えば、Log4jなんかはlogメソッドを呼び出したクラスやメソッド名も 記録できますよね。その仕組みがどうなっているのか知りたいです。 Log4jのソースを見てみたのですが、該当箇所を見つけられませんでした。
52 :
デフォルトの名無しさん :04/10/01 20:06:12
>>51 StackTraceElement[] ste=new Throwable().getStackTrace();
ste[0].getMethodName();
53 :
デフォルトの名無しさん :04/10/01 20:08:21
>>51 new Throwable().getStackTrace()[0].getMehtodName();
で現在実行ポイントのメソッド名のStringが得られる
>>51 new Exception() して、getStackTrace() すれば StackTraceElement[] が取れる。
StackTraceElementからクラス名やメソッド名が取れる。
・・・やりたいこと違います?
>>52-54 ありがとうございます。
なるほど、そんな風にしてメソッド名を取得するんですね。
目から鱗です。
でも何となく new Throwable() は、例外をスローするみたいで使うのに
抵抗がありますね。別にスローするわけではないので問題はないと思いますが。
早速使ってみます。
56 :
デフォルトの名無しさん :04/10/01 20:37:07
AspectJでも同じ子とできるよ
57 :
デフォルトの名無しさん :04/10/01 21:07:59
AspectJまで持ち出す問題か?
>>52-54 ありがとうございます。
なるほど、そんな風にしてメソッド名を取得するんですね。
目から鱗です。
でも何となく new Throwable() は、例外をスローするみたいで使うのに
抵抗がありますね。別にスローするわけではないので問題はないと思いますが。
早速使ってみます。
ImageIconで生成したアイコンをウィンドウに表示させると思った大きさにできないんですけど これはパネルとかのLayoutが悪いんですか? 自由に大きさや配置に便利な命令はありますか?
ありがつお、試してみます
44でつ。
いまさらながら、参照先が間違ってるな....
>>17 の間違い。
java って activeX 使えますか? IEコンポーネント使ったアプリ作ろうかと 思ってるんですが、SWT 使ってIEコンポーネント 使うってできるんですか。 できなきゃ、おとなしくC#で作ろうかと思うんですが、 できれば java の勉強したいなぁ・・と。
SWT使うなら簡単。 SWT使わなくてもできなくはない。 しかしjavaの勉強するのにSWTやるのは無謀というか何というか。
65 :
デフォルトの名無しさん :04/10/02 02:43:35
>>39 ,40
丁寧な説明ありがとう。
「あ、そういうことか!」ってほど理解というか、しっくりきていないところが悔しいですが。
>>44 なんか、ちょっと観点が違うような・・・
とにかく、もうちょっと精進して出直してきます。
レスくれたみなさんありがとうございました。
>>66 GCJだとSWTと使わざるをえないわけだが・・・orz
みなさん、レスありがとうございます。
>>64 SWT 使えば簡単ですか。よかった。
java の勉強したいですが、C++ なら使えますし、
java でも簡単なプログラムなら作れますので、
一から始めるわけじゃないので、SWT で作ってみたいなぁと。
(だって、Swing で作ると見た目がカコワルイ)
>>66 Gecko のラッパですか。そりゃいいや。
「C#で作ろう」→「いやどうせならJavaでプラットフォーム非依存で」
→「いやIEコンポーネント自体がプラットフォーム依存だ・・・orz」
って感じだったんで、うれしい情報でした。
SWTはプラットフォーム依…
>>70 補足。SWTではBrowserというクラスがあり、これがブラウザの実装を隠蔽している。
実際に使われるブラウザは、WindowsならIEコンポーネント、LinuxならMozilla。
コード上は実装を意識せず書けた気がする。
>>72 BrowserウィジットはWindowsでもmozillaを使うことできるよ。
74 :
デフォルトの名無しさん :04/10/02 13:33:58
質問です。 public abstract class A public class B クラスAのことを「抽象クラス(abstract class)」というけど、 クラスBには何か名称が付いているんですか?
あえて言うなら具象クラスですかね
具象クラス、、、って言わない?
サウンドの終了を検知する方法が知りたいのですが どのような方法(又はクラス)があるのでしょうか? わかる方がおりましたら、なにとぞご教授お願いいたします。
80 :
デフォルトの名無しさん :04/10/02 14:19:23
グショぬらすでつか、、、、。
81 :
デフォルトの名無しさん :04/10/02 16:57:13
swingでwindowが他のwindow(swingの)に隠れないように設定するには どうしたらいいんですか? お願いします。
Swingで左クリックでポップアップを表示させたいのにやり方分かりません。 右クリックで出すサンプルはたくさんあるのですが、 どなたかご存知無いですか?
>>82 右クリックでのクリック判定の部分を左クリックの判定に変える。
84 :
デフォルトの名無しさん :04/10/02 19:10:20
以下のABCDというオブジェクトの配列を作りたいのですが、 ABCD abcd = new abcd[10]; という配列の宣言と、 ABCD abcd = new abcd(2); このようなコンストラクタを用いるのをあわせて、 ABCD abcd = new abcd[10](2); のようにはできないものでしょうか? クラスABCDは以下のとおりです。 class ABCD { double[] Weight; AAAA(int I) { Weight = new double[I]; } }
>>84 残念ながらできません。
そういう使い方が、多いのだったら、そういう初期化するstaticメソッドを用意していてもいいのでは?
class ABCD
{
double[] Weight;
AAAA(int I)
{
Weight = new double[I];
}
public static ABCD[] getInstances(int num,doublw w){
ABCD[] abcd = new ABCD[num];
for( int i=0;i<num;i++ )
{
abcd[i] = new ABCD[w];
}
return abcd;
}
}
で、ABCD abcd = new abcd[10](2); の代わりに、 ABCD[] abcd = ABCD.getInstances(10,2); とする。
86 :
デフォルトの名無しさん :04/10/02 19:24:29
アブストラクトの対義語ということで 「コンクリートクラス」というのはどうだろう。 なんか硬そうだ。メタルスライムくらいは倒せそうだ。
既出な質問くさいのですが、 なんでいきなり 5.0 なんでしょう? Sun の政治的な何か?
>>87 なんか 1.4 -> 1.5 だとマイナーバージョンアップっぽく見えるので
ずっと変化しそうに無い "1." を削って(?) 5.0 にしたらしい。
>>89 あーやっぱりそんな理由なのか。どもです。
>>86 釣られてみる。コンクリートクラスでメタルスライム倒した友達いるよ。
誰か「またオレ用語か」って言ってくれるの待ってるらしい。
ドキドキ。オレも待ってみる。
>>85 早速のお答えありがとうございます。
自分の書き込み見直したら変なところいっぱいあるのに、
ご親切に助言も下さりありがとうございました。
1.2なのにJava2と呼ばせたのをもっと徹底的にしたんだろ。 1.2->名前:Java2 バージョン:1.2 1.5->名前:Java5 ついでにバージョンも5.0
それがどんどん進んで2.0→20になるんだろうか… ちょっと大きすぎるね^^;
またオレ用語か
>>95 世にある専門用語は全てもともと俺用語だよ。
使っている内に認められるものさ。
ちなみにコンクリートクラスは、オブジェクト指向の世界で使われてる用語な。
>>86 すげえな。業界で使われてる言葉と同じだよ。センスあるねー
と漏れも釣られておく。
>>79 AudioClip使ってるの?
JavaSound使えるなら
Clip作ってaddLineListenerで終了のイベント拾えるよ。
Java1.1ならcom.sunパッケージでなんかあった気がする。
99 :
デフォルトの名無しさん :04/10/03 01:23:26
>>64 > しかしjavaの勉強するのにSWTやるのは無謀というか何というか。
すみません、ここのところをもう少し詳しく教えていただけないでしょうか。
>>99 やる気があれば大丈夫。逐一ここで聞きに来るような軟弱者でなければ。
>>93 > 1.5->名前:Java5 ついでにバージョンも5.0
JavaTM 2 Platform Standard Edition 5.0 Development Kit (JDK 5.0).
らしいので Java5 ではなく、Java2 のままですね。
102 :
44 :04/10/03 03:10:21
>>101 なるほど。参考になった。ありがとう。
しかしSUNの考え方はなんか複雑だな... 要するにJDKのバージョンナンバーが5.0ってことなんだね。
Java1.2->J2SE 1.2 (+JDK1.2)
Java1.5->J2SE 5.0 (+JDK5.0)
ってことでおK?
>>102 > Java1.2->J2SE 1.2 (+JDK1.2)
> Java1.5->J2SE 5.0 (+JDK5.0)
そもそも Java1.2 とか Java1.5 とかいう表記は Sun は
(少なくとも公式な製品名としては)使って無いと思われ。
J2SE 1.2 とか J2SE SDK 1.2 みたいな表記は使ってたけど
当時はわざと JDK 1.2 という表記はしてないかったと思う。
J2SE 1.4 および J2SE SDK 1.4 だったのが
J2SE 5.0 および J2SE JDK 5.0(これの略称が JDK 5.0(?)) になったみたい?
っつか、詳しい事聞きたいなら Sun にメール出して聞いてくれ。
>>103 漏れの記憶。
JDK -> J2SDK -> JDK。やっぱ長いのが嫌われたんでしょう。意味もよく分からないし。
Java言語的には、Java2( 1.2 )になった段階で大きく変わったということでバージョンアップ。
今回は JavaからJava2になったときほどポリシー変わっていないという姿勢なんでしょう。
でもマイナーバージョンアップというには大きい変更が入っているから
なんとかバージョンアップを目立たせたい、というか早く新しいバージョンをベースに物を作って欲しい、
そういう意図があって 5.0 と名づけたのでは?
javacの-sourceも1.4の変更のときは、デフォルト1.4じゃなかったのに、今回は 1.5がデフォルトになっている。
本当は、Java3とでもしたかったんだろうなぁ・・・
# Java2+ でなくてよかったと心底ホッとしているわけだが
取り合えず今度社内に残ってる元同僚に聞いとくよ。
> 今回は JavaからJava2になったときほどポリシー変わっていないという姿勢なんでしょう。 あんまし関係ないと思われ。 っつか、Java2 の 2 って殆ど意味ないしね。
>>104 > 取り合えず今度社内に残ってる元同僚に聞いとくよ。
ひょっとして Sun社員?
>>105 いや、すくなくとも Java2のときは後方互換性を確保していなかったはず。
今回は、Java2のクラスなら動くはずだから。
>>106 元な。
日本語APIリファレンスの誤訳をハケーンした場合はどこに連絡すべき?
>>107 後方互換性ってJDK1.1で作ったソフトがJ2SE1.2で動く、とかそーゆー話だよね。
MSJVM の拡張使ってたとかでなければ保証されてたと思うけど。
>>110 そりゃそうだよなぁ。ごめん。たぶん勘違い。
imcompatibility はあるけど互換性はあるって立場だったっけ?
113 :
44 :04/10/03 05:40:04
Java 1.1と1.2って、イベントモデルがばっさり変わったうえに、AWTのかわりに JFC/Swingが導入されたりとかなり大変なことになってたのは事実だな。 1.1と1.2はずいぶん違う。 5.0はコーディングの仕方が変わっただけといえばそれだけだしな。
はー、おれずっと名前欄にまちがって数字いれてた。orz 鬱だ
115 :
デフォルトの名無しさん :04/10/03 08:34:26
ダイアログを作成する際に、コンパイルするとコンストラクタの引数に対して 「ローカル変数xxxxxは内部クラスからアクセスされます。finalで宣言される必要があります。」 と表示されるのですが、どういう意味なのでしょうか? 参考書だとfinal付けなくても引数を使えてるみたいなのですが、このエラーの意味がよくわかりません。 よろしくおねがいします。
116 :
デフォルトの名無しさん :04/10/03 08:51:35
ServletからJSPにRequestスコープの変数を渡す方法が わからないのですが。 1.Servletでrequest.setAttribute("変数名", "hoge"); 2.ServletでrequestDispatcher.forward(request, response); 3.JSPでString str = (String) request.getAttribute("変数名"); とやってみたところ、strがnullになってしまいます。 何かほかに必要な手順があるのでしょうか? 環境はJ2EE1.3(Servlet2.3,JSP1.2)&Tomcat4.1.30です。 よろしくお願いします。
117 :
デフォルトの名無しさん :04/10/03 09:21:51
>>115 ローカル変数Aが内部クラスで使われるコードがある場合、その内部クラス
のコンストラクタ時に、新しい同型の変数領域が割り当てられて、そこに
ローカル変数Aの「値」自体がコピーされる形となる。
普通に考えれば、内部クラスからローカル変数をアクセスするのは不可能
なのだが、上記の様に「同じ値」(参照値ではない事に注意)をアクセス
させて実質的には同じ行為をしてると見せかける事によって、内部クラス
からのローカル変数アクセスを実現させている。
その為、内部クラスコンストラクタ時に、そのローカル変数Aはfinal
つまり不変宣言されてなければならない。
あと、>
>>115 の解決法は、その引数Aをfinal int B=A;などとして
Bを内部クラスからアクセスさせるようにすればOK
>>104 JAVA開発チームが仮に日本人だったら、JAVA2なんて無闇に2を
付けないだろうな。
アメリカ人ってなんでこういちいち性能UPを不必要なまでに誇示したがって
名称にゴテゴテ数字を付けたがるのかね?
シンプルさ、扱いやすさ、認識しやすさを重視する哲学が全くない。
なんか外にも種類があるのかって思わせて、混乱させるようなネーミングは
やめれ。
Seasar2なんていう国産DIコンテナがあるが...
120 :
デフォルトの名無しさん :04/10/03 12:21:25
す、すいません。 1.5をインストールして、それまでのコードをコンパイルしたら なんとコンパイルエラーが出てしまいました。 コンポーネントをコンストラクタする部分と、あとひどい所では String s="aaa" + "bbb" + "ccc" って感じのところです。何故なんでしょうか? 1.5って全然互換性がないのですか?
エラーメッセージすら書くつもりが無いなら(・∀・)カエレ!
5.0でだいぶC#に近くなりましたが パクった機能の多くはC#出現当時ぼろくそに批判してませんでしたか?
そりゃC#の*すべて*を批判してた馬鹿もいる。 だが有用な機能はどんどんパクったら良いだろ。言語の発展の歴史はパクリの歴史だ。 現に「catchしてなくて良い例外」とか「演算子オーバーロード」等の 有用でない機能(Javaにふさわしくない機能)は入ってない。他にもあるだろうな。
>>120 javac -source 1.4 -target 1.4 おまえのソースコード.java
125 :
デフォルトの名無しさん :04/10/03 12:44:32
>>123 でも、ほとんどのフレームワークで非検査例外を投げるようになってきてたり、throws Exceptionしてたりするけどね。
126 :
デフォルトの名無しさん :04/10/03 12:46:10
>>120 ちゃんとjava5のjavac使ってる?
>>122 俺は批判したのは、unsafeコードだけだったよ。
>>120 釣りかもしれんがコンパイル失敗するコード見てみたい。
コレクションあつかってるとこかもな。
よい機能はどんどんパクるべきだと思いますが、 シンプルな文法で安定した開発が可能って売りが消えつつありません? (馬鹿用言語と批判されるゆえんですが、私は優れた点だと思ってます)
129 :
デフォルトの名無しさん :04/10/03 12:54:49
>>127 釣りじゃないです。
今日の朝、怒って1.5を消してしまって、1.4を再インストール
してしまったので、エラーの詳細については後で書きます。
>>125 教えて欲しいのだが「ほとんどのフレームワーク」って例えばなに?
例外処理は難しいから、個人的にはその管理を放棄したくなる気持ちはわからんでもない。
しかしうまく使えばコードの信頼性を向上させることができるかもしれない。
個人的にはusingブロックが無いのは不満だし、演算子オーバーロードは絶対に取り入れて欲しくない。
一方ではGenericsを邪魔だと思う奴もいるだろう。
欲しい機能、迷惑な機能は人によって違う。
その中でJCPやらSunやらで検討した結果有用だと結論付けられた機能が
今回取り入れられたというだけ。
>>130 演算子オーバーロードは、ユーザーの自由定義は排除して
各クラスによる固定定義だけは、是非とも取り入れて欲しかった。
Stringには初めからあるんだし。
例えばコレクションクラス。[]演算子で要素を取り出せるようにして
欲しかったね。あとラッパーはオートボクシングで解決されたけど
それ以前の初めっから、算術演算子オーバーロードを付け加えて欲しかった。
132 :
115 :04/10/03 13:10:21
>>117 回答ありがとうございました。おかげさまで無事解決できました^^
分からなくて困っていたので大変助かりました^^
c[i]すると自動的に get/set 呼び出しに置き換えられるとかは欲しかったな。
134 :
デフォルトの名無しさん :04/10/03 13:13:21
>>131 コレクションでget()なんてほとんど使わないし
for文拡張だけで十分だと思うのだが
>>131 130の後半を読め。
こんな2chの初心者スレで個人的な好みで文法論議をしても始まらん。
せめて1.5スレか1.6スレでやれと。
136 :
デフォルトの名無しさん :04/10/03 13:28:44
>>130 strutsやSpringやSeasarなど。
例外処理は難しいというより、処理中で例外が発生した段階で対策がとりようがないものの方が多い。
だから、Strutsでエラー表示したり、AOPでロールバックしたりする。
ロジック内で例外処理をすることのほうが例外的。
動的に入出力先が変わるときとか、その程度じゃないか。
フレームワークでめんどうが見れることが前提であれば、個々のロジック内で例外処理ってあんまりする必要がなさげ。
投げる例外の種類が2〜3個程度のメソッドなら全部書いても良いけど、 そういうメソッドを何個か呼び出すようなメソッドでは5〜6個になっちゃうし、 その呼び出し元ではさらに・・・・ で結局どこかで握りつぶさないとthrowsだけで馬鹿みたいに行数とっちゃうんだよなぁ。 かといってthrows Exceptionじゃ旨さ半減だし。
139 :
デフォルトの名無しさん :04/10/03 13:45:33
>>137 にぎりつぶすんじゃなくて、非検査例外に変換して投げなおすんだよ。
141 :
でふぉるとのななしさん :04/10/03 17:38:14
J2SDK と J2EE の違いはなんですか?
>>141 実行・開発環境と、拡張ライブラリです。
>>142 後半が違う。J2EEはAPI仕様です。実装ではないのです。
J2SEというのは、これまた仕様です。SUNの実装が、J2SE SDKだったりします。
144 :
デフォルトの名無しさん :04/10/03 18:26:06
>>137 普通はレベルが異なる層ごとに例外クラスを定義するだろ。
5個も例外返すなんてのは設計が悪いだけ。
145 :
ジャズ紳士 ◆rHkT/SfI7A :04/10/03 19:38:52
SE5でコンパイルしたクラスを1.4.2とかで実行できるの?
>>145 コンパイル時にオプションで -source 1.4 -target 1.4 して、
J2SE 以降で追加されたクラス、フィールド、メソッドを使用しないか、
使用しても、それらが無い場合でも動くように考慮してコードを組めば実行できる。
147 :
ジャズ紳士 ◆rHkT/SfI7A :04/10/03 20:59:14
じゃあ拡張for文とかはだめなのか。 コンパイル時に平凡なfor文に書き換えてると思ってたよ>1.5
>>147 -source 1.5 -target 1.4 でいけるかと思ったけど駄目だった。
>javac: リリース 1.5 のソースにはリリース 1.5 のターゲットが必要です。
こんなん言われちゃった。
149 :
ジャズ紳士 ◆rHkT/SfI7A :04/10/03 21:46:22
>>148 わざわざサンクス。
回避方法考える楽しみができました
JTextAreaのテキストの文字色変えたいんですけど どうやるんですか? コンテナにいれてるんですがセットカラーが使えません。アプレットを継承しないとだめ?
なぜアプレットが出てくるんだ? APIみた?
はい、JTextAreaとContainerみましたが文字色を変えるのは無かった気が・・・
wikiのHP見させてもらって設定してみたんですが、 どうしてもできないです。 パス設定もしてテキストエディタでソースコードを作ってみても コマンドの使い方がわからないです。 教えてください
APIのマニュアルにはっきりかいてあるんだけどなぁ まったくわからないのならNetBEans立ち上げてみてプロパティをいろいろといじってみてごらん
150ですが自己解決しますた setForegroundでした。colorばっか探してマスタ
>>156 スタックトレースに行番号まで出てるもんだがな
すみません。表現が正確ではありませんでした。 「どのように直せば」でした。
どこでNullPointerExceptionが発生してるのかわかれば どの変数がnullになってるのかわかるだろうよ。 その変数がnullにならないように直すかnullになっても問題ないように直せ
>>156 見れないよ。
取り合えずスタックトレースのうち、自分の書いたクラスに関係する部分だけ抽出して張ってけろ。
それとそのトレースで示されている部分前後10行程度のコード。
儲かるように転がせば株で儲かるとかいってる成金みてる気分です。はい
>>163 お前はこの板には向いてないので、雑誌拾って100円で売る商売でもしてろ
Nullになっている変数が分かってる状態で、NullPointerExceptionを直すのに 「その変数に値が入るようにする」「nullでもエラーにならないように制御文を いれる」以外に解決法があるだろうか。 しかもソースがなんでか読めないし。
そこで NullObject パターンですよ。
>>167 うおっ、おれが予想だにしていなかった解答だ。その手があったか...
Exceptionとソースが見れれば10秒で解決するような気がするんだけどねぇ
>>170 それができないからこその「あきらめる」
質問です。 double の変数 d を四捨五入して long の変数 l に代入するにはどうしたら よいでしょうか? long l = (long) d; だと小数点以下が切り捨てられてしまいます。 丸め専用のメソッドがどこかにあると思ったのですが、見つからず、 現在のところ long l = new BigDecimal(d).divide(new BigDecimal(1.0), 0, BigDecimal.ROUND_HALF_EVEN).longValue(); という回りくどいやり方をしております。 こういうやり方が良い、というアドバイスがありましたらお教えください。
0.5足して切り捨てみたいな安易な方法じゃ駄目なのか?
>>172 四捨五入でいいなら
long l = (long)(d + 0.5d)
めちゃくちゃ勉強しはじめの初心者ですみません・・ public static void main(String args[]){ Circle myCircle = new Circle(3,3,2); Circle myCircle = new Circle(3,3,2,4); System.out.println("X座標=" + myCircle.getX()); System.out.println("Y座標=" + myCircle.getY()); System.out.println("円の面積=" + myCircle.areaCircle(int)); System.out.println("X座標=" + myCircle.getX()); System.out.println("Y座標=" + myCircle.getY()); System.out.println("楕円の面積=" + myCircle.areaCircle(int,int)); System.exit(0); }
class Circle{ int x; int y; double s; public int getX(){return x;} public int getY(){return y;} public void Circle(int initX,int initY){ x=initX; y=initY; } public double areaCircle(int r){ System.out.println("円の面積"); s=r*r*3; return s; } public double areaCircle(int a,int b){ System.out.println("楕円の面積"); s=a*b*3/4; return s; } } コンパイルすると1行目でclassまたはinterfaceがありません、とかいうエラーが出ます・・どこが間違っているんでしょうか?
>>176 mainメソッドもどこかのクラスに所属する必要がある。
class Circle{
...
}
の内側に入れればOKでしょう。
あ、あとコンストラクタ Circleに返り値定義はなし、 public void Circle(int initX,int initY){ -> public Circle(int initX,int initY){
>>176 とにかくめちゃくちゃです
まずHello worldをつくって理解しよう
>>176 Circle myCircle = new Circle(3,3,2);
Circle myCircle = new Circle(3,3,2,4);
同じ変数名を2回宣言している。2つめの変数は違う名前にしてあげよう。
コンストラクタの引数は(int, int)なのに3つも4つも渡してる。
2つだけにしてみよう。
System.out.println("円の面積=" + myCircle.areaCircle(int));
System.out.println("楕円の面積=" + myCircle.areaCircle(int,int));
areaCircleメソッドの引数に「int」を渡している。
「int」じゃなくて3とか4とか、実際の値を渡すようにしよう
あと円周率が3になってるけど、Math.PIっていう定数があるので使うといいかも。
ついでに楕円の面積は「長い軸」×「短い軸」×「円周率」
4で割る必要はないかも。
JAVAを使った株ロボットプログラムコンテスト
大会期間は1ヶ月。
優勝賞金としてあなたのロボットがあげた利益をそのまま獲得できます!
ユニークなロボットには特別賞も!
ふるってご参加ください。
ttp://www.kaburobo.jp/
出た!株ロボ!
186 :
デフォルトの名無しさん :04/10/05 02:09:00
質問です。入れ子クラスと内部クラスの包含関係って 入れ子クラス ⊃ 内部クラス ですよね? そして、 内部クラス ∋ {局所クラス、匿名クラス、非静的メンバクラス} となっていますよね? では、入れ子クラスであって内部クラスでないものをなんと呼ぶのか(どんなクラスがあるのか) 良く知られた名称を教えてください。
187 :
デフォルトの名無しさん :04/10/05 04:35:37
188 :
デフォルトの名無しさん :04/10/05 04:42:39
*メンバクラス 静的メンバクラス 非静的メンバクラス *インナークラス 非静的メンバクラス 局所クラス 匿名クラス *入れ子クラス 静的メンバクラス 非静的メンバクラス 局所クラス 匿名クラス 子&孫以下の全てのクラス
メソッドにつけるfinalはどんな意味なんでしょうか
>190 なるほどclassのfinalと同じって事ですね メソッドにstatic finalとか無意味・無駄・無理・無茶ですよね?解釈間違ってます?
>>191 abstract finalと勘違いしてないか
193 :
デフォルトの名無しさん :04/10/05 09:25:06
194 :
デフォルトの名無しさん :04/10/05 10:54:07
Javaの勉強をはじめて1週間↓の超初心者です。 SoftBank社の「やさしいJava第2版」のLesson6練習問題の 2の答えを教えてください…ヒントでもいいです… import java.io.*; class Rensyu2 { public static void main(String args[]) throws IOException { System.out.println("テストの点数を入力してください(0で終了)"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); do{ String nyuryoku = br.readLine(); res = Integer.parseInt(nyuryoku); for(goukei = 1; goukei <= res; goukei++) goukei += res; }while(res > 0); if(res == 0){ System.out.println("テストの合計点は" + goukei + "点です"); } }} 自分でも「明らかに違う」と思うのですけど どこをどう直したらいいのかわかりません… 繰り返しと、入力した数値を合計する方法がわからないです…お願いします。
>195 ありがとうございます。そっちに行きます。
すいません!!今研究で作ったJavaアプリケーションをApplet化しようとしてまして。。 とりあえずアプレットビューアでは動いたんです。 でもブラウザでは動きません。。。ブラウザの下のほうには「アプレット XXX notinited」と表示されています。 アプリケーションはローカルHDにあり、テキストファイルのデータを読み込んで動くようになっています。 うーん、これがいけないのでしょうか。何か分かる方がいらっしゃれば、どうか教えてくださいませ。
>>197 Javaコンソール出してスタックトレース見れ。
>>197 ブラウザが使用するJVMとクラスファイルのバージョン不整合かも知れないし
> アプリケーションはローカルHDにあり、テキストファイルのデータを読み込んで動くようになっています。
これかも知れない。
書き込みからわかるのはこれぐらい。
アプレットってローカルファイルとか扱うときはなんかセキュリティ関連のアレがナニじゃなかったっけ?
>>200 アプレット自体がローカルにあるなら、たぶん関係ないと思われ。
>>198-199 ご回答ありがとうございます。コンソールからコンパイルしてみました。
するとAppletのshow()というAPIが推奨されないという警告が出ました。
もうちょっと考えて見ます。
203 :
デフォルトの名無しさん :04/10/05 11:36:23
>>202 setVisible(true)にすればOK
>>203 ありがとうございます。setVisible(true)にすればエラーは出なくなりました。
でも状況は変わらないです。。プログラムがでかすぎるのかな?けどViewerだと動くし。。
考えて見ます。
>>197 あ、ブラウザの「ツール」からJavaコンソールが見えるんですね!!
最初のファイルが読み込めているんですが、その後エラーが起こっています。
java.security.AccessControlException: access denied (java.io.FilePermission IconImage/file.jpg read)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkRead(Unknown Source)
at sun.awt.SunToolkit.getImageFromHash(Unknown Source)
at sun.awt.SunToolkit.getImage(Unknown Source)
at javax.swing.ImageIcon.<init>(Unknown Source)
at javax.swing.ImageIcon.<init>(Unknown Source)
at OpePanel.<init>(OpePanel.java:103)
at SyncOperator.addFile(SyncOperator.java:99)
at ViewFrame.<init>(SomViewFrame.java:195)
at FuckinApplet.init(FuckinApplet.java:36)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
>>201 大嘘
>>205 ロカールファイルへのアプレットのアクセスは制限される。
制限は、 ${JAVA_HOME}/jre/lib/security/java.policy か、ホームディレクトリ下の .javapolicy の内容を
変更してアクセス権限を設定しないと駄目。
>>206 みたいですね。
java.policyにアプレットの制限をはずす以下を記述したのですが、同じです。。
permission java.security.AllPermission;
画像ファイルはローカルパスなのでこれかも?でもアクセス拒否エラーが出てるからパスはあってそうだし。。
難しいです。
>>205 jpg ファイルをアプレットの配置されたディレクトリか、そのサブディレクトリ、
もしくはアプレット を jar に固める際に jpg も一緒に固めろ。
そうすれば java.applet.Applet#getDocumentBase() や
java.applet.Applet#getCodeBase() が返す URL をちゃんと使用すれば取得できるだろ。
>>207 コンソールのスタックトレースはどうなってる?
セキュリティ以前に、-target指定しないでコンパイルしているにもかかわらず
ブラウザがデフォルトのVMを使うようになっているに一票。
>>207 ポリシー設定は下のように。しかし非常に危険。
>>208 の言うように固定的に使うリソースならば
archiveで指定するjarファイルのなかに入れてしまうのが安全。
grant {
permission java.security.AllPermission;
};
>>206 書き出しならともかく、読み込みアクセスなら
ローカルファイルへのアクセスを許すようにするのは下策。
>>208 ブラウザのVMのバージョンはeclipseでコンパイルしたものと同じです。うーん。
>>213 そうそう、アプレットのVMって、JDKの下じゃなくて Program Files\Java\jre... の下にあるやつですよ。
ポリシーファイルもそこのをいじらないと駄目です。
あ!!動きました!!
ブラウザのインターネットオプション詳細設定の所で、MicrosoftVMの所のチェックをはずしたら動きました。
でも、前にエラーが出てた画像ファイルはボタンに使用しているのですが、それらは表示されないですね。。
これらはパスがおかしいのかな?getCodeBase()とか付け足していないので。
ひとまず動いた!ってことで、私の質問に答えてくださった皆さんに感謝いたします。
また何かあれば報告させてください!
>>206 の方も言ってるように、これは下策のようなので。。
追加報告です。画像は絶対パスにすればOKでした!
>>216 絶対パスにすんなよ orz
アプレットにはしたけど web やイントラネットでも公開する気は全く無い、んだろうなぁ…
何のためにアプレットにしてんだか……
>>217 いや、公開するつもりです。とりあえず動作確認ということですので。
後はサーバの設定やら色々あると思うので後々考えます。
>>218 いや、ちょっと待て公開しても相手先のマシンに絶対パスで仕込んだファイルがないと動かないし
何より相手のマシンのポリシーファイルを変更しないと動かないようなアプレットは公開する意味がない。
こういうポリシーを変更して使うってのは非常に限られた用途なんだぞ。
公開するなら今からでも遅くない、クラスと一緒のjarファイルのリソースに含めなさい。
でないとまた問題がたくさん発生する、それも本質的でないものが、だ。
!= って一言で言ったらどういう意味ですか? 演算子多すぎて覚えきれねぇ(涙
>221 ありがd!
>>219 とりあえずローカル絶対パスではなく、URLを取得して動くようにしました。
ポリシーファイルの件はそうですね。jarファイルに含める際はアプレットのクラスと同じ階層に納めればよろしいのでしょうか?
ちょっと忙しく、調べられない状況なのでごめんなさい。
ネストって何?
Actionで同じアクションを持つ二つのアイテムで一つはアイコン付きで一つはアイコン無しで 作りたいのですがいい方法が浮かびません。助けて
>>225 AbstractActionのソースを参照
アイコン無しのAbstractAction作ってclone()して
action2.putValue(Action.SMALL_ICON, icon);
とか
えと、同じアクションをさせたいアイコン付きと無しの二つのアイテムが欲しいのです 今は同じActionからアイテム生成してるんで両方ともアイコンついちゃって。。。 別々のActionは作りたくないのでなんとか一つのActionで二つのアイテム作れないですか?
いや、やっぱりcloneじゃダメか Mapオブジェクトが共有されてしまう 普通に2つインスタンス作ってやってくれ
たびたびすまんぬ
230は無視してくれ
>>227 でいけると思う
片方はアイコン付きactionから生成して片方はアイテムを作成してからaddActionListener(action)にしますた こんな簡単な方法があったなんて!!
233 :
デフォルトの名無しさん :04/10/05 22:36:29
Listener系のクラスって無限ループ中でも割り込んで 呼び出ししたりできるの?
235 :
デフォルトの名無しさん :04/10/06 01:12:40
Calendarクラスのaddメソッドを使いたいと思っています。 Calendar の現在時刻から 5 日を引くには、以下のように呼び出します。 add(Calendar.DATE, -5) とリファレンスにありますが、コンパイルできません。 abstractメソッドになっています。 継承してオーバーライドしなきゃ使えないの?なんでー?!
GregorianCalendarかCalendar.getInstance()を使う
getInstance()してるか?
JavaのCalendarって、カレンダーというよりはカレンダー上の特定の時刻だよな。 絶対ネーミング間違ってるし設計的にもおかしい。 Dateのメソッドをdeprecatedにするより、CalendarとDateがもっと連携できるようにすべきだったんじゃなかろうか?
>>238 特定の時刻を扱うのはDateで、そこに暦の扱いを与えるのがCalendarだ。
設計的におかしいというのなら、もっとすっきり特定の時刻への暦の操作をロケールによって切り替える仕組みを提案してみてくれ。
238ではないがCalendarクラスが「暦法」と「暦法に基づく特定の時刻」の 両方の意味を持っているのはあまりいい設計ではないだろう。 例えばあるDateインスタンスから一ヶ月後のDateを計算したい場合現状では Date date1 = ...; // あるDate Calendar cal = Calendar.getInstance(); cal.setTime(date1); cal.add(Calendar.MONTH, 1); Date date2 = cal.getTime(); とかやらないといけないけど、本来は Date date1 = ...; // あるDate Calendar cal = Calendar.getInstance(); Date date2 = cal.add(date1, Calendar.MONTH, 1); のような感じであるべきじゃないのか?
1.5から導入されたOceanテーマですが、このテーマって背景色にグラデーション使ってますよね。 GradientPaintが使われるのかと思って調べたけどどうもわからんです。 あるボタンインスタンスだけだけ、自分の定義したグラデーションを適用したいってときは どうすればよいのでしょうか?
242 :
235 :04/10/06 05:59:25
ごめんなさい。情報がぬけてました。 実は携帯のiアプリを作ろうとしているので、その関係もあるのかなと思っています。 j2sdk1.4.2_05, DoJa3.5の環境です。 Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -5); とやっています。「 シンボルを解決できません。」となります。
243 :
デフォルトの名無しさん :04/10/06 08:49:47
アニメーションgifを一枚づつ Image オブジェクトとってきたり コマ時間をとってきたりするにはどうすりゃいいですか
244 :
デフォルトの名無しさん :04/10/06 09:17:51
Javaで書かれたPC並みのWebブラウザが出たそうでつが、 将来的にはiモードJavaは無視して良い、ということでつか?
なんでそんな素っ頓狂な発想に辿り着いたのか
246 :
デフォルトの名無しさん :04/10/06 10:18:55
>>243 javax.swing.imageio.ImageReaderクラスのread(int pageNo)で
一枚づつ取得できる。
しかし、各コマの相対座標は取得できないので、部分コマが
含まれてる場合は、どこかでライブラリを探しててくるか
自分でGIFフォーマットの読み取りルーチンを書くしかない。
そんな難しくないし。
コマ時間の取得は不可能。それに特に必要ない。
すいません。ポリシーファイルをクラスと一緒のjarファイルのリソースに含めるのってどうやるのでしょうか?
見ず知らずの第三者からポリシーファイルもらうっておかしいなって思わない?
>>248 確かにおかしいです。無理ですね。
なるほど、アクセスするデータはすべてJar内に入れてしまえって事ですね。ありがとうございます。
Jar内のデータにアクセスするのは何か必要なのですか?
昨日答えはもらってるだろ。
技術的なことを相談できるサイトって知りませんか?
今からJavaを勉強するにあたってオススメの本とかありますか? 現在、ソフトバンクの「やさしいJava」を使ってますが もう1冊くらい買おうかな…と思ってます。 もしオススメありましたら教えてください。
>>255 1冊で十分だ。
それに書いてあることをきっちり理解できるようになってから他の本に手を出すがいい。
>>256 熟練者が理解に苦しむような本であった場合は?
「やさしいJava」はじっくり読んできっちり理解するだけの価値がある本じゃないからなぁ。 文法の説明は載ってるけど、interfaceの記述がほとんどないし、ということはJavaの大切なことが書いてないということ。 もちろん、最初に読んでるのが良い本であれば一冊で充分で、それに書いてあることをきっちり理解して他の本に手を出すようにするというのもいいけど。 文法レベルの本として、おれは独習Javaくらいしかしらないけど、他にいい本ある?
改訂版Java言語プログラミングレッスンとかいいと思う。上下巻で2冊だけど。
>>259 Webの情報で十分。
というか、独習Java研修で持たされたが、まだ開いたのは片手で数えられるくらい。
あれって、どうなの?
持ってるなら自分で見て判断しろ
質問です。 java.util.Calendar のオブジェクトから java.sql.Date クラスの オブジェクトを取得するには、どうしたらよいでしょうか? 今のやり方を下に示しますが、どうにも回りくどいのです。 Calendar cal = Calendar.getInstance(); java.sql.Date date = new java.sql.Date(cal.getTime().getTime()); もうひとつ質問です。 java.util.Date と java.sql.Date が分かれているのはなぜでしょうか? 理由がまったく分かりません。java.util.Date 型のオブジェクトをそのまま プリペアドステートメントにセットできたら、とても楽なのに。 以上です。どなたかお願いいたします。
>>261 Webの情報で十分といえるほど慣れてる人じゃなければ、悪くない。
さすがに古いけど。
>>263 sqlのDate型は、日付のみをあらわすので意味が違うのです。
utilのDate型の名前がよくなかったのかもしれない。
>>263 >どうにも回りくどいのです。
回りくどいかなぁ・・・・?俺にはそうでもない。
267 :
デフォルトの名無しさん :04/10/06 16:53:06
J2SE5.0 SDKはまだかな・・・
>>267 ???先週から出て騒ぎはひと段落ついちゃってますが?
269 :
デフォルトの名無しさん :04/10/06 16:56:19
あっとしつれいjava.sqlね orz
>>263 SQLのミリ秒で表す時刻の基準とjava.util.Dateのミリ秒で表す時刻の基準が違うからのようだ。
皆様、いろいろありがとうございます。
これが特に煩雑になるのは、Calendar オブジェクトをプロパティして持つ
オブジェクトがあって、これを使ってプリペアドステートメントに値を入れようと
する場合などです。
//object.calendar が Calendar 型
pstatement.setDate(1, new java.sql.Date(object.calendar.getTime().getTime()));
setDate() のカッコの中に、さらにカッコが入って、ごちゃごちゃしていると思います。
せめてこう書けたら、まだ分かりやすいと思うのです。
pstatement.setDate(1, object.calendar.getTime().getTime());
java.util.Date が UNIX 時間の単なるラッパであることは分かるのですが、
java.sql.Date には、推奨されていないメソッドを除いて、わざわざクラスを新設
しなければならないほどの改変があるようには見えませんでした。
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/sql/Date.html しかし、
>>271 なるほど、Date.setTime()がオーバーライドされていますね。これがどうしても
必要だったようですね。よく分かりませんが。
訂正です。 せめてこう書けたら、まだ分かりやすいと思うのです。 × pstatement.setDate(1, object.calendar.getTime().getTime()); ○ pstatement.setDate(1, object.calendar.getTime()); あまり分かりやすくなっていませんでしたね。失礼しました。
私の学習本はBlackBookですね。 かなり愛想が無いのが欠点だけど、 あれはあれでそれなりに良いものだと思います。
Calendar cal = Calendar.getInstance(); java.sql.Date date = new java.sql.Date(cal.getTime().getTime()); と書くなら java.sql.Date date = new java.sql.Date(System.currentTimeMillis()); でもよさそう。
Dateはある瞬間を表すオブジェクトであって、
CalendarはDateを設定する操作クラス
だから日付はDateで持つべし。
と思ってるがどうよ?
>>263 はそもそも日付をCalendarで持ってるのが悪い。
DateをimmutableにしなかったSunは馬鹿
クラス名をDateTimeにしなかったSunはもっと馬鹿
と思ったら239が先に書いてたよ・・・
Calendarって任意の精度での切捨て(例:時刻を切り捨て 04/01 00:01 -> 04:01 00:00)とか 切り上げ(例:時刻を切り上げ 04/01 00:01 -> 04/01 00:00)って無いの? あと二つのCalendar(またはDate)の差を求めるとか。 すんごい不便なんだけどなんか見落としてるのかな・・・。
切り捨て →ない。素直に特定以下のフィールドに0を入れていくしかない。 ミリ秒とか忘れがち。 cal.set(year, month, 1, 0, 0, 0); cal.set(Calendar.MILLISECOND, 0); 差 →ない。 ミリ秒を取り出して差を取って86400000で割って日数差にしちゃって いいのかどうか。 どうせあっても微々たる物だが、閏秒とかどうなってたっけ?
>>281 閏秒は扱えないんじゃないかな。
データベースなんかはちゃんと閏秒を格納できる仕組みをもってるけど。
とりあえず内蔵クロックが閏秒が必要なほどの精度を持ってないという話。
>>279 切り捨て
org.apache.commons.lang.time.DateUtils#truncate
切り上げの例を間違って意味不明な文章になってたけどレスサンクス。 日付の比較をしたかったんだけど、Dateは時間も持ってるから、ちゃんと時間を切り捨て、切り上げしないと意図どおりの結果にならないんだよねぇ。 ってゆーか日付の管理ってムズいネ・・・。 10時までって言うと普通10時を含まないよね。 でも5日までって言うと5日を含むんだよね・・・。 1日から数えて3日目って言うと、1+3=4日じゃなくて3日なんだよ・・・。 (1日が1日目になる) ってゆーか日本語わかりにくいな・・・。
更に、NTPなどの自動時刻合わせ機能が動いてると、 目的の時刻を飛ばしちゃったりして、 いつまでたっても目的の時刻が訪れない罠。
>>263 もしそのobjectのクラスにメソッドを追加できるんだったら
public java.sql.Date getCalSqlDate() {
return new java.sql.Date(calender.getTimeInMillis());
}
とすれば pstatement.setDate(1, object.getCalSqlDate()); で済む?
Jtableクラスを引数にとって,その内容をExcelに出力するメソッドを 作りたいのですが,メソッドgetValueAtでtableの内容は取得できるのですが ヘッダー(class HeaderRendererに相当)の内容をStringで取得する方法が どうしてもわかりません。 getTableHeader() メソッドでJTableHeaderクラスを取得できても, JTableHeaderクラスのparamString()メソッドがprotectになってて 使えないのです。 良い方法はありませんでしょうか。
ん、HeaderRendererですか? JTable#getColumnName()とか、TableModel#getColumnName()とかで 得られるカラム名じゃなく?
>>287 paramString() って明らかに使い道が違うんだが javadoc は読んでるんだろうか。
JTable#getColumnName(int) では何か問題があるのだろうか。
>>277-278 本来は Date を使うべきなのでしょうが、日付単位でのインクリメントが
非常に多いので、Calendar を使う方が合理的だと判断しました。
>>280 そうすれば、確かに少しは見やすくなりますね。ありがとうございました。
>>286 私にメソッド作成の権限はありますので、その手段をとることは出来ます。
ただ、もし既存のメソッド、プロパティ等があるなら、それを知りたかったのです。
どうやら、それは
>>280 氏のもの以外ないということのようですが。
皆様、いろいろありがとうございました。
たしかにgetColumnNameメソッドを使うと,デフォルトのカラム名のA,B,Cが得られました。 ただ,Jtableのカラム名をA,B,C以外の文字列に変更しているJtableを引数に とった場合でもなぜか,A,B,C‥が返されてしまうのですがこの理由がわかりません。
カラム名の設定にはどういう方法をとっていますか?
>>292 class HeaderRendererの中で
setTextメソッドを使ってます
public Component getTableCellRendererComponent(
JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
if (column == 1) {
setText("X");
}
}
;
といった感じです
294 :
デフォルトの名無しさん :04/10/07 17:50:28
295 :
デフォルトの名無しさん :04/10/07 17:58:10
とりあえず文法をマスターした程度の初心者です。 (他言語の開発経験はほとんど皆無) 指定したニュースサイトに、指定した語句を含む記事がうpされたら、 それを収集するクローラーを作りたいのですが、難易度はいかほどのものでしょうか? もし参考になるサイトなどがありましたら、ご教授いただきたくよろしくお願いします。
くそ、また名前消し忘れた.... orz
299 :
デフォルトの名無しさん :04/10/07 19:34:46
>>295 難易度 10段階(10高〜1低)でレベル3
使用API java.lang, java.io, java.util, java.net
推奨参考 JAVA・APIリファレンス(java.doc)でも十分
300 :
295 :04/10/07 19:41:34
>>299 レベル3とのことなので、
初心者でも手が出せるかなと勝手に解釈し、チャレンジしてみます。
どうもありがとうございました。
レベル10がEclipseレベルだったりする罠
つうか、Java・APIリファレンス以外の、ネットを参照するアプリケーションの知識が必要だね。 利用するAPIが基本的なものだからといって、作るのが簡単なわけではないし。 それなりに難しいと思うで。
>>301 Eclipse?
ただのIDEのソフトの使いかただろ。
プログラミングとは関係無し。
>>293 えーと、TableModelについてひととおり勉強してくださいとしか。
305 :
294 :04/10/07 20:14:53
>>296 見たんですけどjavacがやっぱり使えません。
JAVA_HOME C:\j2sdk1.4.2_04
PATH %JAVA_HOME%\bin
CLASSPATH .;%JAVA_HOME%\lib\tools.jar
としたんですが何がいけないんでしょうか?
306 :
デフォルトの名無しさん :04/10/07 20:28:28
ADSLを使ってる場合、 ルータ : 192.168.0.1 PC : 192.168.0.2 のようになります。 しかし、外から見たプロバイダに割り当てられたグローバルアドレスは YahooBB2200460002**.bbtec.net(220.46.0.2**) のようになります。 で、InetAddressなどを使ってPCやルータのアドレスを取得しようとすると、やはり192.168.0.xとなってしまいます。 プロバイダから割り当てられたグローバルアドレスを取得するにはどうしたらいいのでしょうか?ご教授お願いしますm(_ _)m
プロンプトで echo %PATH% とやれば何かわかるかも
>>307 あ!Javaネットワークプログラミングってスレがあった・・・orz
そっちに逝きます。お邪魔しましたf^^;
echo off echo javac で何か表示されないかな?
指定されたjpgやgifファイル(illustratorで作成) からImageIconを作ろうと思ってるのですが たまに以下のエラーが出てしまいます。 sun.awt.image.ImageFormatException: Unsupported color conversion request at sun.awt.image.JPEGImageDecoder.readImage(Native Method) at sun.awt.image.JPEGImageDecoder.produceImage(Unknown Source) at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source) at sun.awt.image.ImageFetcher.fetchloop(Unknown Source) at sun.awt.image.ImageFetcher.run(Unknown Source) サポートしていない色を使ってるみたいなエラーのようですが, こういうエラーが発生せず,思ったとおりにImageIconをつくるために 注意すべき点などありますでしょうか
312 :
305 :04/10/07 21:07:42
誰か教えてくれないでしょうか?
>>312 原因がわかるまでは
C:\j2sdk1.4.2_04\bin\javac
でやってれば?
>305>312 %JAVA_HOME% は一体どうなってるの? ちゃんとインスコしたフォルダになってる? 書いてる通りなんだろけど、 echo %JAVA_HOME% してみそ。 それか、素直に>314サソの書いた通りに、フルパスで打ってみれ。 それでダメならインスコ失敗してるんじゃねーのか? とマジレスしてみる。
316 :
312 :04/10/07 22:32:15
>>314 コンパイルできました。
ありがとうございます。
>>315 %JAVA_HOME% は%JAVA_HOME% のままにしてます。
echo %JAVA_HOME% をしたら
C:\j2sdk1.4.2_04
と表示されました。
これでいいんでしょうか?
再起動したの?
Javaネットワークスレに行ったら過疎板になってて、こっちに誘導されました^^; プロバイダから割り当てられたアドレス(リモートアドレス)を調べる方法なんですけど、 色々調べた結果、サーブレットのgetRemoteAddr()メソッドを使えば取得できることがわかりました。 そこで、クライアント側はブラウザを使わないでJavaアプリケーションからサーブレットサーバに接続する方法ってありますか? できれば、TomcatやApacheなどの外部プログラムに依存したくないので、サーブレットを使用しない(CGIも使わない)サーバプログラムが理想です。 (まぁクライアント側のみでリモートアドレスがわかればそれに越したことはないんですが)
319 :
デフォルトの名無しさん :04/10/07 22:58:11
>>319 ん〜なんだろ。2000使ってる?オレもたまに環境変数がうまく認識されないときがあるんだよねぇ。
解決するまでの対応策として、バッチファイルを使って環境変数を一時的に設定する方法があるよ。
jdk.bat
set JAVA_HOME=C:\j2sdk1.4.2_04
set CLASSPATH=%CLASSPATH%;%JAVA_HOME%\lib\tools.jar
set PATH=%PATH%;%JAVA_HOME%\bin;
これをC:\jdk.batに保存したとする。次にコマンドプロンプトのショートカットをデスクトップなどに作成する。
そのショートカットのプロパティの「リンク先」の値が
%SystemRoot%\system32\cmd.exeとなってる事を確認。(XPだと違ってるかも)
これを、%SystemRoot%\system32\cmd.exe /k C:\jdk.bat と変更し、OKボタンを押す。
ショートカットからコマンドプロンプトを立ち上げると、普通にjavacが通るはず。
以降、javacを使うときはこのショートカットを利用すればいい。
まぁ別バージョンのJDKを共存させるための方法なんだけども、応急処置として。
321 :
319 :04/10/07 23:25:47
>>320 親切に詳しく教えてくださってありがとうございます。
OSはxpでホームエディションです。
最近OSの調子が悪いんで多分そのせいだと思います。
眠たくなったんで明日試してみます。
ありがとうございました。
>>306 YBB使っててそれは無いと思うけど。
自分の使ってるルータとYBBのモデムの間にもう一個ルータかPCか無い?
あるならそれのアドレスを取得すればいい。
てか、YBBならルータつかわずにハブでつなげばglobalIP直接使えるよ
323 :
デフォルトの名無しさん :04/10/08 00:14:21
Javaで透明色を指定して画像を表示するのはどうすればいいんでしょうか? 透明GIFではなく、普通の画像ファイルの特定色を指定して、その色が透明になる という風にしたいんです。 よろしくお願いします。
>>316 ,320
問題は、PATH環境変数じゃない?
環境変数の定義順によってはPATH設定時に
うまくJAVA_HOMEが定義されていないことがあるかもしれん。
PATHの定義は、%JAVA_HOME% を使わずにC:\j2sdk1.4.2_04 を埋め込んでミソ。
あと、そのCLASSPATHは定義しないこと。
com.sun.* パッケージをたたくとかしなければ必要ない。
>>322 YBBじゃなくても、他のプロバイダや、学内からでも使えるようにしたいんです。
ネットワークプログラムを作っているんですが、それをグローバル対応させたいんです。
>>325 まずはPATHをいじって動くようになるのを確認してからだろ、それは。
>>326 なにを作ろうとしているのか怪しいが、何でグローバルIPが必要なんだ?
Inboundのアクセスをさせるためだっていうんだったら、そのグローバルIPを知るだけじゃ駄目で
ファイアウォールで、Inboundなパケットを許可しないといけないんやけど・・・
# それを知らずにグローバル対応ってのは、技術的にちょいと怪しいなぁ・・・
ま、無駄かも知れんけどグローバルIPの取得方法を言っておく。
単体では無理、グローバルIPを持つ(もしくはグローバルIPで到達可能なマシン)が必要。
そのマシンに接続元のIPを返答するようなサービスを立ち上げておく、ま、HTTPで立ち上げておくのが楽か。
dynamic DNSの更新方法なんかの更新方法の応用かな。(逆か?)
>>328 >なにを作ろうとしているのか怪しいが、何でグローバルIPが必要なんだ?
グローバルIPを知らないと、クライアント側のリモートメソッドが呼び出せないからです。
>ファイアウォールで、Inboundなパケットを許可しないといけないんやけど・・・
クライアント側でファイアウォールの設定をさせるのはやむをえないと思っています。
やはりサーバを用意する必要があるんですね。
ソケット渡し(
ttp://www2s.biglobe.ne.jp/~cru/library/java/watasi.html )みたいにCGIを使えばなんとかなりそうなんですが、
サーバプログラムを移行しやすいように、CGIに依存しないでクライアントIPを取得できればいいのですが・・・。
現在ソケット通信で接続元のアドレスが取得できないか奮闘中です。
>>329 追加、ファイアウォール設定はクライアント側の設定というより
経路の設定が問題でしょう。
学内なんかプライベートIPで振られている端末に外からアクセスなんて普通無理だって。
よほどの馬鹿が設定してもプライベートIPを設定する脳みそがあればInboundのパケットは弾くって。
332 :
デフォルトの名無しさん :04/10/08 07:01:03
VPN(Virtual Private Network)とか、トンネリングとかで調べてみそ。 なんでもJavaでやればいいわけじゃなくて、こういう技術と組み合わせればいいのさ。
>>332 そいつがOKなんだったらだいぶらくなんだけなぁ。
>>329 がどういう状況なのかいまいちわからんし。
windowsクライアントが主ならPPP over SSHも調べとけ。金かからん上に、プロトコルの通過確率(?)も高い。
どうもシチュエーションが違うような気がするけどな。(サーバ/クライアント型のソフトではないような気がする・・・)
334 :
デフォルトの名無しさん :04/10/08 07:20:31
流れぶったぎってすいません。質問なのですが・・・ コンボボックスは1行に1つしか表示できないんでしょうか? 「▼」を押すと、例えば「001|山田」「002|佐藤」みたいな・・・ VBだと簡単にできるようですが、Javaだと複数列にできないんでしょうか。
>>327 > まずはPATHをいじって動くようになるのを確認してからだろ、それは。
わけわからんこというな。
JAVA_HOMEとPathが通ってるjava.exeバージョンが違ったらどうするんだよ。
「クライアント側のリモートメソッドが呼び出せない」ということは、サーバ側から、アクセス してきたクライアントのグローバルIPを知りたいってことだよね? そりゃServerSocketのaccept()が返すSocketに対してgetInetAddress()するだけだろ。 うちで2台のPCつかってやってみたら、ちゃんとクライアントのグローバルIP(実際には ルータに割り当てられてるやつ)が取得できたぞ。 192.168.*.*のアドレスが返ってくるのは、そりゃルータの内側でサーバをたてて、ルータの 内側のクライアントから接続して、InetAddressを処理してるからじゃないの? ルータの外側にサーバを置いてると、クライアントのアドレスを得ようとすると、ルータの グローバルIPしか得られんはずだ。NATとはそういうもん。接続に来てるのはルータなん だから。 実際にサーバから(ルータではなく)クライアントPCにアクセスするには、クライアント側で ルータにポートフォワード設定をしてもらう必要がある。RMIの使用ポートをクライアントPCに 振るように設定する。
>>330 そんなおいしいメソッドがあるなんて初めて知りましたw
ソケットはつい数時間前に勉強したばかりなのでわかんないコトが多くて・・・。
APIをちゃんと読むべきでしたねf^^;
>そのソケット接続をグローバルIP側から開始できないから問題なんじゃないのか?
ServerSocketを作成する際、ServerSocket(80, 100, InetAddress.getHostByName("YahooBB2200460002**.bbtec.net"));
のように、LAN内にあるPC(192.168.0.2)が、グローバルアドレス(Yahoo〜)でサーバソケットを作成しようとするとエラーが出ますね。
>>328 でおしゃったように、グローバルIPを割り当てられたPCを使えば解決しそうです。
338 :
デフォルトの名無しさん :04/10/08 09:38:18
>>323 BufferedImage imgの指定色myColorを透明色にする
int target=myColor.getRGB();
int alpha=target&0xffffff;
for(int y=0; y<img.getHeight(); ++y) {
for(int x=0; x<img.getWidth(); ++x) {
if(img.getRGB(x,y)==target) {
img.setRGB(x,y, alpha);
}
}
}
ただimgをImageIO.read()などでJPEGファイルからロードした場合は
imgがアルファバンドを持たないので、上記の処理の前に
imgをアルファバンドを持つBufferedImageに変換する作業が必要。
340 :
デフォルトの名無しさん :04/10/08 17:32:41
Class Path 内にあるテキストファイルを読み込むにはどうすればいいのでしょうか?
341 :
デフォルトの名無しさん :04/10/08 18:15:12
>>339 ありがとうございます。独自関数なんですね。
ComboBoxRendererは知ってたのですが、どうにもうまくいかなくて。
JDBCなのですよ。コンボボックスで値を選ぶとデータが表示・・・みたいな。
とりあえず悪戦苦闘しながら、試してみることにします。
>>340 Class#getResource(String)で
343 :
デフォルトの名無しさん :04/10/08 19:43:25
Javaで書かれたソース付きのWebアンテナってありませんか? ちょっと自分で機能をいじれるモノが欲しいと思いまして。 無いようなら自分で1から書いてみますが もし知っている人がいましたら、よろしくです。
Actionから作ったボタンを class btnAction AbstractAction{ public void actionPerformed(ActionEvent e){} で作ったんですけどこれを自分で呼び出すにはどうやればいいんですか? ボタンが押されないと絶対呼ばれない?
345 :
デフォルトの名無しさん :04/10/08 20:45:02
>>344 SwingUtilities#notifyActionで呼び出せる
>>344 ,345
深く考えずボタンを押すコードを書けばよい。
例えばJButonn#doClick()とか。
347 :
デフォルトの名無しさん :04/10/08 23:45:47
>>346 ボタンが押されてしまうとフォーカスが変わったりと、いろいろ
不都合が起こる。純粋にactionを呼び出さねばならない。
actionが呼び出せないんですけどどうやるのですか? actionにはKeyStroke, KeyEvent, Object , int とかいうのは 入ってないんですけど
すみません。SwingUtilities#notifyActionでの呼び出し方がわからないという事です registerKeyboardActionとかつかってないし KeyEventもまだつけてません。
350 :
デフォルトの名無しさん :04/10/09 00:33:08
>>349 SwingUtilities.notifyAction(任意のAction, null, null, null, 0);
とりあえずこれでやってみてください。エラーが出たらまた来てください。
NullPointerExceptionのエラーがでてしまいました。 SwingUtilities.notifyAction(Unknown Source)とかいっぱいでました
352 :
デフォルトの名無しさん :04/10/09 01:50:01
>>351 じゃあ、これなら上手くいきます。
actionがアナタの設定したActionオブジェクトで、buttonはそのActionを
つけたJButtonです。
KeyEvent ke=new KeyEvent(button, 0, 0, 0, 0, (char)0);
SwingUtilities.notifyAction(action, null, ke, this, 0);
KeyEventだけは設定する必要があるのです。
353 :
デフォルトの名無しさん :04/10/09 03:55:42
こんばんは。 標準APIを使って、簡単にHTMLページのリンクを抽出する方法ってないでしょうか? URLの配列を返してくれるメソッドとか。
標準APIじゃないとだめ?
うん。。
>>353 ページソース取得して、正規表現でゲットするしかないと思う
HttpUnitを使えば簡単なのに....
ありがとう
359 :
デフォルトの名無しさん :04/10/09 08:55:47
今日から○日昔の日付をjava.sql.Date型で取得したいです。 本日の日付は以下のようにして取得できるんですが、 これ以降がよくわかりません。どなたかよろしくお願いします。 Date today = Calendar.getInstance().getTime();
>>359 java.sql.Date today = new java.sql.Date(new java.util.Date().getTime());
361 :
359 :04/10/09 09:21:35
>>360 すいません、質問の仕方が悪かったですが、
わからないのはjava.util.Date型をjava.sql.Date型に
変更する方法ではなく、「5日前の日付を取得する方法」なんです。
Calendar#add で可能かと思ったんですが、
抽象クラスになっているので、そのままは使用できないのです。
どなたかよろしくお願いします。
Calendar cal = Calendar.getInstance().add( Calendar.DATE, -5); Date day = cal.getTime();
>>362 ありがとうございます。解決しました。
抽象メソッドの理解が足りませんでした。
精進します。。。
364 :
デフォルトの名無しさん :04/10/09 12:01:21
結果が何件返ってくるか分からないデータを格納するにはどうすれば 良いのですか? 例えばデータベースにselect * from hogeと問い合わせたとき。 Object[][] foo = new Object[?][?] ご教授ください。
>>364 どうやって受け取るつもりなんだお前は?
366 :
デフォルトの名無しさん :04/10/09 12:13:13
367 :
デフォルトの名無しさん :04/10/09 12:31:57
>>365 Class.forName("com.mysql.jdbc.Driver");
(中略)
Object[][] rowData = new Object[][];
int i=0;
while(rs.next()){
rowData[i][0] = rs.getString(1);
rowData[i][1] = rs.getString(2);
rowData[i][2] = rs.getString(3);
i++;
}
return rowData;
>>364 配列ではなくコレクションオブジェクト(ArrayListとか)を使う。ネット上で検索すれば
腐るほどサンプルが見つかると思うよ。
369 :
デフォルトの名無しさん :04/10/09 12:42:07
>>368 なるほど。勉強になりました。
ArrayListとVectorって何処が違うの?
BeanUtils使えばオシマイだな
スレ違いだがはっきりいって常識レベルだな
374 :
デフォルトの名無しさん :04/10/09 12:59:20
>>369 Vector:昔のJavaでも使えるが遅い。
ArrayList:Java2以降に追加。速い。
Class.forName("com.mysql.jdbc.Driver"); (中略) ArrayList list = new ArrayList(); while(rs.next()){ list.add(rs.getString(1)); list.add(rs.getString(2)); list.add(rs.getString(3)); } return list; これでおk?
>>369 ArrayListはスレッドセーフじゃない
>>375 もう勘弁してくれ
いいところつまみ食いしようとしないでちゃんと本読んで一から勉強してくれ
>>376 Vectorだってあんなもん同期してるとなんかとても言えないよ
1.2以降でVector使ってる奴は例外なくJavaもスレッドもわかってない奴。 スピードの問題でもない。
>>378 > 1.2以降でVector使ってる奴は例外なくJavaもスレッドもわかってない奴。
例外なくってのは全く根拠無いな。
ArrayList 使ってる奴の中にだってJavaもスレッドもわかってない奴はたくさんいるし。
馬鹿には一応 Vector 使わせとけ、というのはありだと思うが。
まあ、好きにすればいいじゃないか。 両方のソースを見比べてみればいいんだから。
失礼します…… 無職だめ板のプログラミングスレで、「Javaで何か作らない?」という話が出て 「Vixみたいの作れないかな」とカキコしたら プゲラされてしまったのでつが どの辺がプゲラなのかさっぱり分かりません。 どなたかご指摘頂けないでしょうか? // ちなみに、性能上同等のものを作るとかではなく、 // 単にJavaの勉強するのに何か目標が欲しいよね、という話です。
自分で作って黙らせろ。んなもん全然技術の話じゃねーんだよハゲ!
383 :
デフォルトの名無しさん :04/10/09 17:28:44
384 :
デフォルトの名無しさん :04/10/09 17:44:37
文章問題なのですが。はい、いいえでお願いします。あ、出来れば理由も。 HashMapやArrayListなどの同期をとらないコレクションAPIは、 マルチスレッド環境化で同時にgetメソッドが呼ばれると 期待した結果が返らない場合がある。
いいえ
プゲラはJavaという言葉に反応します。 Javaで前向きな活動しようとすると現れます。
>ArrayList 使ってる奴の中にだってJavaもスレッドもわかってない奴はたくさんいるし。 何度か見たことある スレッドが違えば同期化しなきゃ保障されないのを知らないやつな グリーンスレッドのときはたしか動いていた気もする
388 :
デフォルトの名無しさん :04/10/09 20:33:40
質問です。 SoftReferenceでラップした参照値のオブジェクトは、メモリーが 足りなくなると、そのオブジェクトが強可到達であっても ガーベジコレクタによってクリアされてしまうのでしょうか?
windowClosingでウィンドウをクローズさせずにイベントを終わらせる方法はないですか? return;じゃウィンドウ閉じてしまうのですが
>>389 他の WindowListener も全部 windowClosing でウィンドウ閉じないようにしないとダメなんでは?
391 :
デフォルトの名無しさん :04/10/09 23:23:39
>>389 JFrame#setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
を加えればOK
392 :
デフォルトの名無しさん :04/10/09 23:39:13
スタティックイニシャライザに関しての質問です。JDKは1.4.2です。 public static final intな変数を、処理に応じた値に初期化したいと考えています。 その処理は例外が発生する可能性があるので、次のようなスタティックイニシャライザを書きました。 (実際はtryブロックで処理をし、tryブロックの最終行で初期化していますが、 初期化部分以外を削除して、下記のコードにしても同様のエラーが出ます) class Test { public static final int VALUE; static { try { VALUE = 1; } catch (Exception e) { VALUE = -1; } } } これをコンパイルすると Test.java:7: variable VALUE might already have been assigned VALUE = -1; と怒られます。7行目をコメントアウトすると、予想通り Test.java:1: variable VALUE might not have been initialized class Test { と怒られます。 どのように書けばよいのでしょうか?
テンポラリな変数に一回値を設定してしまえば?
>>393 あっ、それいただき。有難うございます。
でもこれコンパイラのバグじゃないのかなぁ。
final宣言してるのに定数でないとはこれいかに
396 :
デフォルトの名無しさん :04/10/10 00:23:24
>>392 エラーメッセージのまんまだと思うが・・・
何もおかしいところは無い
398 :
デフォルトの名無しさん :04/10/10 00:30:25
java1.5をインストールして、1.4で書いてたコードをコンパイルは出来たのですが 実行したら、下記の実行時エラーが出てしまいました。 java.lang.VerifyError: (class:〜) Incompatible object argument for function call どうすればいいんでしょうか? 実行できるような対策法を教えてください。
イミュータブルな変数を定数として扱いたいんだね。
>>395 public staticで初期化後に変更されたくない時はfinal使うんじゃないですか?
コンパイル時に決定する定数じゃなくて、起動時にpropertyファイルで(からDB検索して)決定する定数なんですが。
>>396 えぇっ?
7行目でvariable VALUE might already have been assignedって事は
5行目のVALUE = 1;で初期化済みのVALUEに再度初期化する可能性があるとコンパイラは言ってるんですよね。
try節最終行のVALUE=1で割り当て後に例外が発生するはず無いから問題無いと思うのですが。
|::| ;''':' '`っ V |::| ノ / ̄ ,;;;;;;;;;;;;.、 |::| || | {;;;;;;;;;;;;;:} |::| ||., \ ':;;;;;;;;;;' |::| | \ `''"~ ""'ヽ |::|__.|_.` i i )シュッ |::|―-- `i 人 :| 'ノ .ニ二二|:::| |::| | l|i|! !|il!シュッ |:::| i, `' i i'ニ-'" シュッ//
>>400 定数宣言だから変更は不可能
もしやりたいのならゲッターつくれ
>>402 スタティックイニシャライザで*初期化*は出来ると思いますが。↓はコンパイルとおりますよ。
class Test {
public static final int VALUE;
static {
int temp;
try {
temp = 1;
} catch (Exception e) {
temp = -1;
}
VALUE = temp;
}
}
それやるなら int temp=-1; try{ temp = 1; } catch(Exception e){ // do nothing }finally { VALUE = temp; } の方が好きだな。
>>403 ただの揚げ足取りだな
どのみちstaticだけだし、設計的にgetterのほうがよさそうだ
「不可能」と断言してるんだから、揚げ足とりとは言わんだろ。
407 :
デフォルトの名無しさん :04/10/10 02:12:42
java1.5をインストールして、1.4で書いてたコードをコンパイルは出来たのですが 実行したら、下の様な文字列連結の部分で実行時エラーが出てしまいました。 (java.lang.VerifyError)。codeは、int型変数です。 "コードは" + code + "です" まさか、java1.5じゃ上記のような文字連結文は使えないのでしょうか? どうすればいいんでしょうか? 実行できるような対策法を教えてください。
|
|
∩___∩ | ぷらぷら
| ノ _, ,_ ヽ (( |
/ ● ● | (=)
| ( _●_) ミ _ (⌒)
>>407 ))
彡、 |∪| ノ
⊂⌒ヽ / ヽノ ヽ /⌒つ
\ ヽ / ヽ /
\_,,ノ |、_ノ
>>407 オレは2ch初心者だから釣り氏なんて怖くないぜ。
ってことでマジレス。
1.4でもint型を文字列として扱うことは出来ないよ。型変換しなきゃ。
例えば、"コードは" + Integer.toString(code) + "です" ってやったり、String str = new String(code) (以下略) ってやったり・・・。
|
|
∩___∩ | ぷらぷら
| ノ _, ,_ ヽ (( |
/ ● ● | (=)
| ( _●_) ミ _ (⌒)
>>409 ))
彡、 |∪| ノ
⊂⌒ヽ / ヽノ ヽ /⌒つ
\ ヽ / ヽ /
\_,,ノ |、_ノ
411 :
デフォルトの名無しさん :04/10/10 04:28:04
コンパイルは通るんですが実行すると C:\>java aaa C:\>java aaa と何も表示されずに終わるんです。 これはなんですか?
>>400 catchを書いてExceptionで受けている以上、コンパイラは何かしらの未チェック例外が
tryブロックで発生すると仮定する。チェック例外なら「発生しない例外をcatchしようとして
るけど?」とか言われるが、すべてに合致するExceptionで受けてるから、「なんか知らんが、
ともかくなんか起きるんだろう。だってプログラマがそう言ってるし」と仮定する。
だからtryブロックもcatchブロックも両方とも実行される可能性があると仮定する。
おまえがそう書いたんだからなんか発生するんだよ。コンパイラには想像もつかないが
なんか発生するらしい。
するとVALUEが二回初期化される可能性があるということになって、コンパイルエラーに
なる。
>>409 いやべつに1.4でも+で普通に文字列連結できるだろ...
414 :
デフォルトの名無しさん :04/10/10 06:55:20
ここは香ばしいインターネッツですね
フィールド変数は初期値を与えない場合は自動的に型に応じた初期値が与えられる。これは言語仕様。 例えばint なら 0 boolean なら false 「(フィールド変数のfinalは)宣言時に初期化しなければならない」 javaの認定試験の本に書いてありました。
あ、ごめん 〜finalな変数の初期化〜 staticなフィールドなら静的初期化子で初期化することもできるとあった・・・。
非staticなフィールドの場合定義の場所で初期化せずに、コンストラクタで初期化することもできる。とあった。
418 :
デフォルトの名無しさん :04/10/10 08:46:47
>>417 オレ的にはそれが気持ちいい。
非staticなフィールドはインタンス生成さられたときに初期化されると考えるほうが自然じゃないかな?
じゃないと生まれる前から運命が決まってるみたいで( ´Д`)キモッ
>>405 getterはクラス内で変更できちゃうからやだ。
>>412 たぶんその理由でしょうね。
でも、例外がどの文で発生する可能性があるという事はコンパイラにはわかっているので、フロー解析は可能。
フロー解析すれば、2回は割り当てないことは明白なので、コンパイラの手抜きだと思います。
>>416 だから最初っから「スタティックイニシャライザ」って書いています。知らない単語が出てきたら
ぐぐってから話題に参加して欲しいです。
>>407 CLASSPATHに1.4のライブラリが通ってたりしない?
>>403 =419
>でも、例外がどの文で発生する可能性があるという事はコンパイラにはわかっているので、フロー解析は可能。
確かにコンパイラは例外がどの文で発生する可能性があるかわかるけど
class ファイルになるとその情報は消えてしまうので実行時にはわからなくなってしまうのですよ。
つまり実行時のことを考えると、初期化に失敗して投げられた例外をキャッチしたのか
初期化は成功したもののその後投げられた例外をキャッチしたのかが区別できないので
コンパイラはそういうエラーメッセージを出すわけです。
その後投げられた例外を → その後別の処理をして投げられた例外を
代入で起こるRuntimeExceptionってどんなのがあるの?
424 :
デフォルトの名無しさん :04/10/10 12:33:07
前からずっと気になってました。Java の new っていうのは演算子なんですか? メンバ関数なんですか?
>>424 言語仕様の用語で言えば、new は演算子でもメンバ関数でもない。
オレ用語なら勝手にすればよいのでは?
>>425 っつか、言語仕様ではメンバ関数って使ってないような……
428 :
424 :04/10/10 13:13:34
いや、というのも私はもともとC++の人間だったんですよ。 C++だと new と delete は演算子と見なされてます。 で、Java で非静的メンバクラスのインスタンスを生成するときに TopClass e = new TopClass(); TopClass.NonStaticMember i = e.new NonStaticMember(); って書きますけど、じゃあこの場合2行目の new は e のメンバなのか? って疑問に持ったので。 注) TopClass ∋ NonStaticMember
>>407 public class TigerTest {
public static void main(String[] args) {
int code = 10;
String s = "コードは" + code + "です。";
System.out.println(s);
}
}
とりあえずこのコードはコンパイルも実行も問題なくできた。
このぐらいのコードで再現するなら環境の問題と思われ。
貴重な情報だから環境晒してくれ
409は馬鹿だから無視すること
>>427 http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#41147 > Unqualified class instance creation expressions begin with the keyword new.
> An unqualified class instance creation expression may be used to create an instance of a class,
> regardless of whether the class is a top-level (§7.6), member (§8.5, §9.5), local (§14.3) or anonymous class (§15.9.5).
みたいに JLS では the keyword new とか the new keyword とかって書かれてます。
other operators で演算子なのは .、 ?:、instanceof だけのような…
単にC++の慣習が抜けてない人が書いただけだと思われ。
>>429 VerifyErrorが出るって事はコンパイル時のバージョンと実行時のバージョンが違ってるからだろう。
単に javac は 1.5 の、javaは 1.4 のものにパスが通ってると思われ。
>>432 そうだよ。Java言語仕様では「new演算子」とは呼ばないって話だから。
>>431 いや、(オプション無しで)1.5のjavacでコンパイル、1.4.2_04のjava.exeで実行すると、
うちではUnsupportedClassVersionErrorになる。実行すらされない。
>実行したら、下の様な文字列連結の部分で実行時エラーが出てしまいました。
なんてことにはならないのだよ。
Exception in thread "main" java.lang.UnsupportedClassVersionError: TigerTest (Unsupported major.minor version 49.0)
at java.lang.ClassLoader.defineClass0(Native Method)
だから407の情報が欲しい。
参考までに C#では「new」を「新しい式」と呼ぶ。
機械翻訳?
>>435 C# では new は演算子だったような。
438 :
407 :04/10/10 13:42:14
>>434 java.lang.VerifyError: (class:〜) Incompatible object argument for function call
環境はJBuilder7なんです。
+による文字連結の部分で実行時VerifyErrorが出てしまうのです。
440 :
407 :04/10/10 13:43:33
1.4を削除した後に、JBuilderのJDK設定を1.5にして、それで再ビルド して、実行してもそうなってしまうのです。
内部コンパイラ使ってるんじゃない? StringBufferが微妙にかわったらしく、コンパイラとライブラリの対応が食い違うとそうなるみたい。
>>393 提案のテンポラリ変数方式で回避できたのでどうでもといえば、どうでもいいのですが。
>>421 > 初期化は成功したもののその後別の処理をして投げられた例外
VALUE=1の後に別の処理は無いのだから、コンパイラは初期化が成功した後には
例外が発生する可能性が無いということは追跡可能なはずです。
try節の中も文単位でフロー解析しろよコンパイラ。
という主張です。
>>441 そだね。
1.5 では StringBuffer から StringBuilder との共通部分を AbstractStringBuilder に追い出した。
で、AbstractStringBuilder#append() は AbstractStringBuilder を返し、
StringBuffer#append() は StringBuffer を返すというように covariant return type 使ってる。
それで verify error 出てるのかも。
>>442 責めるならコンパイラじゃなく、
「例外が発生したとき」の処理は明示的に書けるのに
「例外が発生しなかったとき」の処理を明示的に書けない言語仕様を責めるべきだ。
>>442 ・クラスファイルになってしまえば追跡は不可能 (追跡する仕組みがないから)
・クラスファイルはコンパイラ以外からも生成可能
クラスファイルの仕様の問題であってコンパイラでは対応不可能。
>>430 >>407 というわけでBorlandのサポートか、JBuilderのMLなりなんなりで相談した方がよさげ
>>445 それならばクラスファイルになってしまえば二重初期化は検出できないので、
コンパイラがこれをエラーにするのは、余計なお世話という事になりませんか?
「スタティックイニシャライザの中なら何度でも割り当てていいぜ、最後の割り当てが有効」ならすっきりしますが。
>>444 は結構説得力あります。
>>442 そりゃフロー解析はできるだろうけど、そんなことしたら
"コンパイラの実装によって通ったり通らなかったりする"
ようなコードが世の中に流通することになる。困るよ.
言語仕様からはずれたソースを弾くのも
コンパイラの大事な仕事のひとつだよ。
言語仕様はなるべくシンプルにしておいて欲しいし
あのソースは弾くのが正しい挙動かと思われ。
>449 それは代入前に右辺の演算だけでエラーが発生するのと違う?
>>448 そうですね。
回避方法もあるのでこれで納得します。お付き合い有難うございました。
int x = 2100000000 * 2100000000;
long x = Long.MAX_VALUE + 1;
すいません、Javaの変数は値渡しだということで質問です。 例えば1Gバイトの超巨大ファイルをバイナリーデータとして バッファに読み込み、全てバイト配列にコピーしてreturnするような メソッドを作ったとします。 すると、呼び出し側で用意する受け用のバイト配列と合わせ、 実に3GBのメモリが必要になると思うのですが、マジな話なのでしょうか。
455 :
デフォルトの名無しさん :04/10/10 14:32:49
ばか、配列は参照渡しだ
すべての配列型は Objectクラスを継承する
>>454 ウィンドウを関数に渡したらウィンドウが二つ作成されるとでも?
Object o = new ArrayList(); ArrayList a = o;
えっと、コンパイルエラーがでるよね?っていうはなし?
>>460 392がコンパイラの手抜きなら459もコンパイラの手抜きってことになるな。
と言っているのではないかと。
配列に限らずオブジェクトは全部参照渡しだろ。というかnewしたら返ってくるものって参照だし。 配列もオブジェクトだし。
よく本にJavaは値渡しだってかいてあるんだけど、あれって微妙な言い回しだな。 確かに渡す時に参照を勝手に作ったりはしないんだけど、参照を値渡ししてるって 説明が抜けてるんだよなあ。
変数はすべて値渡し。 「変数」にたまたま「オブジェクトインスタンスへの参照」が入っていたら、 「オブジェクトインスタンスへの参照」を値渡しするだけ。 呼び出し先メソッドで何があっても、呼び出し元の実引数の「変数」はなんら影響を受けない。 言ってるの同じことだけどね。
またこの話か
連休で雨でみんなヒマなんだよ。
基本部分の話になると一番盛り上がるとは、何と言っていいのか。。。
Javaで言ってる参照と、参照渡しと言うときの参照でまったく意味が違うんだから、 むしろ参照を値渡しするなんて表現のほうがよっぽど意味不明じゃないのか? 俺はそういう風に解説してる本やサイトのほうが問題だと思うが。
ぽかーん。
「参照の値」ってのが理解できない奴にはなんと言っても無駄。
Cがわかっているなら自由に値を操作できないポインタと考えればすぐにわかるはずだが
>>469 変数の参照の場合、オブジェクトの参照を指しているという意味。
Object a = b;
a = new Object(); // b は影響を受けない。
一方、参照渡しの場合変数への参照を渡すと言う意味。
myMethod( Object a )
{
a = new Object(); // 仮に参照渡しなら、b が影響を受ける。
}
myMethod( b );
まったく別のものに同じ言葉を用いているから455や462のような馬鹿が混乱する。
参照の値渡しとか、参照の参照渡しとか、値の参照渡しとか、そういう表現することが問題を生む。
さらにぽかーん
> 一方、参照渡しの場合変数への参照を渡すと言う意味。 これが間違い。 「参照渡し」は「参照を渡す」でなく「参照で渡す」だろ。
pass by reference の日本語訳である「参照渡し」だけを見て 「参照を渡す」と解釈するのは相当アレだろ。
>>476 「参照で渡す」ことと「参照を渡す」ことに本質的な違いがあるようには思えないが?
「メールで送る」などと言う場合、それは「メールを送る」ことに他ならない。
第一主題はそこじゃない。
> 「参照で渡す」ことと「参照を渡す」ことに本質的な違いがあるようには思えないが? 全然違うね。 「値渡し」と「参照渡し」が区別されてるのは、 渡されるのが参照なのか値なのかが違うのかを区別したいのではなく 渡すときに、参照で渡すのか値で渡すのかを区別したいんだよ。
>>478 「参照を渡す」と言っている「参照」は、Javaの「参照」とはまったく別物なんだが。
478の一番最後の行で「参照で渡す」と言っているときに渡されている何物かを称して「参照」と呼んでいる。
> 478の一番最後の行で「参照で渡す」と言っているときに渡されている何物かを称して「参照」と呼んでいる。 違う。 渡されている何物かが「参照」だから「参照渡し」なのではなくて 渡している方法そのものが「参照渡し」なんだよ。
>>480 視点が違うだけ。
俺は「参照を渡す」ことを「参照で渡す」ことと同じ事象を別の表現で書いたに過ぎない。
もし480が、この2つは違う事象だ、と言うならそれは俺の表現がつたなくて誤解を与えてしまったと言うことだから謝る。
みんなレトリックであそぶのが好きですね。
>>481 視点が違う、ねぇ。
では、
>>479 の定義で例えば C/C++ でポインタ渡したら何故「参照渡し」で悪いのか?
それとも渡されたのがポインタだから「ポインタ渡し」になるのか?
やべ、また言葉足らずだ。 ポインタの値渡し、ね。
>>484 「参照渡し」で何故悪いのか? にも答えてね。
VMの解説には参照という言葉が出てくるけど、これはVM実装者が知ってればいい事で、 参照などと呼ばずにObject IDとでも呼べば混乱しない。
>>486 int i;
func( &i );
なら参照渡しと同じようにも見えるけど。
int *pi = &i;
func( i );
は明らかにポインタの値渡しでそ。
>>488 答えになってないよ。
「参照渡し」で何故悪いのか? に答えてね。
>>489 「参照を渡し」ても「参照で渡し」てもいない。
参照渡しと呼ぶ理由が無いでしょ。
そうだよねぇ。 オブジェクトIDと呼んでれば、かなりすっきり。
>>487 object ID って名前は VM の実装で使われているから無理っぽ
>>492 無関係な質問やめてくれ。
値渡しの「値」と、参照渡しの「参照」の違いなら意味があるだろうけど、
ポインタと参照の違いはこの際関係ない。
なんか、「どちて坊や」がいるね。
>>494 関係あるね。「『参照』を渡す」なら「参照」の定義は非常に重要。
>>494 > 値渡しの「値」と、参照渡しの「参照」の違いなら意味があるだろうけど、
ポインタが「値」であって「参照」でない理由は? でも良いよ。
FAQなんだし、このスレ的ベストな解説を考えてみてはどうだろ? #よっぽど建設的だと思うけど
>>498 無理無理。
「参照」も「参照渡し」も一人一人ちょっとずつ違う意味で使ってるんだから。
一人一人に別の解説が必要になるのでベストな解説なんて作れない。
普通参照渡しって言ったら Fortran みたいな引数の渡し方を言うんであって Java の場合参照値だろうがそうでなかろうが参照渡しではありえない。
そうそう「参照渡し」すなわち pass by reference が「参照を渡す」なら pass by name は「名前を渡す」で、渡されるのは「名前」なのかな?
わけわからずかき乱すやつがいるからなぁ。
(;´Д`) まだやってる・・・
>>501 そのとおり名前だよ。遅延評価を実装してる処理系 (関数型言語に多い) ではたまにある。
47x位のころに話してたのと今質問してるやつ別人じゃないか?
質問が的外れと言うか頓珍漢と言うか、レベルが下がってる。
>>497 ポインタは値じゃない。ポインタの値はあるが。
ポインタは参照じゃない、とは言い切れない。
ぬるぽはnull参照に対して出る。一方C++の参照とポインタは明確に別物。
そんなのは単語のローカル定義に依存する。
>>505 答えになってないね。
単語のローカル定義なら C/C++ のポインタと「参照渡し」の「参照」で。
>>504 違うね。名前に関連付けられた変数を渡すんだよ。
名前だけ渡したって意味ないだろ。
>>493 じゃあ、いっその事「おぶぽ」と呼ぼう。
「おぶぽ」はオブジェクトを識別するものの名称であって特に何かの短縮系ではない。
>>508 自分で勝手に呼べば良いのでは?
それで他人と話が通じなくなっても知った事ではないが。
Javaでプログラム書いてる人間なら みんなわかってる話のはずなのに、 なんでこんなにかみあわないのかと。
>>507 細かいけど、変数じゃなくて引数じゃない?
>>510 みんなわかってる、ってのが幻想だから。
基礎に近いところほど(正しくないかもしれない知識でも)暗記して
応用に突っ走る方が効率が(っつーより給料が)良いからさ。
例えば他人に読めるなら漢字の書き順違ってても良い、みたいな。
>>506 C/C++の「ポインタ」と「参照渡し」の「参照」じゃ名前も機能も何の関連も無いよ・・・。
せめてC++の「参照」と、「参照渡し」の「参照」の違い、とかならまだしも。
C++の場合:
「ポインタ」は別の変数のアドレスを保持している変数で、
逆参照やインクリメントなどのいわゆるポインタ演算が出来る。
「参照」は別の変数の別名として使用できる変数。
式の結果参照できたり、const参照とか扱いが変わるので厳密には違うが・・・。
変数の一種としての「参照」と、「参照渡し」の「参照」は同じ代物。
つーか、だから何?
もしかして質問攻めにして揚げ足取るタイミング見計らってる?
こういう厨は放置したほうがいいのか・・・?
>>507 別に名前だけ渡しといて、受け手がその名前をキーにして値をとってくることも出来るんじゃないか?
# 結果的に値も渡してるのでどうでもいいが・・・。
つまり── 不立文字[ふりゅうもんじ]なのだ。言葉で完全に明確に表すことは不可能。 この一点における限りJavaは禅に通じる。……あれ?
>>513 ちっとは自分で考えろ。馬鹿に考えさせるように質問出してるんだから。
517 :
デフォルトの名無しさん :04/10/10 22:28:13
処理能力を奪わないでバックグラウンドで処理を行うようなプログラムをJavaで 作りたいのですが、どうやればいいのでしょうか? 自分では、単純にメインスレッドの優先度を下げればいいように思いますが、 それでは、VMの中に存在するプログラムの中で優先度が低いという事になるような 気がします(ここらへん理解があいまいなんでご教授いただけたらと思います)。 よろしくおねがいします。
>>515 すまん。馬鹿でした。
次からは放置するようにします。
オブジェクト参照を値渡ししてるんだよ。それでなんか問題あるのか?
無いよ。
521 :
222 :04/10/10 22:48:24
質問があります。 クラスAからクラスBのmainメソッドを呼び出す処理を したいのですが、エラーになってしまいます。 別クラスのmainメソッドを呼ぶことは出来ないのでしょうか?
>>517 それはJavaの外側の話になるね
そのOSでのプロセス優先度の変更方法を調べてくれ
>>521 String[] args = new String[0];
ClassB.main(args);
>>513 >別に名前だけ渡しといて、受け手がその名前をキーにして値をとってくることも出来るんじゃないか?
># 結果的に値も渡してるのでどうでもいいが・・・。
call by name では関数内部で使われてない引数は値を渡さない
(というか評価において必要になるまで値をとってこない)。
例えば int zero(int x) { return 0; } なんて関数を zero(1/0) なんて呼び出そうとすると
call by value では 1/0 が先に計算されるのでエラーになるが
call by name では (内部で x が使われてないから 1/0 が計算されないので) 普通に 0 が帰ってくる。
526 :
517 :04/10/10 23:18:12
>>523 解決方法としてはVMの優先度を下げるという事でしょうか?。それとも
ネイティブのソースを書いてどうにかしてVM内のそのプログラムの優先度
を下げるという事をしなくてはならないのでしょうか?
後者の場合は、私のスキルではちと大変そうです。
527 :
222 :04/10/10 23:27:16
>>524 >String[] args = new String[0];
>ClassB.main(args);
この方法でコンパイル通りました。
有難うございます。
>>526 unixだったらnice java ClassNameで下げられるだろ。ウイソは知らぬ。
ウィンドウがアクティブ?(前面にある)時はテキストフィールドにいつでも書き込めるよう常にこの”|”の点滅してるやつみたいなの ある状態にしたいんですけどこれはどこのクラスでしょう?
>>528 それはJava仮想マシンの中でスレッドの優先順位が下がるだけ。
>>526 がいってるのはJavaプログラム自体の優先度を他の(ネイティブの)プログラムより
下げたいという話。
>>531 java.lang.Thread#setPriority(int)
でJava仮想マシンのメインのプロセス(スレッド)の優先順位下げればいけるよ。
俺も昔重いソフト作って、他のネイティブアプリが動作不能になったからメインスレッドの優先順位下げたらいけたよ。
俺の手持ちの資料では、javaのスレッドはwindows環境ではネイティブwin32スレッドに変換されて実行されるので、優先度がOSの動作に影響されるよ。
以下、資料からのコピペ。
javaの優先順位 : win32の優先順位
1,2 :THREAD_PRIORITY_LOWEST
3 :THREAD_PRIORITY_BELOW_NOMAL
4,5,6 :THREAD_PRIORITY_NOMAL
7, :THREAD_PRIORITY_ABOVE_NORMAL
8,9 :THREAD_PRIORITY_HIGHEST
10 :THREAD_PRIORITY_TIME_CRITICAL
優先度下げすぎると、環境によっては、windowsのセキュリティー関連サービスよりも優先されなくなって、かなりパフォーマンスが落ちるケースがあるようです。
メインのプロセスっていうのは、いま実行してるメインの処理系。 public static void main(String args[]){ Thread.setPriority(3); } みたいな感じでコード書けばOK
勉強になった!
535 :
デフォルトの名無しさん :04/10/11 02:01:36
class Hoge { Fuga[] fuga; int size; public Hoge(int size) { this.size = size; this.fuga = new Fuga[size]; } public void print() { for (int i = 0; i < size; i++) { System.out.print((fuga[i]).isSize()); } } public static void main(String[] args) { Hoge hoge = new Hoge(3); hoge.print(); } } class Fuga { int i; public Fuga() { this.i = 3; } public int isSize() { return this.i; } } が だめな理由を教えてください.
fuga[0]〜fuga[2]がぬるぽ
isSizeがダメだと思う。
現在表示されている画面のピクセルの色を取得する方法はどんなものでしょうか? 特定のウィンドウを指定してその中のピクセルを取得する場合と、 複数のウィンドウが重なっている時、最前面のウィンドウの特定のピクセル(画面上の指定ピクセル)を取得とでは
539 :
517 :04/10/11 10:33:00
>>532 >>533 非常にわかりやすい説明ありがとうございます。普通にスレッドの優先度を
下げればOKなんですね。これはラクチン!!
ありがとうございました。
540 :
デフォルトの名無しさん :04/10/11 10:39:07
staticなメンバーを普通にシリアライズはできないらしいんですが、staticなクラス そのものをシリアライズする事はできるのでしょうか? (書き込むクラスに含まれているstaticなクラスではなく、staticなクラスそのものを 書き込もうとした場合という事です) どこぞの神おしえて!!
541 :
デフォルトの名無しさん :04/10/11 12:07:35
staticメンバクラスのオブジェクトなら普通にできますよ。
542 :
デフォルトの名無しさん :04/10/11 12:09:46
>>540 class A がstatic class Bを含んでるとして、Aのインスタンスを
シリアライズしても、当然、Bのインスタンスまではされないが、
static class Bのインスタンスのシリアライズは、これもまた当然
できます。
543 :
デフォルトの名無しさん :04/10/11 12:15:29
>>541 >>542 ありがとうございます。書き込んだ後、自分で調べてから書き込め!!って
言われそうだったので、実際にやってみたところ、普通にできました。
親切にどうも。
シリアライズしないようにする修飾子ってなんだっけ
それだ! あー、すっきりした。
547 :
デフォルトの名無しさん :04/10/11 13:28:21
servlet(tomcat)で同じディレクトリからPOSTしているの2つのプログラムで、 片方は問題なし、片方はHTTP method POST is not supported by this URL。 なんで?
>547 tomcatのログとか、他のWWW鯖と連携させてるならその鯖のログとか読んだ?
549 :
デフォルトの名無しさん :04/10/11 14:30:03
ダイアログを作成するときに、引数にfinalを付けないといけないようなエラーメッセージが表示されます。 finalをつけるとコンパイルはうまくいくのですが、そのままだとその引数の値を変更できないため困っています。 どうしたらよいのでしょうか?
>>549 Javaの文法を勉強したらいいと思います。
別の変数にコピったらだめなのか?
552 :
デフォルトの名無しさん :04/10/11 14:40:44
>>548 読んだけど、エラーない。
ヒントない?
553 :
デフォルトの名無しさん :04/10/11 15:25:09
>>549 ああ、そりゃその引数を、そのメソッドorコンストラクタ内にある
内部クラスで使ってるからでしょう。
その引数を、初めにfinal変数にコピーして、そのfinal変数を
内部クラスが使うようにすればOK
何かヒントでもあれば教えてください...
>>538 全体のスクリーンショットなら
java.awt.Robot#createScreenCapture(java.awt.Rectangle)
でとれる。
ありがとうございます。 なるほどこれ使えばいいんですね。 ところで 陰に隠れて見えないウィンドウの特定のピクセルを取得するなんてことは 可能なのでしょうか?
>>556 普通の方法ではできない、と思うけどわからんちん
もしかしたら
BufferedImage作ってcreateGraphics()して
そのウィンドウのpaint()に渡す、とかでできるかも
>>547 えーと、整理すると同じコンテキスト以下に2つのサーブレットがあって、そのサーブレット
に対するPOSTリクエストを投げると片方は成功、片方はエラー、というlことでいい?
エラーの出るサーブレットはdoPostをオーバライドしてますか?
だれか
>>530 分かりませんか?
フォーカスが変わってもすぐにテキストフィールドに戻したいのですが。
>>559 java.awt.Componentやjavax.swing.JComponentのrequestFocusやrequestFocusInWindowでどう?
561 :
デフォルトの名無しさん :04/10/12 16:09:18
Javaアプレットを起動させようとしたのですが、 アプレットビューアで起動させたところ 「Start:アプレットは初期化されていません」 と出てきます。 どうしたらいいんでしょうか?おねがいします・・・
こまったね。 勝手にこまってろとしかいいようがないけどね。
563 :
デフォルトの名無しさん :04/10/12 17:18:36
他人が作った Java Beans(JAR ファイルに格納されている)を 自分のアプレットから使うときって その JAR ファイルも一緒にパッキングしなくちゃならないんですよね? その場合 {自作のクラスファイル、Beans が入った JAR ファイル} を纏めるんですか? じゃあ、JAR ファイルをそのままもういちど JAR にしてしまっても大丈夫なんですか?
libファイルだと思えばいい 基本的に組み込んじゃだめというライブラリがあるとは思えないから Jarの中に組み込んでいいと思うけどね LGPLでもライブラリ部分の差し替え方法を明記すればいいだけなので Jarコマンド使ってくださいと書けばいいだけ
565 :
デフォルトの名無しさん :04/10/12 17:33:44
>>564 JAR ファイルの中に2重構造で JAR ファイルがあっても問題ないんですよね…?
>>565 ねたじゃなくて本当にわからないようだから教えると
org.〜とかcom.〜以下をコピーする
たしかJBuilderとかだとこのへん自動でやってくれたな
ただしJavaSoundのSPIとかそういうのはclassファイルだけではだめで
META-INFの中もこぴーとかある
>>563 beansが入ったjarファイルをjar -xf で展開して、自作のクラスをjar化するときに一緒に
まとめたら、クラスパスとか分かりやすい。
>>563 素直に別jarにして、アーカイブ指定を両jarしてやればよいのでは?
まとめる必要はないよ。
jarファイルは複数指定できるよ。
571 :
デフォルトの名無しさん :04/10/12 20:32:56
突然お邪魔します。
外国為替証拠金取引とかなんとかいう相場表のJavaアプレットをホームページ
にくっつけたいと試みているのですがうまくいきません。
ttp://www.saxobank.com/?id=485&Lan=JA&Au=2&Grp=6-12 上のサイトから会員登録してソースを入手したんですが動かない!
色々ためしたんだけど動かない!
ちなみに<head>内に下記のソースを入れてます。
<script language="JavaScript" src="
http://cs.iitech.dk/Site/PartnerProgramme/Scripts/DCQuoteList.asp?ID=与えられたIDが入ります "></script>
そして<body>タグ内に
<script language="javascript">
QuoteListFull('EURUSD|USDJPY','Bid|Ask|Time','Symbol,bid,ask,GMT','210','','FFFFFF','FFFFFF','000000','','','','406449');
</script>
を入れます。
画面は表示されますが、肝心の相場などが表示されません!
長々とスイマセン。知ってる方いらっしゃいますか?
| | ∩___∩ | ぷらぷら | ノ _, ,_ ヽ (( | / ● ● | (=)>571 | ( _●_) ミ _ (⌒) J )) 彡、 |∪| ノ ⊂⌒ヽ / ヽノ ヽ /⌒つ \ ヽ / ヽ / \_,,ノ |、_ノ
フィールドの敬称に関する質問です。 既に存在するParentクラスのprintTeisu()のロジックを 継承して使いたいとします。 しかし、下のようなChildクラスを作っても、出力されるのは "parent"になります。 "parent"をなんとか表示させる(=printTeisu()の中で、Childクラスの 定数を参照させる)方法は無いのでしょうか。 public class Parent{ private static final String TEISU = "parent"; protected void printTeisu(){ System.out.println(TEISU); } } public class Child extends Parent{ private static final String TEISU = "child"; } public class Test{ public static void main(String[] args){ Child c = new Child(); c.printTeisu(); } }
すいません、 >"parent"をなんとか表示させる は "child"をなんとか表示させる でした・・。
576 :
デフォルトの名無しさん :04/10/12 21:12:56
>>573 public class Child extends Parent{
private static final String TEISU = "child";
protected void printTeisu(){
System.out.println(TEISU);
}
}
childクラスをこうすればOK
577 :
デフォルトの名無しさん :04/10/12 22:31:12
こんばんは、すごくいやみな書き方かもしれないです。が。 親のPrivate フィールドを、子でも使うな。 というのを、書いてあるのを読んだことあります。 メンテナンスって言うのも大事ですので、オブジェクトだし。
>>577 親のprivateフィールドをどうやって子が使うんだよバーヤ。
579 :
デフォルトの名無しさん :04/10/12 22:47:15
何で、バーヤってわかるんですか。
>>575 それはちょっと・・・
>>576 それもちょっと・・・printTeisu()は本当はちょっと長いメソッドなのです。
でも生TEISUに代えてprotectedのゲッターを使えばいけますね。
ちょっと納得いきませんけど。
>>577 ええ、ですから使いたくないのですが、使ってしまうので困ってます。
>>580 どういう用途?
ロジックを使いまわしたいってことは、ライブラリ的な性質なんだろうけど
そのロジックのパラメータであるはずのフィールドが親がprivateでがっちり持ってるってこと?
ライブラリクラスなんだったら継承なんて考えずに、コピペ&別クラス作成でいいのでは?
親クラスを使う意味はないと思うんだが・・・
>>581 だいたいおっしゃる通りです。
ちなみに、大元はフィールドでなく文字定数べた書きだったらしいですが、
いつからかstatic finalに書き換えられたらしいです。
こういう場合はコピペの方がいいんでしょうか?
583 :
バーヤ :04/10/12 23:29:37
>>582 >>581 サンの言いたいことは、
メソッドだけ別クラスじゃないでしょうか。
そうすれば、引数として、privateフィールドを宣言大丈夫でしょうから。
584 :
デフォルトの名無しさん :04/10/13 04:40:29
static final → final 親クラスをコンストラクタで制御変わるように変更 これが無難だろうな。 親クラス変更できないならコピペ
585 :
デフォルトの名無しさん :04/10/13 07:31:06
>>573 privateな変数はもともと外部からのアクセスを想定していない。
それを使うこと自体が間違い。
親のロジックが使いたいなら、superを使って呼び出せばいい。
親には親のプライバシーがあるってことだ。
それがオブジェクト指向の考え方。
>>585 この場合はsuper使っても同じことだと思われ・・
なんか継承したメンバ変数を、親の物と勘違いしている気がする abstract class A{ private int i; } class B extends A{ public static void main(String[] args){ i = 30; // エラーではない } } ……みたいな
588 :
デフォルトの名無しさん :04/10/13 13:48:12
java始めて1ヶ月が経つのですが上達しません。 どうすれば上手になれますか?
ひたすら書け! 何か作りたいものを決めて、途中で出てくる疑問をひとつずつ潰す。 あるとき突然すべてが頭の中でつながるときがくるんだよ。
591 :
デフォルトの名無しさん :04/10/13 14:00:34
検索してたら引っかかりました。
>>334 、
>>339 でコンボボックスについての書き込みがありましたが。
これ(複数列の表示)ってJDBCの場合でも行くんでしょうか?
例えばgetListCellRendererComponentとか・・・
>>593 なんか2つの問題が切り離されてないぞ。
JavaからTwainスキャナを使う方法はあるのでしょうか?
596 :
デフォルトの名無しさん :04/10/13 21:13:16
<identifier> がありません。 って出てくるんですが何でしょう? 指摘されるのが全て『(』ばかりなんです。
597 :
デフォルトの名無しさん :04/10/13 21:45:54
HTMLを解析するクラスとかないですか? javax.swing.text.html javax.swing.text.html.parser がそれっぽいんですけど、使い方が判らなくて。 どういう風に使うんでしょうか?
>>596 単に括弧の数があってないだけじゃないの。ちゃんとインデント入れてコーディングしてる?
599 :
デフォルトの名無しさん :04/10/13 22:30:47
プログラミングって難しいですね。 授業についていけない・・・
授業って出来ないやつに合わせて進めるのに。 それについていけないなんて気の毒だな・・・。
601 :
デフォルトの名無しさん :04/10/13 22:39:23
>>600 それを言わないで・・・
予習・復習した方がいいですかね?
自分でコードを書いてみること。 ごく単純な制御文の練習問題をいくつか解いてみること。
Java言語勉強したいんですが、お勧めの本とかありますか?
605 :
デフォルトの名無しさん :04/10/13 23:00:17
授業のプログラミング楽だよね 講師といってもHITA○HIとかから来た雇いさんだから 全員100点でも構わないみたいで みんな100点取ってるしw 試験問題が楽すぎて、後で教授から文句出たかもしれんが・・・w 授業とかいって、結局みんな好き勝手してたけどね
うん。俺最初の日しか講義でなかったけど単位もらったよ。
>>595 商用じゃなければ無料で使えるやつがgnome系のプロジェクトであった気が。
うん。俺最初の日すら講義でなかったけどトップの成績だったよ。
専門なんてプログラミングの実習がタイピングの練習状態らしいぞ プリント写すだけらしい
611 :
デフォルトの名無しさん :04/10/14 01:25:55
Javaで動的バインディングってできませんか? C++で「仮想継承による動的バインディング」を勉強したのですが、 Javaではどういう手法があるのかわかりません。
Javaはデフォルトで動的バインディングです。
>>610 やるとこはちゃんとやるでしょ。
少なくともコンパイラの設計、実装くらいはしてもらわないと、
その学科を出ただけで資質を疑われてしまいますよ。
614 :
611 :04/10/14 01:45:35
612>> 言葉が足りなかったのと、私の知識が足りないためこういう返事を頂けたのだと思います。 申し訳ありません。 そのですね、 parent クラスにvoid func()関数があったとして、 parent クラスを継承したchild クラスがvoid func()関数を オーバーライドしていたとします。 で、parent p = new child(); と言う形でnewしてやった場合、 p.func()で実行されるのはparent クラスのvoid func()関数ですよね? (child)p.func()としてやればchild クラスのvoid func()関数を 実行する事が出来ますが、(child)と書きたくないのです。
>>614 違うよ。
オーバーライドしてるなら p.func() で child#func() が呼ばれる。
逆に言うとオーバーライドされてるなら
p.func() で parent#func() を呼ぶには p = new parent(); しないといけない。
>>610 少なくとも俺の通ってた、専門学校のとある科ではかなりの数の課題だったぞ……。
Javaだけで500はやる
>>614 >で、parent p = new child(); と言う形でnewしてやった場合、
>p.func()で実行されるのはparent クラスのvoid func()関数ですよね?
Javaならそれでちゃんとchildのfuncメソッドを呼ぶぞ、確かめてみろって・・・
618 :
611 :04/10/14 02:25:40
問題。 SunのJDK5.0でコンパイル・実行するとします。 final String name = false ? "はろ" : "わるど"; System.out.println(name); とすると「わるど」が表示されます。 それでは、次のコードでは何が表示されるでしょうか? final String name = false ? "はろ" : null; System.out.println(name);
???
621 :
デフォルトの名無しさん :04/10/14 06:37:57
age
622 :
デフォルトの名無しさん :04/10/14 06:40:21
625 :
デフォルトの名無しさん :04/10/14 08:45:17
String str;
URL url = new URL(getCodeBase(), "
http://www.yahoo.co.jp/ ");
str = url.toString(); //ここを何にすればいいか教えてください
System.out.println(str);
626 :
デフォルトの名無しさん :04/10/14 09:23:46
>>625 何をしたいのか書いてないのに、何にすればいいかなんて分かるわけないだろ
アドミニストレーターが実行するアプリの場合アプリ内でアクセス 権を制限する方法はありますか?
>>629 まず、アドミニストレーターとは何か、と何のアクセス権を制限したいかを
明確にしてください。
>>630 すいません。アドミニストレーターは全ファイルにアクセス出来る権限のあるUSERで、
アクセス権は、java.io.*でお願いします
>>608 サンキュー。
USBドライバを書いて、それをJavaから制御するしかないかも。
>>624 そうなるはずだけど、JDK5.0ではそうならない。
書き方が悪かったので直しました。 全ファイルにアクセス出来るユーザーがアプリを実行するとして、 そのアプリ内で、特定のディレクトリにのみファイル出力を許可する ように出来るでしょうか? 具体的に書くと、ネット上の文字列から新たに作成するディレクトリ名を 取得した場合、文字列に"../../"が含まれるとシステムのディレクトリが 壊れたりしないでしょうか?
>>635 JDK5.0で試してみ。
ちなみに-source1.4以下を指定するとそのとおりに動く。
>>634 外部から入力された文字列を、そのまんまディレクトリ作成等に使ったりしない
のがセキュリティの常識。
普通はサニタイズといって問題を起こしそうな文字(/とか\とか:とかとかとか)を
取り除いてから使う。
何をするか(ここではディレクトリ作成)によって危険な文字の集合が変わって
くるので、ちゃんと調べて万全を期すべし。
できる。以上。 だけだとあんまりなのでヒントを。 File#getCanonicalPath()を使うと、「.」や「..」を除いて正規化された絶対パス名が得られるので、 そのパス名が指定したディレクトリ名を含むかどうか判断すればどうでしょう。
>>637 あと、-source 1.4 は関係無いような?
>>641 元ネタのTheServerSide.COMの記事を読み違えてた・・・。
643 :
デフォルトの名無しさん :04/10/14 16:22:13
UNIX上でshellからjavaアプリケーションを動かす予定です。 javaアプリけーしょんの中で UNIXで利用されている環境変数を使いたいのですが そもそも環境変数をjavaアプリケーションで使うことは可能でしょうか? #セキュリティの関係上アプリケーションとはいえ #環境変数を取得することは可能かなぁと思いまして。 調べたところ、getPropertyがもっとも近いようでしたが こちらが意図した環境変数を取ることができないようでした。 (意図する=自分が設定した、という意味) ググってみましたが、java内で設定したプロパティを使うってあたりの 情報しか探せず書込しました。 もしそのような情報のあるサイトがあれば教えて頂きたいのですが…
env、awk、xargsあたりを組み合わせれば、 環境変数をすべてjava コマンドの-Dオプションに指定してから実行するスクリプトがかけそうな気がする。
>>645 antってそういう風にフィルタコマンドかまして環境変数を手渡してたような気がする・・・
648 :
デフォルトの名無しさん :04/10/14 19:55:52
こんばんは、よろしくお願います。 JToolBar のメソッド add(Action a)で、JButton を追加したいのですが、 引数が、Actionであるのに、 いろいろ検索していると、 Action ac = new AbstractAction(){ 処理 } JButton bu = new JButton(Action); JToolBar.add(bu) このようになっている文を見つけました。 どうして、JButtonを引数に入れられるのでしょうか。
649 :
648 :04/10/14 19:57:26
訂正です。 JButton bu = new JButton(Action); 上記の部分 JButton bu = new JButton(ac); です。すみません。
650 :
デフォルトの名無しさん :04/10/14 19:57:45
>>648 APIリファレンスをよく読んでください。
add(Action a)は、今では推奨されないメソッドになってます。
よってボタンをaddする方が正しいのです。
651 :
648 :04/10/14 20:00:19
652 :
648 :04/10/14 20:04:56
>>650 そうなのですか。もっと上のAPI見ないといけないのかも。
ありがとうございました。
653 :
デフォルトの名無しさん :04/10/14 20:18:34
>>652 いえ、上級じゃなくて普通のAPIリファレンス、java.docに
載ってるんですが。。。
java1.3以降は、推奨されませんと。。。
JToolBar の親の Container に add(Component) が定義されてるよ JButton は Component のサブクラスだから,このメソッドに渡すことができる.
655 :
648 :04/10/14 20:53:35
>>653 ありがとございます。そうかかれていました。
>>654 そういうことですか。
親切にありがとうございます。
皆様いろいろありがとうございました。
656 :
デフォルトの名無しさん :04/10/14 22:14:53
アプレットで url.openStream() すると access denied って言われるんですけど、そういうものですか? url は httpでyahooのサイトを指定してます
>>656 そーゆーもん。
yahoo のサイトにアクセスできるのは yahoo にあるアプレットだけ。
JTreeでディレクトリツリーを描く場合、 空のディレクトリはどう表現すべきなのでしょうか?
空のディレクトリに見えるように表現すべきなのでは?
つまり、
661 :
デフォルトの名無しさん :04/10/15 00:41:53
空のディレクトリは常にExpand状態にすれば良いって事だな。
っつか、JTree の(っつーかTreeUIの)アイコン使わないで自前のアイコン使えばいーだけのよーな気もするが。
ディレクトリは枝、ファイルは葉で表すのが適当だろうけど、 枝と葉の違いは子を持っているかどうかだけみたいなので、 子を持たない枝とか、あるいは見えない・選択できない子を持った枝とか 作れないかなぁ、と思いまして。
664 :
デフォルトの名無しさん :04/10/15 01:06:09
>>663 >>枝と葉の違いは子を持っているかどうかだけみたいなので、
違います。
そんだけならディレクトリなら問答無用で javax.swing.tree.TreeNode#isLeaf() で false を返せば良いだけのような…
>664 ガ━━━(゚Д゚;)━━━ン!!!!! ・・・ということは何か根本的な解決方法が見つかりそうですね 皆さんありがとうございます
>public boolean isLeaf() >このノードに子がない場合は true を返します。 >子のないノードと、子を持てないノードを見分けるには >(たとえば、ファイルを空のディレクトリと区別するには)、 >このメソッドを getAllowsChildren と組み合わせて使います。 うわぁ、公式APIに・・・出直してきます ありがとうございました
668 :
デフォルトの名無しさん :04/10/15 01:17:18
>>666 JTreeのコンストラクタには複数の種類があり、その中に
asksAllowChidrenのパラメータを持つコンストラクタがあります。
それをtureにすると、各TreeNodeのコンストラクタ時にallowChildrenフラグを
tureにしたノードだけを枝とし、falseにしたノードを葉とします。
子の有無は関係なくなります。
>>668 JTree は葉か節かの判断に TreeModel#isLeaf(Object) を使用する。
で、特に指定しなければ JTree は DefaultTreeModel を使用し、
コンストラクタで asksAllowChildren に true を渡さなければ
DefaultTreeModel は TreeNode#isLeaf() を見る、と思ったが。
もっとも、DefaultMutableTreeNode#isLeaf() だと子の有無を返しちゃうんだけど。
だから asksAllowChildren を false もしくは無指定で
isLeaf() のオーバーライドでもいけるはず。
670 :
デフォルトの名無しさん :04/10/15 10:40:54
質問させてくれませんか?コンピュータサイエンスってどんな勉強してどんなことができるようになるのでしょうか? マジレスです
671 :
デフォルトの名無しさん :04/10/15 10:45:23
プログラミングだけに留まらず、あらゆる知識が必要です。 手始めに情報処理試験の勉強からはじめたほうがいいでしょう。
質問です。 AppletとServletの通信でデータのやり取りする Webアプリを作ってるんですが、 Appletから送信するデータ量が多くなると その後の処理の画面で「400」や「403」などのバットリクエスト エラーが出てしまいます。 データ量が少なかったら問題ないのですが・・・・・ どなたか思い当たる原因とか知らないですか?
673 :
デフォルトの名無しさん :04/10/15 11:07:00
java.sql.Dateとjava.util.Dateの違いはなんですか?
java.util.Dateは時・分・秒・ミリ秒まで保持しているが、 java.sql.Dateは時以下の単位の部分はゼロに正規化されている。
676 :
670 :04/10/15 11:36:15
>671 大学で何を専攻しようか迷っているんです。CSときくと格好いい感じがありますね。 どういったことができるようになるのか教えてもらえればありがたいです
>>676 カコイイとかだけで選ぶとデジドカになるだけだからやめた方がいいぞ
678 :
670 :04/10/15 11:46:11
>677 ええ、今悩んでるんですよ。やりたいことが山ほどあるんです。そこでCS勉強すればどういったことができるようになるのか と思ったんです。
>>678 やりたいことがあるんならそっちに進めばいいじゃない
>>678 >>679 に賛成だ。
やりたいことが山ほどあるなら、なにができるかわからないことやらずに、やりたいことやれ。
681 :
オブジェクトの複製 :04/10/15 12:20:08
オブジェクトの複製について質問させて下さい。 ClassA a = new ClassA(); a.x = "xxxx"; a.y = "yyyy"; a.z = "zzzz"; ClassA b = a; b.x = "XXXX"; とすると a.x も "XXXX"になってしまいますよね。 同メモリを参照しているからだと思うのですが、 これを別メモリにする方法を教えて下さい。 以上お願いします。
>>681 ClassA b = new ClassA();
b.x = a.x;
b.y = a.y;
b.z = a.z;
b.x = "XXXX";
683 :
681 :04/10/15 12:24:48
>>682 申し訳ないです。
それをしたくなかったので質問しました。
他に方法はないでしょうか?
同じオブジェクトなんだから同じメモリにあって当然だと思うが。 意図がわからない。
>>683 Cloneableインタフェースを実装
>>683 なんでそれをやりたくないん?
めんどくさいってだけなら、プログラマやめるかCommons BeanUtils使え。
>>681 コピーコンストラクタ定義すれば?
public ClassA(ClassA original){
x = original.x;
y = original.y;
z = original.z;
}
>>686 めんどくさいというのもありますが、
自分の作成したところではないのであまり触りたくなかったのです。
Cloneableでできたようです。
皆さんありがとうございました。
689 :
デフォルトの名無しさん :04/10/15 13:54:40
>>688 Cloneableにしてcloneを自作したり、コピーコンストラクタを自作
しなくても、もっと簡単にメモリごと複製する方法はあります。
呼び出した側のフレームウィンドウだけを閉じたいのですが、 setDefaultCloseOperation(2); ではできません。 フレームA上のボタンを押すと、フレームBが現れるイベントで実現したい のです。
691 :
デフォルトの名無しさん :04/10/15 16:23:38
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); でOK
各種ファイルを簡単に印刷できるような便利なライブラリはありませんか? フリーでも商業でもOK。
遅れましたが、レスありがとうございました。 いろいろと検討したのですが、 SDKのバージョンが変更できないのと、引数が増やせないという話が 出たので、また別の方法でやろうということになりそうです。 ありがとうございました。
class Test { private B b; public Test() { A a = new A(b); b = new B(); } } こういう形のプログラムを書いてます。Aクラスの中でbのメソッドにアクセスしようとするとぬるぽになってしまいます。確かにaを作るときはbがnullなわけですが、そのすぐ後でbにインスタンスを代入してます。なぜぬるぽになってしまうんでしょうか?
白紙のコピーとってから元の紙に絵描いてるから。
aを作るとき渡すbがnullでどこ指すか分かってないからあとでbを作ってもaのbはnullのままってことですね。 では、AがBへの参照ほしくてBがAへの参照ほしい場合はどう書けばいいんでしょう? class Test { private A a; private B b; public Test() { a = new A(b); b = new B(a); } } だとだめですよね・・・こういう場合何か定石があるのでしょうか?
まず両方を作ってから setXXX で互いにセットし合う。
699 :
デフォルトの名無しさん :04/10/15 18:09:36
>>696 class Test {
private B[] b;
public Test() {
A a = new A(b);
b = new B[]{new B()};
}
}
として、Aクラスの中では、b[0]に対してアクセスするようにすればOK
C++なら参照があるから、スマートにできるんだけどね。。。 同じ参照でもえらい違いでずっこんばっこんじゃ
701 :
デフォルトの名無しさん :04/10/15 18:22:43
すみません、jdk1.5のソースが見たいんですけど、どこ行けばいいですか?
サンマイクロシステムズと5.0のキーワードでGO
せめて何が駄目なのか書けよ
なんだ、ただダメといいたいだけかw
今頃意味がわかった・・・orz
要素数1の配列ほど使いたい物はないけどな
使いたくない と書こうとしたんだがどうでもよくなった ここまできたら要素数1の配列マンセー これでswapできるぞバンザイ
>>699 それじゃ同じヌルポだよ。正しくはこうだろが。
class Test {
private B[] b = new B[1];
public Test() {
A a = new A(b);
b[0] = new B();
}
}
として、Aクラスの中では、b[0]に対してアクセスするようにすればOK
どちらにしろ汚いのでだめ
717 :
デフォルトの名無しさん :04/10/15 19:36:04
class A{ private B b; public A(B[] b){ this.b = b[0]; } } とかやりそう
>>699 のような回答を出す人がいると、このスレの信憑性が
下がるが、ああいう人は極少数なので、これからも呆れずに
どんどん質問してください。
>>694
>>699 氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね
やっぱり
>>699 の方法だめですよね・・・配列使ってるだけでどうしてできるのかわからなかった。
ただ
>>699 にも悪気があったとは思えないけど。
つーかなぜサイズ1の配列なんだ? 値を持ったクラスに適切な名前をつけて作るのが常套手段だろうが。
配列の実体(最低1個でいい)作っておけば渡してもnullにならないからだよね。
あとから配列の中身は設定できる。
でもあまりきれいな方法じゃないね。
>>698 が一番いいと思う。
た、大変申し訳ないんですけど、し、質問です。 私はCプログラマでC++も少しは出来るんですけど、Javaをはじめるのにはなにを用意すればいいんでしょう? Sun MicrosystemsのJavaのページにJ2SE v 1.4.2 JRE とかJ2SE v 1.4.2 SDK よく分からないんです…
>>722 クラス作るよりは、サイズ1の配列を使う方が簡単だからだろうが。。。
いずれにせよヌルポインタを見抜けない
>>699 は、このスレ立ち入り禁止。
727 :
デフォルトの名無しさん :04/10/15 21:28:01
>>724 JREとは、JAVAアプリケーションを動かす為だけの実行環境であり
SDKとは、JAVAアプリケーションの開発環境+実行環境で、JREも含んでます。
よってSDKだけをダウンロードしてください。
現在の開発キットの最新バージョンは、1.4ではなく、「JDK1.5.0」なので
それをダウンロードしてください。
729 :
デフォルトの名無しさん :04/10/15 21:34:24
>>724 あと、jAVAの最新バージョンには、「1.5」と「5.0」の二つの
呼び方がありますが。どちらも全く同じなのです。
全く同じものに、二通りのバージョン名をつけてるのです。
気にせずに「JDK1.5.0」をダウンロードしてください。
JREはしなくていいのです。「JDK1.5.0」に含まれてますから。
迷わずに「JDK1.5.0」だけをダウンロードしてください。
このスレッドで回答権を得る為には、例の試験をクリアしなきゃ いけないはずなんだがな。そうじゃないと回答をカキコしても アップされないんだよ。
731 :
デフォルトの名無しさん :04/10/15 21:48:12
J2SE 1.4.2 SDK しか見つかんないよぉ(;´д⊂ヽヒックヒック
732 :
デフォルトの名無しさん :04/10/15 21:52:54
J2SE2.0で一気に10バージョンが上がるのだろうか? わかりにくいから、3個目のバージョン付けを開発するのだろうか?
次はJ2SE .NET 2006になります。
>>732 J2SE5.0 が出た後で J2SE2.0 出したら単なるバージョンダウンだな。
J3SE 1.0を出して5.0?1.5.0?何それ?とか言い出したりして
たぶん J2SE n.0 -> J3SE (n+1).0 みたいにすると思われ。 J2SE 9.0(1.9.0) -> J3SE 10.0(1.10.0) とか。
JDK1.1からJ2SE SDK1.2になったときもバージョンナンバーのリセットはしなかったしね。
738 :
デフォルトの名無しさん :04/10/15 22:34:28
JDK1.2になる時は、 JDK2.0ってすれば良かったのに。 何故、JAVA2なんて混乱を生むような名前にしたんだ? SUNってデザインにしろネーミングにしろ本当にセンスないね。
>>738 そのアンバランスさが玄人が玄人たる所以なのだよ。
そーいや 1.4.2_06 が出てましたな。
じぇねりくすとか勉強しなきゃ・・・
743 :
724 :04/10/15 23:54:21
無事Java2 SDK, SE v1.4.2_05をDLしました。 ところがインストール中に ソースインストールデータベース C:\WINDOWS\Installer5c1d447.msiからの読み込みに失敗しました というメッセージが出てインストールできません。 どうすればいいんですか?
Genericsに使ったら1.4も現行C#も嫌になった。 どうしてくれる
J2SE5を使えと言う神のお告げです
>>744 sunに1.4.xのコンパイラにGenerics機能をつけるやつあるから探してみ
>>747 adding_generics early access 使うんだったら素直に JDK1.5.0 使ったほうがよさげ。
>>743 ダウンロード失敗の恐れ。再ダウンロードを。
俺のお勧めは J2SE5.0。一応、1.4までのソースもコンパイルできるしな。
何より、バージョンが上なのはJVMが改良されているということだし。
>>744 >>747 それは、EarlyAccessのヤツでは?機能不十分でお勧めできない。
>>694 class Test {
private B b;
public Test() {
b = new B();
A a = new A(b);
}
}
素直にこうするべし。
引数は、「変数そのもの」を渡すのではなく「変数の差すオブジェクト」を渡している。
なので、
>>694 のやり方ではうまくいかない。呼び出しもとの b が変わろうがしったこっちゃないからだ。
>>694 の要求は、「b の 差すオブジェクトが変わったときに、a に教えたい」ということなので
b をプロパティ(getter,setter)で実装してやり、そのsetterの中でaにbの変更を教えてやる、などとするべきだろう。
(個々の代入文の後にaの変更をする場合はロジックが分散して好ましくない)
さらにJava流なら、BChangeListener とか作って、Listenerにaを登録するとかか?
何故、bの差すオブジェクトが変わったときaにわたったオブジェクトもすり返られないのかというと
理由は明確。そんなことが許されれば クラスAで、bがいつすりかわってもよいように作らなくてはいけない。
というか、コアクラスから返ってきたオブジェクトが知らないうちに別のになっていたら?
そんな面倒くさいことにならないように、今の引数の仕組みが出来ているのです。
751 :
デフォルトの名無しさん :04/10/16 13:04:30
actionPerformedメソッド内からmainメソッドにObjectを返したい のですが、不可能でしょうか?
void メソッドと決められているので無理です。
753 :
デフォルトの名無しさん :04/10/16 13:25:19
>>752 何か方法な無いですか?
方法がなかなか見つからなくて。
754 :
751 :04/10/16 13:28:13
mainメソッドから別クラスを呼び出し、そこで値を入力 その結果をmainメソッドで扱う ってプログラムを組みたいです
755 :
デフォルトの名無しさん :04/10/16 13:29:10
Observerパターン 制御の反転
756 :
751 :04/10/16 13:35:18
>>755 デザパタを学ばなくては駄目ですかorz
757 :
デフォルトの名無しさん :04/10/16 13:38:40
そもそもイベントドリブン、マルチスレッドについてわかっていないのが原因
デザパタは学ぶものじゃなくてパクって使うものだ。 実際、755は10行ぐらい懇切丁寧に説明した後に延々と質問・回答のやりとりが 続くであろう事柄をたった2行で表している。
759 :
751 :04/10/16 13:42:39
>>757 ごめんなさい。
mainに拘らなくても動くので、がんばってみます。
760 :
デフォルトの名無しさん :04/10/16 15:35:25
Number クラスに値が再設定できないのはなぜでしょう? もう一度 new するのはコストがかさむと思うのですが。
「値」として扱いたいから。 Immutable イミュータブル 不変クラス あたりでぐぐってみな
>>761 なるほど。ありがとうございます。勉強します。
入出力関係がわかりやすく解説してあるサイトありましたら ぜひ教えてください。
GridLayoutのsetVgapを使いたいのですが使い方が分かりません どうやるんですか?
thanx
765、自己解決しますた
768 :
デフォルトの名無しさん :04/10/17 04:32:30
初歩的な質問なんですが、 受け取ったバイトデータ(byte[])を、int[]、short[]で扱い。 「シフトしてorして」だとパフォーマンスが落ちるのでできれば、 int[] intArray = (int[])binData ; こんな風に出来ればベストなんだけど。 何か方法ないでしょうか?
質問のしかたが初歩的、ということだね。
日本語の初心者だからね。
772 :
デフォルトの名無しさん :04/10/17 04:57:39
>>768 パンツ脱ぎかけのままトイレから出てきたような文章で質問して
恥ずかしくないのか?
>>769 --772
あの質問を読んで、DataInputStream#readInt()による逐次処理とか
ByteBuffer#getInt()を使う事などを、パッと連想もできないような
自称中級者達は黙っててください。
スレ汚しですので。
学校でJavaを勉強しなきゃいけないことになったんですけど 先生の話聞いてノートとってテキスト読んでるだけじゃ さっぱり意味不明な状態です。どうしたらいいでしょう。 なんか本とか買ったほうがいいんでしょうか。
>>7757 学校の勉強程度なら『やさしいJava』を買うといい。
ていうかノートって・・・
まぁ実地が一番だから 一番やさしいJavaの本を買って 初期設定をきっちりして 少しずつ課題をクリアしていくしかない
>>776 『やさしいJava』ですか。んじゃちょっくら探してみます。
っていうかノートとる以外すること無いんすよ授業中。
>>776 自分のコンピュータにJAVAをインストールして、実際に動くか試してご覧
if〜elseをヅラヅラ並べられるようになると楽しくなってくるし、 else ; を忘れて3日くらい悩むのもまた楽し
JListのスクロールバーを選択してるとこにもってきたいのですがどうやるんですか? いまはリストに載せる数よりも表示数を少なくして勝手にスクロールバーがついてるだけの状態なんですけど
>>778 「やさしいJava」は良い本でも役に立つ本でもないけど、簡単なことしか書いてないからやさしいことは確か。
学校で義務として「やらされる」のなら、その本がピッタリ。
先生がJavaわかってない、プログラムわかってない可能性が高いな。
>>781 JList#getCellBounds(int,int) で得られた矩形を表示するように
JScrollPane の JViewport#scrollRectToVisible(Rectangle) を呼ぶ、とか。
784 :
デフォルトの名無しさん :04/10/17 20:45:59
Visual Studio 買うとMFCクラス階層図っていうポスターがついてくるよね? あれの Java 版みたいなやつって無い? 無いよね? 今 AWT/Swing コンポーネントクラス階層図っていうの作ってるんだけど 無駄な努力にならないよね?
やって意味のないことではないけど、その図を見る機会はないはず。 ほとんどの場合JavaDocの階層ツリーたどれば用が足りるし。
786 :
デフォルトの名無しさん :04/10/17 21:03:32
というかJavadocのあれがコンポーネントクラス階層図だろ?
Listenerってのはthreadみたいなものなの?
ぜんぜんちがうぞ
ちがうの? おいらのイメージではsleepしながらイベントを見張ってるのかなと思ってたんだが 内部的にはどうなってんの?
791 :
デフォルトの名無しさん :04/10/17 21:33:13
>>790 内部的にはAWTのイベントループがあって、イベントを監視してる。
キューに入ってきたイベントを引数に、
Component.dispatchEventy(AWTEvent e)
を呼び出す。各コンポーネントは、その中で登録されている
リスナーを自前で呼び出すだけ。
793 :
デフォルトの名無しさん :04/10/17 21:52:07
リスナー自体は、単にObserverパターン。 コンポーネントのイベント伝搬はChainOfResposibilityパターン。
と、パターン厨が申しております。
リスナ自体は別にスリープもしてないし待ってもいない。 リスナを登録する先のオブジェクトが、それっぽいタイミングがきたら 登録されてるリスナの特定のメソッドを呼び出すだけ。 MouseListnerだと、イベント見張ってるのはリスナじゃなくてイベント ディスパッチャのほうで、イベントが起こったら、登録されてるリスナ のメソッドを呼び出す。
796 :
デフォルトの名無しさん :04/10/17 23:43:12
A というクラスのいくつかのメソッド中で、 A のオブジェクトを生成して用いているとします。 A のサブクラスで、それらのメソッドをオーバーライドしなければ、 そのメソッド中では A のオブジェクトが作成されます。 A のサブクラスで、それらのメソッドをオーバーライドすることなく、 サブクラスのオブジェクトを生成するようにする良い方法はないでしょうか。 Class クラスを使えばうまくいくような気もしますが、良く分かりません。 よろしくお願いします。
class A { public static void main(String[] args) { new A().doSomething(); new ASub().doSomething(); } public void doSomething() { A a1 = createInstance(); System.out.println(a1); } protected A createInstance() { return new A(); } } class ASub extends A { @Override protected A createInstance() { return new ASub(); } }
↑ 1.4だとpublic class Aでないとあかんかも。 Aのオブジェクトを生成して用いてるいくつかのメソッド: doSomething()な。 ついでに private A(){}も追加しとけ。
>>796 thisを使えば?
private A getA() throws InstantiationException, IllegalAccessException {
return (A) this.getClass().newInstance();
}
よくわからんが this.getClass().getInstance() とかできるんじゃない?
一般論としてクライアントコードでreflectionは使わない方が良い。Class#newInstance()とか
>>796 っつか、素直にオーバーライドした方がよさげ。
>>801 サーバーコードでならrefrection使ってもいいという理由もナゾだな。
>>803 サーバー?そういう意味じゃなくて、
ライブラリとかフレームワークの中の人が使うのはまぁ良い、という意味。
805 :
デフォルトの名無しさん :04/10/18 02:44:01
class Hoge{ public static void main(String[] args){ int i; int tmp = Integer.parseInt(args[0]); for(i=0; i<tmp; i++){ System.out.println(i); } } } これってふつうにコンパイルできるよね? でもこれと同じ内容をあるプログラム中に書き込むと、コンパイルできない。 tmpのシンボルを解決できませんって出るんだが… tmpを別の名前にしても、別にint型の変数を作ってtmpの代わりに入れても無理。 tmpじゃなくて「9」とかの整数値にすればコンパイルできる… なぜ?
綴りが違うのがナゾだな
>>805 どこか別のスコープでtmp変数を使ってないか確認
>>804 あぁ、そういうことね。
下々のものはリフレクション使うな、と。
>>808 無用に利用しなければいいだけだと思うぞ。
リフレクションを多用するとJavaのコンパイル時の型チェックの機能を活用できないし。
・・・ということが分からず、関数ポインタの代わりみたいに使うというのが好ましくないのだと思う。
コンパイル時型チェックは、最近どんどんどうでもよくなっていってる気がする。
>>804 そゆこと。自分で書くときだって使い分ける。
>>809 アホなこというなよ。型安全性が無くなったらそれはもうJavaじゃない。PerlやRubyと同じ。
すまん。寝ぼけてた。
>>808 そゆこと。自分で書くときだって使い分ける。
>>810 アホなこというなよ。型安全性が無くなったらそれはもうJavaじゃない。PerlやRubyと同じ。
jarファイルの中のリソースを読み込みたいのですが、上手くいきません。 getClass().getResourceAsStream("path")がnullを返します。 ファイルはフォルダ下にあって、"path"は"dir/file.txt"といった感じです。 何が問題なのでしょうか? また、他には、jarファイル中のリソースにアクセスする方法はどういったものがあるんでしょうか?
多分ここで聞くのは場違いな気がするんですが質問です。 Robotクラスを使って(別のアプリケーションを操作するため)マウスボタンを押すプログラムを組んだんですが ちゃんとクリックが受け付けられて期待通り動作できる場合と、クリックしたけどクリックできないという場合があります。 mousePressの後mouseReleaseやってないとかいうことではないと思います。 こういうプログラムからの操作がブロックされてるような場合には Robotクラスではもう不可能でしょうか? というか、このセキュリティ?を破ることは通常の方法では無理でしょうか?」
まずは言語やライブラリ以前にクラスパスを勉強してくださいね というのをここで何度言った&見たことか
>>813 「pathはdir/file.txtといった感じです」ってpathとはいったい何者?
「path」から「dir/file.txt」に読み替えられることを期待しているようだけど、
どういう理屈でそうなるのかさっぱりわからん。
あーもしかして、pathって書いてあるところに実際はdir/file.txtって指定して
あるってことかな? であれば、クラスのパッケージ+dir/file.txtを探しにいく
はずだけど、そうなっているかな? まずは、JavaDocをしっかり読んだほうがいい
と思うよ。
ありがとうございます。 >あーもしかして、pathって書いてあるところに実際はdir/file.txtって指定して >あるってことかな? その通りです。pathはjarファイル内のエントリー名を意図しています。 でもファイルが読めません。
>>817 じゃあ、/dir/file.txtって指定したら読める?
別の問題がありました。
>>818 それも必要でした。
そして解決できました。
お付き合いいただきありがとうございました。
>>815 クラスパスの勉強は言語やライブラリのあとでいいと思うが。
>>812 別に、型安全性がJavaのアイデンティティじゃないし。
重要な特徴ではあるけど。
ま、Javaに型安全性がなくなると、Groovyと呼ばれるわけだが。
>>821 Javaのアイデンテティっつーか、静的型言語のアイデンテティではあるわな。
それに
>>796 のような用途でreflection使って型安全性を崩すのは良くない。
823 :
デフォルトの名無しさん :04/10/18 19:12:50
J2EEパターンの一つ、DAO(Data Access Object)について教えてください。 例えば、「利用者はCustomer(DB)から従業員情報を得る」という仕様の場合、 J2EEパターンによくある例のクラス図は次のようになります。 業務ロジック--->CustomerDAO | | ∨ | Customer<−−−−−− 業務ロジックでDAOを扱う これよりも 業務ロジック-->Customer-->CustomerDAO CustomerでDAOを扱う(業務ロジックはDAOの存在を知らない) の方が仕様に沿っていて良いと思うんですがどうなんでしょうか?
> 「利用者はCustomer(DB)から従業員情報を得る」 これがそもそも違う気が。 「利用者はDBから従業員情報(Customer)を得る」 じゃないの? Customerって従業員情報だよね?
名前じゃないの? Customer(DB)というTable名 どうでもいいがw
・エディタで文字を入力しなくても補完が働いて勝手にコードが完成した。
基本的な質問申し訳ないのですが、以下のソース(★)部分で long型を示すLをつけた場合、add_msecの値は8640000000に なるのですが、つけないと50065408になります。 long型なのでLをつける必要があるのはわかったのですが、 つけない場合は何を計算して50065408という値が出てくるのでしょうか。 ちなみに現在の日付、時刻に100日足した日付、時刻を出すプログラムです。 /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_ mport java.util.*; public class Lesson_10_2_2 { public static void main(String args[]){ long add_msec = 100*24*60*60*1000L; (★) long add_all = 0; Date msec_obj = new Date(); add_all = add_msec + msec_obj.getTime(); System.out.println("経過時間(単位ミリ秒) " +add_all); msec_obj.setTime(add_all); System.out.println("現在日付+100日の時間は " + msec_obj); } } /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
>>828 早速の回答ありがとうございます。オーバーフローすると
下位ビットが使用されるとはしりませんでした。
仕事中にJAVAを勉強し始めたんですが、
今日ここの部分で「何で!?」になったところだったので
回答をいただけてすっきりしました。
でもオーバーフローでプログラムが落ちたりはしないんですね。
私はプログラムでオーバーフローになると落ちるのかと思ってました。
>>829 普通のプログラミング言語は足し算でラップアラウンドが発生、
とか乗算でオーバーフロー発生、とかの場合は落ちないと思う。
>>828 830 831
皆さん回答ありがとうございます。
非常に勉強になります。
また悩むことがあるかもしれませんが、
地道にがんばっていきたいと思います。
また何かありましたらよろしくお願い致します。
class Test{ public int a; } ってやって、別のクラスで Test t[] = new Test[10]; とかってやると、t[0].a 等でアクセスできますか? 最低ランクの質問スマン orz
classとかメソッドの分け方とかヘタなんですけど どうやれば見やすい&綺麗になりますか? 答えとかはないとおもうけど参考になるHPとかあったら教えて下さい
>>833 t[0]に、ちゃんとインスタンスを突っ込んだ後ならそれでOK。
>>833 なんで試してみないんだこの阿呆
それからTest t[] はやめれ Test[] tだ
>>835 嗚呼ああァァ・・・この行だけではt[0]にインスタンスは入らないのか・・・。
そうか、そうだった・・・サンクス
>>836 ゴメン&アリガト
>>836 コーディングスタイルは人や周囲の環境による
今週の金曜日テストなんですけど全然分かりません。 今からでも間に合いますか? もう泣きそうです・・・
間に合うからガンガレ
>>838 けども、自由にやるならTest[]の方が推奨されるよ。
Javaの場合は、Javaとしてのおすすめコーディングスタイルがあるわけだし。
836が阿呆であることと、特にコーディングスタイルを決めてないのならJava推奨のコーディングスタイルを使った方がいいこととは別の話。
どうでもいいけど、ustomer DBに従業員情報て、Employeeじゃないのか。
質問します。 javaで特定のファイルのパーミッションを 変えることはできるでしょうか。
超初心者です。申し訳ありませんが、教えて下さい。 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 のエラーがでます。 1にあったwikiroomのリンクにも行ってみました。 コマンドプロンプトで「java -version」と入力すれば、javaのバージョンは 表示されます。 どの設定を直せばいいのかを教えて下さい。 宜しくお願いします。
JREしか入っていない
質問なんですが、javaでUSB またはComポート(RS-232)を使うには、どうすればよいでしょうか?
>>851 レス、ありがとうございます。
なにをしたいかと言うと、レゴのマインドストームと
通信できるプログラムを作りたいんです。
それで、通信用の赤外線タワーを使いたいんですが、
それがRS-232C用とUSB用があって、どうしようかなと。
どっちのほうが使いやすいでしょうか?
>>847 あ、すまん。1は読んでの上だと書いてあるな。ごめん。
856 :
589 :04/10/19 10:20:37
>>854 ありがとうございます。
ひとまず、RS-232で組んでみます。
857 :
デフォルトの名無しさん :04/10/19 10:23:55
初歩的な質問なんですが。 a という変数ががなんらかのクラスの参照を持っています。 例えば Object a = new Object();とかでもいいです。 んで Object b = a; と参照を代入したとします。 aもbも同じ参照を持っているわけですから、 b.xxx (何かの値を設定したりとか) というような事をすればaの中の値も 変わるのは理解できます。 では b = null;とした場合、aが保持している参照も消えてしまうのでしょうか?それとも bがただ何も参照しなくなるというだけでしょうか? ここでbが何も参照しなくなるだけだとしたら、2つのクラスが参照している実態を イレースするにはどうすればよいのでしょうか(やはりガーベジコレクションだけですかね?) ふと気になったので質問してみました。 どなたかご教授ください。おねがいします。
>>857 参照をポインタかなんかに置き換えて読めば、すぐ理解できるのでは?
> a という変数ががなんらかのクラスの参照を持っています。
なんらかのクラスのインスタンスの参照ね。
> bがただ何も参照しなくなるというだけでしょうか?
yes
> ここでbが何も参照しなくなるだけだとしたら、2つのクラスが参照している実態を
> イレースするにはどうすればよいのでしょうか(やはりガーベジコレクションだけですかね?)
a, b 以外に同じインスタンスの参照を誰も持っていない場合は
a = null; b = null;
すればよいだけ。
>>857 その場合、bが何も参照しなくなるだけ。
実体は誰からも参照されなくなったら、ガベージコレクションで削除される。
861 :
デフォルトの名無しさん :04/10/19 10:39:22
>>859 >>860 なるほど、やはりそうなんですね。
プログラム組んでてnullを代入するというコードを書いてた時に、実態が消えたら
大混乱だなと思って心配になってしまったんです。
すっきりしました。
ついでに質問なんですが、javaで関数にクラスを値渡しってできないんでしょうか?
(参照渡しではないという意味です)
>>858 ひとまずは、Sunのだけで組んでみようかなと思ってました。
けど、RCX java APIは使えそうなのでこっちでやってみようと思います。
>>861 クラスを渡すって何? java.lang.Class のインスタンスを渡すって事か?
あと、Java には参照渡しは無いぞ。
>>861 呼び出した関数の中で、渡したインスタンスのフィールドを変えられたくない場合は、
そのインスタンスのクラスをimmutableで設計するか、コピーを作って渡すようにする。
>>861 Javaでは全て値渡しですよ・・・っていかん、この話をすると、また無駄に半スレ消費する。
オブジェクトをコピーして渡せば、お望みのことができるかと。
StringBufferなら、
StringBuffer original = new StringBuffer("hoge");
とあったときに、
StringBuffer arg = new StringBuffer(original.toString());
someMethod(arg);
とする、とかかな。
ただ、コピーの方法は、セマンティクスも含めてケースバイケースなので
これで決まり、というものはありません。
>>861 っつか、
>>859 が参照をポインタに置き換えろとか書かれてるじゃん。
C/C++しか出来ない人むけにいうと、
Javaの参照型の渡し方はC/C++でポインタを値渡ししてるのと似てる。
867 :
デフォルトの名無しさん :04/10/19 11:02:15
>>864 >>865 >>866 なるほど、VBみたいに値渡しか参照渡しを選ぶというような方法はないんですね。
つまりいつも参照を意識していないといけないわけですね。なんか、知らないとこで
変なバグがでそうで怖い。自分忘れっぽいもので。
とりあえず、皆さんご返答ありがとうございました。
というか、変更不可オブジェクトにするか、コピーしてから渡せばいいだろ。
869 :
デフォルトの名無しさん :04/10/19 11:09:11
論理輪である縦線2つはどうやって出すんですか? もう、全然分かんないよ〜
>>869 > 論理輪である縦線2つはどうやって出すんですか?
使ってるキーボードによる。
とりあえずコピペ用に貼っておくか 「||」
> 使ってるキーボードによる。 あとは OS のキーボードレイアウトの設定とか。
>847さん、ありがとうございます。 早速、いろいろググってみます。 >853さん、とんでもないです。分かりづらい 文章で申し訳ありませんでした。 また、不明な点があればご助言を聞き来ます。 ありがとうございました。
>>872 まじでJREだけ入れて、SDKを入れてないんじゃない?
コーディングなんては、所詮下流工程のプログラマーの 仕事だからね。誰でもできる。 そこら辺の勉強はなるべく短くすませて先に進みたい罠
じゃあコーディングなんてせずにいきなり設計から勉強すればいいじゃない
>>874 下流の仕事分からずして上流になるなかれ。
まさに「罠」
874みたいなのにコード書かせたくないし コーディングをわかってないヤツに設計させたくない。 使えないSEの典型にならないようにせいぜいがんばってくれや。
釣りなのに・・・
釣りじゃない。 ソフトウェア開発では個々の部分はブラックボックスにして構わない。 ブラックボックスの開発は、そこいらから下流プログラマーを 持ってきて割り当てるだけでよい。 一番難しい、そして重要なのは、その区分けと、それらを無難に まとめあげる設計技法だ。コーティングは所詮、単純労働だし 肉体労働だからね。誰でもできる。
コーダとプログラマはちがう
>コーティングは所詮、単純労働だし肉体労働 こういうヤツが仕切るからあべしみたいな会社がのさばる。 人海戦術と残業で乗り切れ!みたいな。 FもNもHも似たような物か。
実際に設計やってる奴は単純労働や肉体労働の方が得意っつーか むしろ単純労働や肉体労働しかできなかったりする罠。
>>880 同じだよ。
コーダーの装飾名がプログラマだ。
プログラマのやる事は、所詮「コーディング」だけだ。上流工程担当者の
指示&割り当て通りにコーディングするだけのロボットであり、流れ作業の一部だ。
「プログラマ」なる名将は、何時か自分のアイディアで開発が出来る日が
来るって望みをつなぐだけの、願望にすぎない。
そういう既出過ぎる退屈な雑談は2行2レス以内にまとめるかマ板で延々ループしてろ
>>883 オマエのところでは「コーダーの装飾名がプログラマ」なだけ。
「コード書かせると危険な奴の装飾名が設計」なところもあったり。
Javaの話題ではないな
釣り師(
>>883 )はカエレ
・コーディングとは、設計の甘い見通しが厳しい現実に出逢う夜明けだ。 ・設計とコーディングは相互に補いあう創造的なプロセスである。 -- by Kent Beck.
>>883 のところは仕切っているSEが糞だなw
指示&割り当て通りにコーディングするだけのロボットができる作業は
人海戦術に頼らないで自動生成するんだよ。
技術を知らないからそいういう手法もXPのような開発手法も知らないで
ひたすら残業になるんだろうねw
>>885 ワロタ。その通りだ。
>>888 自動生成できる程のものじゃないコードが多いのが現実だ。
自動生成できないコード=高度なテクニックを要されるコード
と勘違いしてないか? 自分達のやってる作業(コーディング)が
価値あるものだとでも思いたいのだろうが、上流工程担当者から見れば
全くのお笑い草なのだよ。
勝利宣言キター
おれたちでオートコーダを実装しないか?
883はつまりそういう教育を受けて鵜呑みにしてますってことだろ。 設計する人間は当然自分の設計したものを(時間と金さえ許せば)コーディング できる能力が無いといけないと思うけどね。役割が違うからやってないだけで。 ほとんどの「上流工程担当者」さんは自分が設計したものが実現できるものなのか、 あるいは実現に工数がかかるものなのかも把握しとらんよ。だって、そんな 下級な仕事はとっとと卒業しちゃったのでさっぱりわからんそうな。
>>889 > 自動生成できる程のものじゃないコードが多いのが現実だ。
設計が悪い
>>892 >>自分が設計したものが実現できるものなのか、
>>あるいは実現に工数がかかるものなのかも把握しとらんよ
設計者にとって個々の部分が実現できるかどうかは、もはやコーディングを
理解してるかどうかの問題でなく、レベルの高いコーダーを連れてくるか
誰かがダメで時間がかかるのなら、また別の人間を連れてくるって
人事管理的な問題になるからね。
俺が思うに、レベルの高いコーダーが必要かどうかも判断できない人が大部分かと。
898 :
デフォルトの名無しさん :04/10/19 18:37:46
JButton の BeanInfo ってどうやって取得できるの? 今 SDK の rt.jar なんかを調べてコードも見てみたんだけど、 それらしき記述が無いの。なのに使ってるエディタは 普通にさりげなくアイコンとか取得できちゃってるし。
エディタが気を利かせて特別扱いしてるだけだろ
キーボードのキーを押すとイベントが起きるんですが キーを長押しされると処理が追いつきません。 一時、キーイベント(?)をとめるにはどうすればいいですか?
901 :
デフォルトの名無しさん :04/10/19 20:59:54
>>899 「Java Beans のインポート」を選択、わざと
SDK に入ってる rt.jar を選択してみる。
そうすると「ユーザーが追加した beans」みたいなところに
JButton や JFrame が表示されるわけだが、ちゃんとアイコンも表示されている。
これってコンポーネントがアイコンを持っているって考えられない?
※ ちなみに使ってるエディタは Netbeans 3.6 と Bean Builder 1.1β
>>900 KeyListenerでは入力をためる処理だけやって
実際の処理は別のスレッドでやりつつ
溢れた入力は適宜捨てる、とか
>>870 どうもありがとうございます!
この恩は忘れません。
>>901 考えられない。
アイコンもなにも元は*.javaというテキストファイルだぞ
>>904 「アイコンもなにも元は*.javaというテキストファイルだぞ」
クラスファイルもなにも元は*.javaというテキストファイルだぞ
サーブレットもなにも元は*.javaというテキストファイルだぞ
JDKもなにも元はjdk-1_5_0-windows-i586.exeというネイティブバイナリだぞ
いろいろな使い方が思い浮かぶ、夢のある言い回しですね。
2次元配列が難しいです。 どうしよう・・・
質問があります。 String型の文字列でprintlnでは画面上に表示されないエスケープシーケンス? なども表示させたく文字列のヘキサダンプを行いたいのですが、どのように 行うのでしょうか。
911 :
222 :04/10/19 23:40:35
教えて下さい。 SwingのJButtonコンポーネントに設定されているBackgroundを取得し、 JPanelのBackgroundに設定したいのですがうまくいきません。 Color c = new Color(button.getColor()); こんな感じで変数cにbuttonの設定色をいれたいのですが わかるかた教えて下さい。
で、うまくいかないっていうのは、どういうことをうまくいかないといってんの? ところで、なんでわざわざ新しいインスタンス作るの?
>>912 氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
914 :
デフォルトの名無しさん :04/10/20 00:03:31
>>911 panel.setBackground( button.getBackground() )
でOK
915 :
222 :04/10/20 01:01:05
>912さん ごめんなさい、うまくいかないとはnew Color(button.getColor());の JButtonインスタンスbuttonが「シンボルが解決できない」になるコンパイル エラーのことです。 新しく作ったcをpanel.setBackground(c)ってすればうまくいくかなって 思ってました。 >914さん 有難うございます、出来ました。 自分で複雑に考えすぎました。
>>915 ちょっと待った。APIドキュメントをちゃんと読むようにすること!
質問はその後! 読めばgetColor()がないことくらい20秒で分かることだから。
917 :
デフォルトの名無しさん :04/10/20 01:46:41
jadを試したみた。 衝撃を受けた。 だから、age。
過労でストレスがたまってるのかもしれないが、
簡単な質問があると、わざわざおちょくる嫌な奴がたまにいるよな。
素直に答えるか、無視するかすればいいのに。
>>916 のことじゃないよ。
過労でストレスがたまってるのかもしれないが、
足りない質問への指摘があると、わざわざおちょくる嫌な奴がたまにいるよな。
無視すればいいのに。
>>918 のことじゃないよ。
920 :
デフォルトの名無しさん :04/10/20 05:06:37
UNIXサーバ(solaris)上の、ファイル名(EUC_JP)に 「〜 ‖ - ¢ £ ¬」が含まれるファイルを、 Fileクラスなどで、オブジェクト化するときに、FileNotFoundExceptionが発生してしまいます。 どなたか、解決策をご存じないでしょうか。 ・ファイル名を規制する。 ・ファイル名をEUC_JP以外で保存する。 というのは、なしでお願いします。 「〜 ‖ - ¢ £ ¬」が含まれない日本語ファイル名のファイルは、正常にオブジェクト化できます。 jdk1.2.xです。
いずれも、EUC と UCS (unicode) の相互変換で問題がある 文字のような気がします。EUC->UCS 変換をしたり してませんか。そして、祖のときに互換文字ではな違法に変換さ してたりしませんか?
>>921 さん、ありがとうございます。
確かにFULLWIDTHをマッピングしています。明日(今日)、互換文字で試してみます。
void method(){ } と void method() { } どっちがいいですかね?
appletを含むコードとHTMLテキストを例題通りに作ったのですが, appetクラスを生成した後にHTMLファイルをダブルクリックしても うまくappletの内容が表示されません。appletの範囲が前面灰色になった ものしか表示されません。 一応同じフォルダの中にHTMLファイルとappletがあるクラスを入れているのですけど なぜか表示されません。どこか設定の問題なんでしょうか? どうすれば表示できるのか教えていただけないでしょうか。
WINDOWS XPです。
>>925 ブラウザ、JavaVMの情報があるといいかも。
>>919 いや、ほんとに916のことじゃないんだが。
悪意が怖い。
駄レスごめん。
>>930 どっちにしてもデメリットあるけど、
最近はEclipseみたいなツールでそれをフォローする設定ある
から昔みたいに気合入れて議論するほどでもないかな。
フィールドにアクセスするときはthis.memberを強制するとか、
フィールドとローカル変数の名前がかぶったときはエラー/警告出すとか。
getter/setterつくるときは_/fみたいな接頭子を考慮するとか。
>>917 jad触ってみた。
うはー、こりゃ難読化ツールも必要だわな。
jadだと逆コンパイルできないコードが存在する
>>931 >>919 は オレじゃないっす。
>>916 はAPIドキュメント読む癖を付けといたほうがいいと思って。
>>933 いや、むしろ見られて恥ずかしくないコードを書いておくべきか、と。
セキュリティの観点からなのであれば、コードは読まれるものとして
コードの外に安全を確保する部分を出しておくことを考えないといけないですよね。難しいのですが。
プラウザはインターネットエクスプローラです。 java VMについてですが,eclipseでコードを作ってて,デフォルトのままです。 あまり詳しくないのですが windows->設定で見ると 名前欄にJ2re1.4.2_05のとこにcheckがあって タイプは標準 VMとなっております。
>>936 まず自分で作ったアプレットをどのような環境(VMの種類・バージョン等)で
動かしたいのかアプレットの要求仕様を「自分で」決める。
MicrosoftVMを使うかとかSunのやつ使うかとか。
次にその環境に合わせてブラウザで使うVMを設定する。
次にEclipseのコンパイラを動かしたい環境に合わせて設定する。
「ウィンドウ」->「設定」->「Java」->「コンパイラ」んとこの
バージョンとか。
また、動かなかった場合はブラウザからJavaコンソールを
開いてエラーメッセージを確認すること。
>>936 そこのVM設定はEclipseが使う設定であって
ブラウザから呼ばれるVMじゃないから注意。
>>935 916には何の批判もないんです。
質問や姿勢への指摘が嫌いって言ったわけじゃないし。
わかりにくいレスしてすみません。
たまに、相手が初心者でものを知らないのをいいことに、
まわりくどく馬鹿にしたみたいなレスを返してるのを見ると気分が悪かったので、
ついつい書いてしまいました。流すべきでした。
今朝は、私の読み方も悪かったと思います。申し訳ない。
>>932 >フィールドにアクセスするときはthis.memberを強制するとか、
>フィールドとローカル変数の名前がかぶったときはエラー/警告出すとか。
>getter/setterつくるときは_/fみたいな接頭子を考慮するとか。
3番目のやり方はわかるんですけど、それ以外のやり方がわからんです。
どの変使うんだろ?
>>940 「インスタンス・フィールドへの無条件アクセス」
「ローカル変数宣言が他のフィールドまたは変数を隠蔽」
>>941 どうもです。見っけました。Code Assist じゃなくて Compiler で設定する話だったのか...
英語の方では Unqualified access to instance field でした。
こういうオプションがあると言うことで、少し考えに自信をもてました。
943 :
デフォルトの名無しさん :04/10/20 19:22:51
人工無能を作りたいんですけど、参考になるようなサイト を教えてください。
自分自身が無能なら、それで充分だろ
このスレも本物の人間の書き込みは20レスくらいだしね
>>947 レスアンカーがついてないレスは人工無能スクリプトによる可能性が高い。
ごめん、間違えて走らせたオレの人工無能スクリプトが
>>947 を投稿した。
え、このスレって俺を含めて人工知能が書いてるんだよ?
まじでおねがいするなら、ふさわしいスレに行けばいいのに。
人工無能の定義って、何だろう。 「何か(仮)」は、人工無能に入るんだろうか。 面白そうな定義だな。でも、作るとなるとひたすら面倒なだけって気ガス。
954 :
デフォルトの名無しさん :04/10/20 21:39:50
えーと・・テーブル上で書き込んだ計算式を 計算するようなクラスはどうすれば・・ TreeNodeで分岐させて作ればいいのかな?
マジ素人的な質問ですみません ファイル出力用のソースを書いておりますが、 出力時、8KBに達するとエラーで落ちてしまいます。 出力classはBufferedWriterを使用してます。 「おい、こんなん、こうやればチョチョイのチョイだよ!」と 仰る神々の皆様、この哀れな名無しに救いの手を!!!
アイフルのまでとは言わないが、ふつーに意味不明な会話が出来ればいい。 質問の内容をデータベースに溜めて、上位10件くらいの返答内容を準備する。 その繰り返し。 最終的に人工無能同士で会話をさせたい。
>955 ソースうpきぼん。
>>956 特定のキーワードに反応する答えを用意しておけばいいだけだろ
>>954 自分で計算するクラスを作るか、計算してくれるクラスを探すか。
ちなみに、javax.swing.tree.TreeNode は計算してくれない。
そもそもクラスじゃないし、用途が全然違う。
960 :
デフォルトの名無しさん :04/10/20 21:56:22
学校でJavaプログラミングを勉強しているのですが、 マスターできれば何ができるようになれますか? 新一年生です・・・
ベーション
>>955 エラーの全文とソースを載せろ。話はそれからだ。
学校なんて点さえ取れれば、なんでもよい 趣味で何かしたい!と思うなら、先生に勉強の仕方を聞いて 自分でやるしかない 専門学校でないなら、ほとんど意味はない
>957 恥ずかしながら公開します。 部分的ですが。 // ファイルオープン(出力ファイル名=ofilename) FileWriter fw = new FileWriter(ofilename); //バッファ書き出しコンストラクタ定義 BufferedWriter bw = new BufferedWriter(fw); //バッファ書き出しコンストラクタ定義(入力ファイル名=A[i]) BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(A[i]), "SJIS")); //一行読み込み lineStr = fileLine; //出力 bw.write(lineStr +"\n"); こんな感じです。よろしくお願いします。
> マスターできれば何ができるようになれますか? こういう質問する時点で、向いてないか先生の教え方が悪いか、だな。 「教養身につけると何ができるようになれますか?」 みたいなね。
>>966 英語なのでわからないと思いますので
ソースを書きました。
>967 いや、その英語のやつが重要なんだが。
>>967 お前、おもしろいよ。
ソースも該当部分のせてないしな。ReadLineで帰り値の
チェックしてなくて、ぬるぽ出てると適当に書いてみる。
特殊な環境でOutOfMemoryErrorなのかもしれぬ。 8KBに達すると落ちるってなんかかわいいな。
967の955は偽者ですよ。
このスレの内に解決するんかな ともあれ>971、本物なら早くエラーも晒しんさい。
973 :
デフォルトの名無しさん :04/10/20 22:21:20
>>963 そうなのか・・・
じゃあ、テキトーにやるかな。
実行時、例外エラーが起きてるらしく、以下のソースに飛びます。 catch(ArrayIndexOutOfBoundsException ex){ System.out.println("Err:" ); すみません、ホント初心者なんでデバッグ情報拾えないんです。 拾い方を囁いてくださる神々の皆様!哀れな子羊に福音を!!
福音の使い方が間違ってる。
配列が足りないんじゃん。 そこに、ex.printStackTrace()って入れてみれば発生箇所もわかるはず。
まともに例外処理できないならcatchするなと。つーかそれ 入出力関係ないだろと。
>>974 > System.out.println("Err:" );
ex.printStackTrace(); にしろ。
>配列が足りないんじゃん。 >そこに、ex.printStackTrace()って入れてみれば発生箇所もわかるはず。 とりあえず、やってみます。 皆さんありがとぉー!!
やってみました。 なんかでました。 とりあえず、貼ります。 java.lang.ArrayIndexOutOfBoundsException: 6 at KAWASE001.CutRateFile(KAWASE001.java:36) at KAWASE001.main(KAWASE001.java:102)
ソースコードの36行目がおかしいのかなぁー?
>>960 マスターすればJavaプログラムが組めるようになる。
>981 エラーにはそう書いてあるね。 ただ、A[i]の宣言・生成の辺りを見直した方が良さそうだ。
>983 ありがとうございます。 入出力含めてこの周辺見直してみます! また報告します!!
途中経過です。 入出力とも特に変な文字列はありませんでした。 A[i]の辺りを貼ります。 //ファイル存在チェック File f =new File(idir); ←引数でDirを指定。 String A[] = f.list(); int Cnt=0; try{//@ルーチン for (int i=0;i<=100;i++){ //Aファイル検索 if (A[i]==null) break; Cnt++;//File Found!! A[i] = idir + A[i]; //DIR,File名結合 引数でディレクトリを指定し、そのディレクトリ内にファイルが存在するか 否かチェックし、存在していればそのファイル名を取得し、ディレクトリ名とファイル名を結合しています。 出力結果を見るとファイル名はすべて取得できているんですが、 ファイル出力はできないんですよね。謎です。また調べます。ノシ
for (int i=0; i<A.length; i++) { でヨサゲ。
>986 試してみました。 なんで for (int i=0;i<=100;i++){ が for (int i=0; i<A.length; i++) { でもいいのか 理解できてませんが、動作は一緒でした。 エラーも一緒でした。 ぴったり8,192バイト出力して止まるんですよねぇー。 なぞだ。
>>955 ・・・・・
System.out.println(A.length);
for (int i=0; i<A.length; i++) {
System.out.println(i);
・・・・・
と直して出力結果見せて。
フラッシュしてるのか?
>988 ありがとう。 結果を貼ります。 N:\>java KAWASE001 N:\input\ output.txt 0 N:\input\aaa.txt 1 N:\input\AfandMadia.dat 2 N:\input\Americas.dat 3 N:\input\Asia.dat 4 N:\input\EU.dat 5 N:\input\US.dat 6 java.lang.ArrayIndexOutOfBoundsException: 6 at KAWASE001.CutRateFile(KAWASE001.java:38) at KAWASE001.main(KAWASE001.java:103) 途中のフルパスファイル名は、無視してください。 確かにこの順序で読み込んでいるんですが、出力ファイルは4の次のEU.dat の内容の途中で止まってます。
>>955 System.out.println(A.length);
の結果は?
>出力ファイルは4の次のEU.datの内容の途中で止まってます。
バッファリングしてるんだから、おかしくはないよ。
>System.out.println(A.length); の結果は? これです。 0 1 2 3 4 5 6 ・・・あれ?なんで7個でてるんだ?入力ファイル6個なのに。
for文をもう一度確認しる。
994 :
デフォルトの名無しさん :04/10/20 23:27:55
9月にJavaかCかのプログラミングを選択するので Javaを選んだんですが結果的には良かったんですかね?
>>992 それは
System.out.println(i);
の部分の出力です。
A.lengthの値はAの配列の数なので固定されてるはず
>>992 おかしい。System.out.println(A.length); が、出ていない。
forのループの終了判定は本当に、 i<A.length に変えたか?
コンパイルはしなおしたか?
>>994 プログラマとしては C が読めないのは致命的。
Java は必ずしも致命的ではない。
C が出来ないなら、悪い選択をした可能性が高い。
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。