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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2008/02/08(金) 19:48:24
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

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

前スレッド
【初心者】Java質問・相談スレッド111【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1200151522/

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝のう存じます。

次スレは>>980あたりで。
0951デフォルトの名無しさん2008/03/01(土) 03:33:04
>>949
javadoc -encoding UTF-8
0952デフォルトの名無しさん2008/03/01(土) 03:37:38
>>949
javadocだけじゃなくてコンパイルするときにも警告が出ない?
システムのデフォルトの文字エンコード以外を使うときはencodingオプションを
0953デフォルトの名無しさん2008/03/01(土) 07:52:08
本当に基本的な質問で申し訳ありません。
フォントを変更したときに
setFontでPLAINに変更してもデフォルトのボールドのかかった
フォントが印刷に反映されません。
どこかで読んだと思い過去スレで探したのですが見つかりません。
教えていただければ幸いです。
0954デフォルトの名無しさん2008/03/01(土) 09:02:08
public class sample69 {
public static void main(String[] args) {
p_calc.Calc calc =new p_calc.Calc();
System.out.println(calc.sum(1,2));
}
}
コンパイルすると、
0955デフォルトの名無しさん2008/03/01(土) 09:02:59
c:\source>javac sample69.java
.\p_calc.java:3: ')' がありません。
int sum(int i; int j){
^
.\p_calc.java:3: ';' がありません。
int sum(int i; int j){
^
.\p_calc.java:8: クラス sample68 は public であり、ファイル sample68.java で宣
しなければなりません。
public class sample68 {
^
sample69.java:3: p_calc にアクセスできません。
クラスファイル .\p_calc.java は不正です。
ファイルにクラス p_calc が含まれていません。
削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。
p_calc.Calc calc =new p_calc.Calc();
^
エラー 4 個
これが出ます。原因はなんでしょうか?
0956デフォルトの名無しさん2008/03/01(土) 09:18:13
>>955
1. 2 と同じ原因。i の後のセミコロン。
3. ファイル名と public なクラス名が違う。
4. p_calc クラスがコンパイル出来ず、実行ファイルが見つからない。
0957デフォルトの名無しさん2008/03/01(土) 09:46:26
sample69をコンパイルしようとしているのに、sample68のことが出るって変じゃあないですか?
0958デフォルトの名無しさん2008/03/01(土) 10:34:17
>>957
とくに変じゃないよ。
sample69 で使われている p_calc.Calc を見つけるために p_calc.java
もコンパイルしているんでしょう。
0959デフォルトの名無しさん2008/03/01(土) 10:51:05
今日の日付を
 Date date = new Date();
 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
 String today = sdf1.format(date);
で取得して、日付2008/3/10と比較させ今の日時より前か後かという判定を
行いたいのですが、具体的にどうすればよいのでしょう?
0960デフォルトの名無しさん2008/03/01(土) 10:57:08
>>959
Calendar#afterとCalendar#beforeを読むべし
実際はGregorianCalendarになるけどな
0961デフォルトの名無しさん2008/03/01(土) 10:59:05
>>960
ちょっと調べてみます
0962デフォルトの名無しさん2008/03/01(土) 11:21:03
音声認識に興味があるんだけど、Java Speech APIで実用に耐えられそうですか?
それともC++あたりに鞍替えした方がいいですか?
0963デフォルトの名無しさん2008/03/01(土) 11:23:35
�_
09649592008/03/01(土) 11:27:16
調べて書いてみたのですが、今日の時刻はこんな感じでよいのでしょうか?

 SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd");
 Date now = new Date(); //現在時刻を取得
 String today = dateformat.format(now); //変数todayに今日の時刻をyyyy/MM/dd型でいれる
0965デフォルトの名無しさん2008/03/01(土) 12:08:15
面倒くさいから、y*10000+m*100+d同士で比較しちゃう。
0966デフォルトの名無しさん2008/03/01(土) 12:17:14
Strutsアプリケーションを作成しているのですが
セッションIDをSHA-1でハッシュ化するにはどうしたらよいでしょうか?
09679592008/03/01(土) 12:20:16
ここまでできました
 //今日の日付を取得
 Date now = new Date(); //今日の日付
 SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd"); //型の指定

 //日付の比較
 if (now.before(dateformat.parse("2005/1/1"))) {
 //今日が2005/1/1より前のときの処理
 }else{
//今日が2005/1/1より後のときの処理
}

ただ、これだと1番最後の行でエラーがでてしまいます・・
エラーは 「処理されない例外の型 ParseException」です
09689592008/03/01(土) 12:21:38
エラーは一番最後じゃなくて
if (now.before(dateformat.parse("2005/1/1"))) {  のところでした
0969デフォルトの名無しさん2008/03/01(土) 12:41:34
>>966
Javaでダイジェストを生成する
ttp://www.atmarkit.co.jp/fjava/javatips/117java021.html

>>967
> 数値: フォーマットには、パターン文字の数は最小桁数になります。
二文字使ってるから最低二桁なのでは?
09709592008/03/01(土) 12:52:53
いろいろ調べてるんですがよくわからないことばかりです
日付の比較のところがよくないとは思うのですが;;

// 今日の日付を取得
Date now = new Date(); //今日の日付
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd"); //型の指定
String today = dateformat.format(now); //変数todayに今の時刻がはいる
解約予定日を取得
SimpleDateFormat kaiyaku = new SimpleDateFormat("yyyy/MM/dd");
String kaiyakuyoteibi = kaiyaku.format(2005/10/15);

// 日付の比較
if ( ) {
//System.out.println("今日は2002/06/10よりも前の日です。");
}else{

}
0971デフォルトの名無しさん2008/03/01(土) 13:09:40
時刻も含めて比較したいなら、Date#compareToでできる。
日付で切り捨てたいなら、Calendarに変換してsetで時刻を0にする。

ユーティリティメソッド作ってそこで比較すべし。
あちこちで比較してたら、バグの温床。

ついでに言えば、「今日の日付を取得する」もユーティリティメソッドにして、
システムプロパティなどで、「今日の日付」を設定できるようにしておくと、
わざわざシステム日付を変更しなくとも、日付が変わったときのテストができる。
0972デフォルトの名無しさん2008/03/01(土) 13:12:13
>>947
権限の低いクラスローダでロードしたクラスを挟んでスクリプトを呼ぶといいんじゃないかな、と推測だけで言ってみる
0973デフォルトの名無しさん2008/03/01(土) 13:39:35
スレ違いかも知れませんが…

Commons/Net 1.4.0 のFTPClientを使っていて 昨日から原因不明のエラーが多発してました
ようやく判明した原因は、FTPClient#listFiles()が返すFTPFile[]の要素が
なんと2/29のタイムスタンプのファイルについてはnullになってしまう事でした!
とりあえずサーバの関連ファイルをtouchして急場をしのぎましたが
この件について善後策を相談するのに最適のスレなどがあれば教えて下さい
0974デフォルトの名無しさん2008/03/01(土) 13:51:14
>>973
ドキュメントにバグの報告先とかメンテナの連絡先が書いてあるはずだから、
最小の再現コード付けてレポートする。
0975デフォルトの名無しさん2008/03/01(土) 14:50:50
勉強のためにファイル転送のプログラムを作っているのですが、
いまいち上手くいきません。流れとしては、
�@(送り手) FileChannel(sourceChannel)でファイルを読み込む
�A(送り手) SocketChannel(destinationChannel)で相手に送る
�B(受け手) SocketChannel(sourceChannel)で受け取る
�C(受け手) FileChannel(destinationChannel)でファイルに書き込む

送り手
while(destinationChannel.isConnected()){
 buffer.clear();
 if(sourceChannel.read(buffer) < 0)
  break;
 buffer.flip();
 destinationChannel.write(buffer);
}
受け手
while(sourceChannel.isConnected()){
 buffer.clear();
 if(sourceChannel.read(buffer) < 0)
  break;
 buffer.flip();
 destinationChannel.write(buffer);
}

bufferはByteBuffer型になっています。
これを実行すると、送り手はエラーもなく正常に終了しているのですが、受け手で
「java.io.IOException: 既存の接続はリモート ホストに強制的に切断されました。」というエラーが出てきます。
エラーが出た場所 => if(sourceChannel.read(buffer) < 0){

長文な上にわかりにくい文章かもしれませんが、
なぜこうなるのか教えてもらえないでしょうか?
0976デフォルトの名無しさん2008/03/01(土) 15:02:45
>>975
データの受信自体は問題ないのですか?

単にデータを送るだけだと、送り手側でソケットを閉じると、
受け手側でエラーが出るはずですが…

何らかのプロトコルで「送受信完了」をやり取りする形にすれば
問題のある状態なのかどうか判断できると思います
0977デフォルトの名無しさん2008/03/01(土) 15:11:10
勉強のためならまずCでやったほうがいいよ
Javaでやっても意味ないよ
0978デフォルトの名無しさん2008/03/01(土) 15:27:11
質問させてください

String str = "12345";
str += "abcde";

これで連結しようとするとrangeが足りないと出ます
すでにあるStringクラスのオブジェクトに文字列を連結するための
メジャーな方法などがあれば教えてください
0979デフォルトの名無しさん2008/03/01(土) 15:56:12
>>976
データの受信自体が出来ないみたいです。
送り手側は一通りプログラムが実行されて終了するのですが、
受け手側は if(sourceChannel.read(buffer) < 0) の部分で処理が止まっているみたいです。
受け手は、送り手が書き込むのを待っている状態になっているんでしょうか?

>>977
時間に余裕が出来ればCも勉強しようと思っています。
今は就職活動中であまり時間が無くて、息抜きでやっている状態なので...
助言ありがとうございます。
0980デフォルトの名無しさん2008/03/01(土) 16:00:40
>>978
不可能
09819782008/03/01(土) 16:02:28
自己解決しました
スレ汚しごめんなさい
0982デフォルトの名無しさん2008/03/01(土) 17:44:15
ServletContextを得るためのgetServletContext()というメソッドがありますが、
APIを見てみるとServletContextはインタフェースなのでオブジェクト化は出来ませんよね。
getServletContext()は、実際にはServletContextではなく、ServletContextを実装するサブクラスを作ってるんでしょうか?
0983デフォルトの名無しさん2008/03/01(土) 17:46:00
ServletContext context = getServletContext();
System.out.println(context.getClass().getName());
0984デフォルトの名無しさん2008/03/01(土) 18:13:50
次スレたててみる
0985デフォルトの名無しさん2008/03/01(土) 18:18:51
次スレ
【初心者】Java質問・相談スレッド113【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1204363011/
0986デフォルトの名無しさん2008/03/01(土) 19:00:59
>>985
乙彼Death
0987デフォルトの名無しさん2008/03/01(土) 21:31:24
>>975
送り側はちゃんと閉じてる?
0988デフォルトの名無しさん2008/03/02(日) 02:22:23
PHPを学習した後だとJavaの習得は容易ですか?
0989デフォルトの名無しさん2008/03/02(日) 02:31:14
いいえ
0990デフォルトの名無しさん2008/03/02(日) 02:38:08
PHPの知識は役立たないの?
0991デフォルトの名無しさん2008/03/02(日) 02:47:56
javaの勉強はじめました。

ネットワークとかGUIとか使って何か作りたいのですが、
何も思いつかないので、
パケットモニタ(?)(今どんなメッセージで通信されているか)みたいなのを作りたいのですが、
ネットワークに関しては、どの変の勉強すれば早そうでしょうか。
この辺のクラスは古いから使わないほうがいいとか、
この辺使えばすぐじゃないかとか教えていただけると助かるのですが、
助言もらえませんか。

GUIに関しては、本とWebを参考にして手をつけていたら何とかなりそうな気がしているのですが、
ネットワークは難しすぎて…。
0992デフォルトの名無しさん2008/03/02(日) 03:16:15
Java→PHPなら簡単
0993デフォルトの名無しさん2008/03/02(日) 03:18:43
>>991
何をしたいのか本人すら分かってないのに他の人に聞いても分かるはずないよ
ネットワークって具体的に何?サーブレットでWebアプリ作るとかじゃ駄目なの?
0994デフォルトの名無しさん2008/03/02(日) 03:22:47
パケットモニタはドライバ組まないと無理だ。
通信なら Socket 使えばいい。
0995デフォルトの名無しさん2008/03/02(日) 03:36:45
>>934
>synchronized付いてるから同時には呼び出されない
え?メソッドレベルの排他というのは、一つのメソッドに複数のスレッドが同時に入れないだけで、
アクセスするメソッドが別なら排他されないのでは?やば、今までずっと間違えてきたかも。。。
0996デフォルトの名無しさん2008/03/02(日) 03:38:58
なんかいろいろ勘違いしてるなw
0997933, 9952008/03/02(日) 03:44:36
>>934
いやいや、やっぱり同時アクセス可能ですよ。でないとnotifyAll()でwait()を解除してあげられないです。
0998デフォルトの名無しさん2008/03/02(日) 03:47:47
インスタンスメソッドの synchronized 修飾子は synchronized(this){ } でメソッド内全てを囲ったのと等しい。
クラスメソッドの synchronized 修飾子は synchronized(Queue.class){ } と等しい。
0999デフォルトの名無しさん2008/03/02(日) 03:51:58
http://www.amazon.co.jp/dp/4797337206
1000デフォルトの名無しさん2008/03/02(日) 03:55:06
1000 なら Java 死滅確定
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。