トップページ⇒tech
1001コメント350KB

【初心者】Java質問・相談スレ22【大歓迎】

■ このスレッドは過去ログ倉庫に格納されています
0001sageNGNG
http://pc2.2ch.net/test/read.cgi/tech/1048689029/
0153デフォルトの名無しさんNGNG
>>152
Jakartaかな。

CPANにあるようなものはJavaでは標準になってることが多いけど。
0154デフォルトの名無しさんNGNG
>142
素朴な便乗質問なのですが、Javaのガベージコレクションは
パフォーマンスが低下するのでしょうか?
0155デフォルトの名無しさんNGNG
>>154
とまる。
0156154NGNG
がちょーん。古のBASICと同じってことでつか。
0157デフォルトの名無しさんNGNG
-Xincgcなら止まらない。
メモリサイズが無限に増えつづけるがいつか解消されるだろう。
015879NGNG
>>79です。
教えてもらったように、getClass()の方法でファイルシステムに
依存しないで相対パスでのファイルアクセスを試してみましたが
うまくいきません。正確には、java testで実行するとうまくいきま
すが、java -jar test.jarで実行すると読めないようです。

classpathはc:\testを設定しています。何が原因でしょうか。

http://lounge.dip.jp/~yoshinoya_off/up/data/test.lzh
0159デフォルトの名無しさんNGNG
http://www.geocities.co.jp/SiliconValley/6064/java_link.html
0160デフォルトの名無しさんNGNG
interfaceをimportするのって、普通?なのでしょうか

なぜimplementsではないのでしょうか
0161デフォルトの名無しさんNGNG
>>154
ただし、シューティングゲームみたいにタイトなリアルタイム性が求められる、
とかの特殊な用途でもない限り、殆ど問題にならない。
0162デフォルトの名無しさんNGNG
>>160
List list = new Vector();
とかやるときは import するけど、そーゆー事ではなくて?
0163デフォルトの名無しさんNGNG
>>160
importの意味を間違えているだけでは?
0164160NGNG
>>163
確かにそうかもしれません
っていうか、違いがわからないです
0165U ◆CZtFsGiu0c NGNG
>>164
importはプログラム内でインタフェース名やクラス名を記述するときに
パッケージを指定しなくてもいいようにするだけ。別にimportを指定
しなければならないわけではない。
0166デフォルトの名無しさんNGNG
JDK1.3.1にて。
ディレクトリ階層の深いところに、いきなりファイル作るのは無理ですか?
"/foo/bar/hoge/test.txt"
みたいなファイルを、間のディレクトリ含めていきなり作成したいんです。

String data = "テストデータ";
FileOutputStream outFileStream = new FileOutputStream( "C:\\foo\\bar\\hoge\\test.txt" );
OutputStreamWriter outWriter = new OutputStreamWriter(outFileStream);
BufferedWriter bufWriter = new BufferedWriter(outWriter);
bufWriter.write(data , 0 , data.length());
bufWriter.close();

こんなことすると、java.io.FileNotFoundExceptionがでちまいます。。。
0167デフォルトの名無しさんNGNG
File file = new File("C:\\foo\\bar\\hoge\\test.txt");
File dir = file.getParentFile();
dir.mkdirs();
OutputStream out = new FileOutputStream(file);
...
0168デフォルトの名無しさんNGNG
Javaを古いバージョンのものから、
JDK1.4.1にバージョンアップするにはどうしたらいいんですか?
0169デフォルトの名無しさんNGNG
>>168

バージョンアップは出来ない。
古いのを消してから新しいのを入れるとか、
新しいのを入れて古いのも消さないとか、すればいい。
0170デフォルトの名無しさんNGNG
>>168
ちゃんと設定すれば複数バージョンの共存は可能です。

ディスクスペースが残り少ないとか、
JDKなんぞ一つで十分、ってんなら話は別だけど。
0171168NGNG
サンクスです。
明日やってみまっす。
0172デフォルトの名無しさんNGNG
java.nio.cs パッケージのソースはどこで入手できますか?
0173デフォルトの名無しさんNGNG
>>172
> java.nio.cs パッケージのソースはどこで入手できますか?
sun.nio.cs でした。
0174デフォルトの名無しさんNGNG
現在クライアントアプリケーションからEJBを使って開発予定です。

その時には下記のどっちの携帯が好ましいのでしょうか?
クライアントAPから直接EJBを呼ぶ方法と
クライアントAPからHTTPリクエストを返してServlet→EJBと呼ぶのでは
どっちが好ましいでつか?


0175デフォルトの名無しさんNGNG
>>174
んなの、場合によるとおもうが。
0176デフォルトの名無しさんNGNG
>>145
http://edocs.beasys.co.jp/e-docs/wls/docs70/ejb/EJB_design.html#690681
には
「リモート クライアントでは、WebLogic Server InitialContext ファクトリを使用して InitialContext を取得します。」
とありますが、
これはJavaAplicationを使った場合、(JavaWebStartを使わずに)
クライアントが100台あったら、100台にWebLogic(クライアント?)を入れなければならないということですか?

アプレットを使った場合はJarファイルにWeblogicのクラスファイルも含めということなのでしょうか?
素人で申し訳ありませんが、よろしくお願いします。
0177デフォルトの名無しさんNGNG
>>175
どういう場合どっちを使うべき見たいな指針ってありませんか?
下記の違いの認識であってますか?

■Http+Servletを使わない(直EJB)場合のメリット
クライアントの実装が簡単

■Http+Servletを使った場合のメリット
ファイアウォールを超えられる
0178デフォルトの名無しさんNGNG
>>176

145じゃないけど、そういうことになる。
J2EEはクライアント100台に配布するという使い方は考慮
されていないからね。
0179デフォルトの名無しさんNGNG
>>177
HttpServlet相手にJavaクライアントアプリが会話するのも、
別に難しくはないよ。RMIコールの変わりにHttpConnecitonで
ObjectStream作ってSerializableを投げあえばいいだけだ。
0180デフォルトの名無しさんNGNG
>>176
URLClassLoaderで解決できないの?
EJBと会話できるなら、クラスのダウンロードの可能なはずだが。
0181デフォルトの名無しさんNGNG
だから、HTTPのデメリットである「糞遅い」とメリットの「FW超え」の
トレードオフだけちゃうかな。
0182デフォルトの名無しさんNGNG
あ、もいっこあった。
HTTPServletということは、HTTPサーバとServletコンテナの実体が、
サーバー側に余計に必要だな。
0183デフォルトの名無しさんNGNG
質問です。
http://www.ogis-ri.co.jp/otc/hiroba/others/OO&siken/FE2001b08.html
↑この問題で、mainメソッドに
System.out.println(pants[i]);
てありますが、これでなぜPantsクラスのtoStringを呼び出せるんですか?
System.out.println(pants[i].toString());
に思えてならないのですが。

よろしくお願いします。



0184デフォルトの名無しさんNGNG
>>183
PrintStream の API嫁
0185デフォルトの名無しさんNGNG
>>183
5.4 文字列変換
http://www.y-adagio.com/public/standards/tr_javalang2/conversions.doc.html#186035
15.18.1.1 文字列変換
http://www.y-adagio.com/public/standards/tr_javalang2/expressions.doc.html#39990
0186デフォルトの名無しさんNGNG
>>183
PrintStream内部で
object.toString()
しているからです。
なのでpantsの中でtoString()をオーバーライドしておけばprintln(Object object)時の
動作を変えることができます。
0187デフォルトの名無しさんNGNG
>>186
>PrintStream内部で
>object.toString()
してないよ。厳密には。
0188デフォルトの名無しさんNGNG
あ、PrintStream#println(Object) ってあったのか…
0189デフォルトの名無しさんNGNG
APIのソースを抜粋。

java.io.PrintStream

  public void println(Object x) {
    synchronized (this) {
      print(x);
      newLine();
    }
  }

  public void print(Object obj) {
    write(String.valueOf(obj));
  }

java.lang.String

  public static String valueOf(Object obj) {
    return (obj == null) ? "null" : obj.toString();
  }

というわけで、
>>183 の場合は、結果的には、toString() を明示的に呼び出している、ということでした。
0190デフォルトの名無しさんNGNG
だからソースなんて要らねっつの API 読め 読みほどけ こにょこにょ
0191デフォルトの名無しさんNGNG
JAVAを勉強したいのですが
アプレットは勉強しない方が良いですか?
0192デフォルトの名無しさんNGNG
http://www2.leverage.jp/start/
0193デフォルトの名無しさんNGNG
今サーブレットを勉強しているのですが、
クラスファイルを一旦削除してしまうと、もう一度追加しても
「HTTP Status 503 - サーブレット」のエラーが出てしまい、実行できません。
どうしたら良いのですか?
0194デフォルトの名無しさんNGNG
レス遅れスマタ。。。
>>167
クスコ!! ヽ( ・∀・)ノ
0195デフォルトの名無しさんNGNG
やい!もまいら!

文字列の最後から4文字を抜き出す方法を
教えていただけませんでしょうか。
0196デフォルトの名無しさんNGNG
str.substring(str.length() - 4);

4文字未満の時のことは知らん
0197デフォルトの名無しさんNGNG
String str = "それくらいAPIみて調べろ。ボケェ!";
String subStr = str.substring(str.length() - 4);
System.out.println(subStr); // <- "ボケェ!"を出力
0198デフォルトの名無しさんNGNG
>>195
str.substring(str.length() - 4);
0199デフォルトの名無しさんNGNG
str のメソッドの引数に str 自身を使っていいんですかとかいいそうな気がするな
0200195NGNG
さんきゅ!助かった!

APIはメソッドの概要だけ見たんだけど......
スマソ!調査不足を許してぇ。
0201才甲金 ネ右一NGNG
JAVAで実装されたSQLサーバーを
WEBサーバーに埋め込みたいんですけどどうすれば出来ますか?
0202デフォルトの名無しさんNGNG
>>201
やりたいことを整理して考え直すか質問しなおす。
020379NGNG
>>158ですが、よろしくお願いします。
何が原因かわかりません。
0204デフォルトの名無しさんNGNG
とりあえずWEBサーバをキックしてフックして
SQLサーバーにアッパーかな?
で、最後にWEBサーバにパンチでオーけっぇぁsjうぇk
0205才甲金 ネ右一NGNG
馬鹿家畜以下立上極悪ムヒ電波腐乱ノ メ几 
火戸王里土鬼里貝イ氏月ヒ里予良卩目木又  し ろ
0206デフォルトの名無しさんNGNG
>>203
\\をFile.separator
0207デフォルトの名無しさんNGNG
>>203
どれどれ優しいお兄さんが答えてあげようね
(直リンが 403 ではじかれたので、
 いちいちうpろだTOP行ってから探し当てて ダウンロード中)
って jar に test.txt はいっとらんやんけ。
jar から読み込んだ class に対しては
getResource する相手も jar に入ってなあかんかったように思うが脳
0208デフォルトの名無しさんNGNG
>>207
jarファイルにtest.txtいれとけってのは至極もっともな指摘だけど、
きっと、test.txtはjarファイルに入れたくないんじゃないかな?
ユーザー固有の設定ファイルにしたいとか。
そうしたいならjavaの実行オプションで-classpath .\data とかすればOK?
0209デフォルトの名無しさんNGNG
java -classpath .\test.jar;. test
とかやって起動すればできるかも。
0210デフォルトの名無しさんNGNG
コマンドプロンプトから文字列を入力し
判定するにはどうしたら良いですか?
下記はコマンドラインから END が入力されるまで
ループという処理なのですが END を入力してもループを抜けません!!
while( ( s = br.readLine() ) != "END" ){

何故なのか教えてください!!
0211デフォルトの名無しさんNGNG
>>210
readLine() って一行読み込みだから、
ENDとしか書いてない行を入力したときにループを抜けます。
0212デフォルトの名無しさんNGNG
>>210
while( ( s = br.readLine() ).equals( "END" ) ){
と equals 使った方がよさげ。
0213デフォルトの名無しさんNGNG
VB上がり?文字列の比較はequals()でやって。
くわしくはここを読んで。
ttp://www.gimlay.org/~javafaq/S008.html#S008-01
これFAQだよね。テンプレに入れといたらどうかな
0214210NGNG
>>211-213
ありがとうございました。
0215デフォルトの名無しさんNGNG
Javaぐらいだよね。文字列に=が使えるくせにオブジェクトの比較になるのって。
FAQになるほど誰もが引っかかる。
0216デフォルトの名無しさんNGNG
すぐ慣れるけどね。
0217デフォルトの名無しさんNGNG
なれが必要ってのは悪いことなんだけどなぁ。
0218デフォルトの名無しさんNGNG
ひっかかるのはスクリプトやらやってた連中でしょ。

C/C++ から来た連中って引っかかるか?
0219デフォルトの名無しさんNGNG
C++ みたいに、言語仕様上演算子が拡張可能ならよかったのかも知れんな。
String に = を必要とすることなんてまずないもんな。
0220デフォルトの名無しさんNGNG
ちゃうかった == だった
0221デフォルトの名無しさんNGNG
コレクションってなんですか?
簡単な説明をよろしく
0222デフォルトの名無しさんNGNG
>>221
切手
0223221NGNG
>>222
くだらね。
0224デフォルトの名無しさんNGNG
>>221
これは読んだか?
ttp://java.sun.com/j2se/1.4/ja/docs/ja/guide/collections/overview.html
0225183NGNG
>>184-190
ありがとうございました。おかげでスッキリしました!
API 読みほどきます。
022679,158NGNG
>>206-209
どうもすみません。ご指摘のようにclasspathの指定をつけて
みましたが、やはりJARから起動すると読めないようです。
これから、ファイルセパレータを環境から取得する方法(>>206)
を試してみます。
022779,158NGNG
http://cgi.io-websight.com/index2/uploarder/img/hare2382.lzh

とりあえず現状のサンプルプログラム一式。
まだセパレータは入れてません。
0228デフォルトの名無しさんNGNG
>>226
動いたよ。
17行目の"data/test.txt" を "/data/test.txt" に変更して、
java -classpath .;test.jar test
とすれば動く。
0229228NGNG
>>228の変更いらないね。そのままで
java -classpath .;test.jar test
とやっても動く。なんだ、もう解決してるよ
023079,158NGNG
http://cgi.io-websight.com/index2/uploarder/img/hare2383.lzh

最終的にこのようになりました。とりあえずJARからの起動でも
動いているようです。これでプラットフォーム非依存で動くのか
ちょっと不安ですが、とりあえずこれでいこうと思います。

ありがとうございました。
023179,158NGNG
こちらのミスのようで、どうもすみません。
改めて確認してみます。
023279,158NGNG
>>228-229
classファイルを直接実行すれば動くんですが、JARから起動しようと
すると動きません。つまりやりたいのは、

java -jar test.jar [必要ならオプション]

で動くようにすることです。

java -jar test.jar -classpath .;test.jar

では動きませんでした。
0233228NGNG
java に -jarオプションをつけると、クラスパスの指定が無効になるようでした。
javaコマンドのマニュアルにこう書いてありました。
>このオプションを使用すると、指定した JAR ファイルがすべてのユーザクラスのソースになり、ユーザクラスパスのほかの設定は無視 されます。
-jarオプションを使う限り、java.lang.Class#getResource()でjarファイルの外の
リソースにアクセスすることはできない、ということか。
ところで、>>230の方法だとプラットフォーム依存以前にカレントワーキングディレクトリ依存に
なると思うんだけど、いいの?
0234デフォルトの名無しさんNGNG
>>233
基本的な疑問だが、なんでJarの外にリソースだけださんといかんの?
プラットフォームフリーにするなら、Jarに含めて一緒に配れよ。
それならgetResource()でとれるから。
023579,158NGNG
>>234
Jarに含めていっしょに配ってもいいですが、ユーザによる「遊び」が
面倒になります。
たとえば、ビットマップボタンの画像を差し替えたいとか、データだけ
差し替えて遊ぶようなことがやりにくいわけです。
あと、アプリケーションで作ったデータファイルをサブディレクトリに
格納したい場合も外部にディレクトリを持たないといけません。
023679,158NGNG
>>233
要するに、SwingアプリケーションでJARをWクリック、もしくはJARへの
ショートカットなり何なりをWクリックで起動できればいいです。
カレントワーキングディレクトリはJARの存在する場所で、そこから相対
パスでサブディレクトリにアクセスできれば問題ありません。
0237デフォルトの名無しさんNGNG
>>235
そんなの拡張子をZIPに変えて解凍してもらって云々・・・っていうのを
マニュアルに書けばいいじゃんか
「お遊び」できるユーザーならそんくらい説明書いときゃ出来るだろ?
それか、お前が自動でデータ差し替えプログラムもいっしょに配布すれば?
そんぐらいできるだろ?

>>236
それからな、マニフェストファイル編集しないとそれは出来ない
しかも、俺の経験上
JARファイルダブルクリックで起動できるのはWindowsだけ
0238デフォルトの名無しさんNGNG
殺伐としてまいりました。
0239デフォルトの名無しさんNGNG
>>236
Windows上で、Explorer上のアイコンのダブルクリックで起動させたいということなら、
javaコマンドを実行するVBScriptを書くといいんじゃない?俺はやった経験がある。
一応シェルスクリプトも用意して、マルチプラットフォームを謳ってみるとよいかと。
0240デフォルトの名無しさんNGNG
>>239
大抵の人は、Win用のbatファイルと、UNIX用のshファイルを、起動用に
準備しているね。

ダブルクリックでJarが起動できるのは、Windowsが拡張子Jarに対して
javawを実行するようにレジストリでマッピングされているからでぇす。
拡張子xlsのファイルでエクセルが自動的に起動するのと、おんなじでぇす。
でもって、それはWindows独自の機能でぇす。
0241デフォルトの名無しさんNGNG
>>236
それを本気でやりたいなら、インストーラ作りませう。
Windows用にはlnkファイルを作って、デスクトップやスタートフォルダ
やプログラムフォルダに張っとけばオケ。
0242デフォルトの名無しさんNGNG
自分で作ったクラスファイルを配列化して、そこにクラスをコピーしているのですが、
新しくオブジェクトを入れたときに前のオブジェクトまで連動して値が変わってしまいます。
なんでなんでしょう??

MyClass[] mc = new MyClass[3];

for (int i=0; i<mc.length; i++) {
mc[i] = getMyclass();
if (i != 0) System.out.print(mc[i].getValue() + " "); // ここの値と
System.out.println(mc[i].getValue()); // ここの値が一緒になる
}

タスケテ キヴンヌ
0243デフォルトの名無しさんNGNG
>>242
> 新しくオブジェクトを入れたときに前のオブジェクトまで連動して値が変わってしまいます。

文脈から察するに

if (i != 0) System.out.print(mc[i-1].getValue() + " ");

ではないのか?
0244デフォルトの名無しさんNGNG
> 243

ぐはっ!

カキコミスです。
ソース上はそうなっていますです
0245242NGNG
ちなみに

MyClass[] mc = new MyClass[3];
int wk[3];

for (int i=0; i<mc.length; i++) {
 mc[i] = getMyclass();
 wk[i] = i;

 if (i != 0) System.out.print(mc[i-1].getValue() + " "); // ここの値と
 System.out.println(mc[i].getValue());           // ここの値が一緒になる
 if (i != 0) System.out.print(wk[i] + " "); // ここの値と
 System.out.println(wk[i]);          // ここの値は異なる
}

と、なっています
0246デフォルトの名無しさんNGNG
>>244
じゃぁ getMyclass() が同じインスタンスを返しているのだろう。
↓のコードを入れて見れ。

if(i != 0 && mc[i] == mc[i-1]){
  System.out.println("同じインスタンス");
}
0247242NGNG
>246

「同じインスタンス」は表示されませんでした・・・

ヽ(TДT)ノ
0248デフォルトの名無しさんNGNG
>>247
じゃあ getValue() が同じ値を返すようなインスタンスを getMyclass() が
返しているのだろう。てかそもそも getMyclass() ってなにやってんの?
0249デフォルトの名無しさんNGNG
>>248
シングルトン…だったら、>>247にはならんよな。
0250242NGNG
通信でサーバーから帰ってきた電文を
いろいろ加工してプロパティに保存するクラスです

class MyClass {
 private static int prValue;
 public static int getValue(){return prValue;}
 public static void setValue(String str) {
  //いろいろなしょり
 }
}

大雑把に、こんな感じです。
0251デフォルトの名無しさんNGNG
>>250
プ
0252デフォルトの名無しさんNGNG
>>250
貴様。eclipseにコピペして実験してみた俺が馬鹿みたいじゃないか

とりあえず動かしたいなら>>250のstaticを全部外せ
本でも読んでstaticの勉強しろ

ついでに何でstaticをつけたのか教えてくれ
■ このスレッドは過去ログ倉庫に格納されています