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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/21(火) 06:11:54
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下の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 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。

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

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

JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/

次スレは>>980あたりで。
0446デフォルトの名無しさん2006/12/02(土) 07:44:37
>>445
右詰で表示したい文字列の左端 = 右詰で表示したい文字列の右端 - g.getFontMetrics().getStringBounds(右詰で表示したい文字列, g).getWidth()
でも
右詰で表示したい文字列の左端 = 右詰で表示したい文字列の右端 - g.getFontMetrics().stringWidth(右詰で表示したい文字列)
でもどうぞ
パディングなんて無駄なことはいらない
0447デフォルトの名無しさん2006/12/02(土) 07:50:23
>>446さん
ありがとうございます。
こんなところ迄今の自分ではたどり着ける訳が
ありませんでした。
0448デフォルトの名無しさん2006/12/02(土) 07:56:36
素直に>>438のようにdrawStringで表示するときに文字列の右端の座標で指定したい
って質問すればすぐ回答が得られたと思うよ
0449デフォルトの名無しさん2006/12/02(土) 08:25:38
>>448さん
このg.drawString(kingakuFormat.format(kingaku1), 250, 316+ line2*12);
は、Jetbeeでオーバライドされています。
ですから、同じ長さの文字列を渡したいのです。



g.drawString(kingakuFormat.format(kingaku1), 250, 316+ line2*12);
0450tom2006/12/02(土) 08:28:17
417です。
tomcatをインストールしました。localhost:8080をブラウザから指定すると、tomcatの画面
にはなりました。次に、webappsディレクトリの下にentryというディレクトリを自分なりに
つくり、その下にWEB-INFディレクトリを作りました。そして、ブラウザから、localhost:8080/entry/
とやると、HTTPステータス404のエラー画面になってしまいます。どうしてでしょうか?

環境変数はCATALINA_HOMEでPATHは;%CATALINA_HOME%binとしました。
コンソールでもset pahコマンドでpathの確認もしました。

なにか間違ってるのですかね?

>>421
エラー画面は、
Type: ステータスレポート メッセージ:/entry/ 説明 :The requested resource (/entry/) is not available.
と出てきています。

どうすればいいんですかね?
0451デフォルトの名無しさん2006/12/02(土) 08:34:54
drawStringがオーバーライドされてるの?
なら、オーバーライド後のメソッドの仕様が分からないことには何とも言えんが、
drawString(String,int,int)の第3引数がオーバーライド後も文字列の左端の座標の指定なら
与えるべき座標は計算できるのでは?
0452tom2006/12/02(土) 08:51:51
450です。
ちなみに、コマンドプロンプトから、cdコマンドを使いentryディレクトリ
まではいけます。
助けてください・・・・お願いします。
0453デフォルトの名無しさん2006/12/02(土) 08:59:25
>>451さん
今まで経験した言語では例えば12文字の長さの文字列
を左の印刷開始位置を指定すれば文字列に空白やカンマが
含まれていても正確に右詰されて印刷できたもですから、
javaでも同じかと思いました。
また、同じ12文字を渡すのに毎回座標を計算しなければならないのは、
なんとも腑に落ちないものでしたので、私の理解が足らないと思い込んで
いました。必ず同じ長さで文字列を整形できるクラスのメッソドが
あるのではないかと。


0454デフォルトの名無しさん2006/12/02(土) 09:12:03
>>451
GraphicsのdrawStringは抽象メソッドだからオーバーライドされているのは当然

>>453
単に等幅のフォントしか使ってなかっただけじゃないのか
0455デフォルトの名無しさん2006/12/02(土) 09:27:54
>>454さん
そのようですね。
javaで等幅のフォントを指定する事はできますでしょうか?


0456デフォルトの名無しさん2006/12/02(土) 09:43:33
455です。
javaで等幅のフォントを指定する事はできますでしょうか?
調べました。
Font theFont = new Font("MSP明朝 ", Font.PLAIN, 10)にしてありました。
もう少し調べてみます。
0457デフォルトの名無しさん2006/12/02(土) 09:50:52
456です。
Font theFont2 = new Font("Courier", Font.PLAIN, 10);
g.setFont(theFont2);

Courierは等幅のフォントですがだめでした。

0458デフォルトの名無しさん2006/12/02(土) 10:05:47
457です。
コンソールでは綺麗に右詰で右に整列しているのですが、
Jetbeeというオープンソースのライブラリの問題なのかな、
そんな事はないとおもいますが。
その他は綺麗に印刷ができているので。
みなさんありがとうございました。
0459デフォルトの名無しさん2006/12/02(土) 10:10:47
>>415
このケースでは?
ttp://support.microsoft.com/kb/895959/ja
0460デフォルトの名無しさん2006/12/02(土) 10:26:02
>>450
だから、/WEB-INF/web.xmlは置いたのか?って聞いてんだよ。
環境変数はOKだとも言ってんだろ?
同じこと何度も書くな。うざい。
0461デフォルトの名無しさん2006/12/02(土) 10:27:58
JetWriter jw = new JetWriter(true, false);
if (jw.jetPrintDialog()) {
jw.jetOpenReport();
Graphics2D g = jw.jetGetGraphics2D();
g.drawString("JetBee Sample 1 Report", (int)(400 - g.getFontMetrics().getStringBounds("JetBee Sample 1 Report", g).getWidth()), 150);
g.drawString(" 2,33 , 45t", (int)(400 - g.getFontMetrics().getStringBounds(" 2,33 , 45t", g).getWidth()), 180);
g.drawString("mogmogu a,,,,...", (int)(400 - g.getFontMetrics().getStringBounds("mogmogu a,,,,...", g).getWidth()), 210);
g.drawLine(400, 100, 400, 250);
jw.jetCloseReport();
}
印刷したけど右に揃ってるぜ
ライブラリが悪いんじゃなくてお前の使い方が悪いだけだ
0462デフォルトの名無しさん2006/12/02(土) 10:28:46
>>446さん
に教えてもらった
g.getFontMetrics().stringWidth(s)で長さをしらべてみました。
System.out.println(s +" "+ s.length()+" "+g.getFontMetrics().stringWidth(s));
   12,090 11 44
300 11 39
13,460 11 44
9,620 11 41
300 11 39
13,180 11 44
9,425 11 41
300 11 39
20,690 11 44
14,755 11 44
300 11 39
11は文字の長さです。
右がg.getFontMetrics().stringWidth(s)です。
このへんかな。
Font theFont2 = new Font("Courier", Font.PLAIN, 10);
g.setFont(theFont2);

等幅フォントのCourierです。
0463デフォルトの名無しさん2006/12/02(土) 10:31:06
>>450
マルチしね
0464デフォルトの名無しさん2006/12/02(土) 10:35:59
>>461さん
ありがとうございます。
そうですか、もう少し落ち着いて良く
調べてみます。
0465デフォルトの名無しさん2006/12/02(土) 10:50:29
>>461
そのソース見るとそのライブラリはGraphics2Dの実装返すみたいだから、
drawString(String s, int x, int y)を使うよりも、
drawString(String s, float x, float y)を使った方がさらに正確かも。
0466デフォルトの名無しさん2006/12/02(土) 11:00:56
450です。
>>460
WEB-INFディレクトリにweb.xmlはおいていません。
0467デフォルトの名無しさん2006/12/02(土) 11:10:19
>>466
置けよ。必須なんだから。動くわけないだろ。
言われたこと全部確認せずに何度も同じことあちこちにコピペするなよ。
うざい。
0468デフォルトの名無しさん2006/12/02(土) 11:10:24
CourierじゃなくてMonospaced指定してみたら?
0469デフォルトの名無しさん2006/12/02(土) 11:24:19
>>468さん
ありがとうございます。
おかげさまで希望通りいきました。

13,460 11 55
9,620 11 55
300 11 55
13,180 11 55
9,425 11 55
300 11 55
20,690 11 55
14,755 11 55
300 11 55
0470デフォルトの名無しさん2006/12/02(土) 11:36:42
せっかく細かく位置を調整できるってのに
右揃えするためにフォントを替えるなんてありえんだろ
カンマが幅広すぎて格好悪いことこの上ねえ
コンソールに出力するのとはわけが違う
0471デフォルトの名無しさん2006/12/02(土) 11:37:16
char data[] = {'Y','A','M','A','D','A'};が1文字ずつマウスのドラッグと共に表示されるプログラムです。
ボタンを押下すると色が変わったりフォントが変わったりするはずなのですが、
変化がありません。ボタンの配置はできているようなのですが・・・どこがおかしいのでしょうか?
javacコンパイラは一応通りました。

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28846
04724712006/12/02(土) 11:39:13
すみません、アップロードに失敗したようですorz
以下URLでお願いします。

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28847
0473デフォルトの名無しさん2006/12/02(土) 11:42:01
>>471
その前の二つは?
0474デフォルトの名無しさん2006/12/02(土) 11:45:36
>>470さん
そうですね。
今回は大変収穫がありました。
細かく位置を調整する方法も教えていただき。

0475デフォルトの名無しさん2006/12/02(土) 11:50:32
>>471
俺アプレットってわからないんだけど再起動するとボタンが破綻するのは仕様?笑
俺の環境だと色やフォントが変わる以前にY A M A D Aの一文字すら表示されないぞ?
04764712006/12/02(土) 12:08:51
>>473
それも失敗したやつです。
削除できたらいいのですがここは上げっぱなしのようで…orz

>>475
環境によるのかもしれません。。。
書いた仕様に対してどこがおかしいのか分かりますでしょうか?
下手にコンパイラが通ってしまうためここから進みませんorz
0477デフォルトの名無しさん2006/12/02(土) 12:16:07
>>476
とりあえず俺が思ったのはアプレットって大きなCanvasなの?
新しくextends Canvasでクラス作ってみたけどだめだったから
paint(Graphics g)のところが何かおかしいんじゃないかと…。
見えてないのかとsetVisible(true);なりやってみたけど出てこないからやっぱり書けてないんじゃないかな…。

俺携帯の開発しかまともにやったこと無いからJ2MEしかわからなくて力になれなくてすまん。
まぁ暇だから俺も一緒に考えてみるよ笑
04784772006/12/02(土) 12:20:40
>>476
とりあえずひとつわかった事はxの座標がおかしくない?
200だから画面外に描画されてるっぽい。
0479デフォルトの名無しさん2006/12/02(土) 12:28:21
>>476
あと
class MyButtonAdapter implements ActionListener {
の
public void actionPerformed(ActionEvent e){
}
の最後にd.repaint();入れたらボタン押すごとに新しい文字が出るようにはなった。
やりたいのはこういうことじゃなかったらどうしようwwww

力不足ですまんねー。
04804712006/12/02(土) 12:35:13
>アプレットって大きなCanvasなの?
>200だから画面外に描画されてるっぽい

すみません、学習が足りずCanvasの意味が分かりませんorz
私の環境ではアプレットは200より十分大きなサイズをhtmlファイル内で記述していました。

>d.repaint();入れたらボタン押すごとに新しい文字が出るようにはなった。
>やりたいのはこういうことじゃなかったらどうしようwwww

いえいえ、ボタンが反応しただけでも進歩しています。
あくまでマウスドラッグ時のmouseDragged()に反応して一定間隔で描画したいのですが、
ボタンが無反応なんですよねorz
0481デフォルトの名無しさん2006/12/02(土) 12:52:27
initメソッド内
×Button button1 = new Button("Black"); 
○button1 = new Button("Black"); 
0482デフォルトの名無しさん2006/12/02(土) 13:05:53
>>480
俺GUIに弱いから曖昧だけどCanvasクラスを利用して描画してるのだと捕らえている。
少なくとも携帯アプリではCanvasを使って描画だったから。

自分はブラウザじゃなくてアプレットビュワーですので画面外なんですねw
ボタンの方は恐らく条件判定が間違っているのだと思う。
if(e.equals(d.button1)) {}とか
if(e.getSource().equals(d.button1)) {}にしても無理だった。
誰かエロい人に聞いてくれ。
ちなみにif節を外したら一定の動作だけどちゃんと動いてくれたからな。

>>481さんの言うように新しいオブジェクトだから受けれて無いだけかも?
もっかい見てこよう。
0483デフォルトの名無しさん2006/12/02(土) 13:20:32
>>480
てか今気づいたけどできてるじゃん?wwwww
フォントのサイズを調整するのは一度フォントを変えてからしか適用ができないのな。
あってるかわからないけど初期でも文字サイズ変えれるようにFONTを設定しておいた。

マウスのドラッグについては左ボタンを長押ししながらマウスグリグリしたらちゃんとその位置に描画してくれるよ?
ドラッグの捉え方を間違えてたのか?
SPEED++とSPEED--の仕様が不明なのでどうもしてないけど。
余計かもしれないけど一応うp。

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=28852
0484ぴゅあ2006/12/02(土) 14:15:27
>>416
BitSetの扱うものがbooleanとされているのはなんでだろう…と思うところもありますが、BitSetは置いといて先にビット,ビット操作について理解してみるのがいいように思います

>>400の話で
>byte[] b1 = {0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1};
で扱おうとするとかならBitSetでもいいたろうかとも思うけど(byteはbooleanに置き換えられた方がいいような気もするけど)
続くコードもBitSetのメソッドに置き換わるくらいで(置き換わることを望んでいるかどうかですけど)

>二進数で
>00100111011
とか考えるなら、>>403らが言ってるようなところとかの方がいいような、BitSetではあまり適さないようにも思えたりします
因みに、かつてビット(0/1)と今で言うbooleanがごっちゃに扱われていたのを明確化されたのがbooleanで、それを逆行してもいいならそれでもいいかと思うけど

>それとも考えすぎかな?
そうじゃないかと思います
(byteと比べて…ということでもあるのだろうと思いますけど)true/falseは数値ではないこと,booleanは実装依存ということになっているのでは?

2進数として扱う(扱える)ことを想定していてビット,ビット操作等が理解できているなら、BitSetよりビット操作(ビット演算とかもある)の方がいいような気もするし、BitSetに変えても書くコード量が減るより増えるようなことがあったりしそうな気がしたり・・・
また、BitSetという名前もついているけど(これはこじ付けにもなるのかな?)
java.util.Setは実装されてないけど、Set系とかのような意識として扱うとかなら、ビット操作とかよりBitSetの方がよかったりするのかも?(処理の中でビット数が不定とか2進数として扱うのに非常に多いとか)
0485デフォルトの名無しさん2006/12/02(土) 14:27:41
ガンダムSEED
0486ぴゅあ2006/12/02(土) 15:05:48
>>480
まとめにしかならないけど

button1フィールドを宣言しているのにinitメソッドでローカル変数button1に格納している(>>481)
(MyButtonAdapter等で見ているのはフィールド)

MyButtonAdapter#actionPerformedでイベントを受け取る(またイベントからの判断)のはやったけど
paint(repaint)が必要であることをAppletに伝えられてない(>>479)

あと、先の話になるのでもあるでしょうけど
(ブラウザだと問題ないのだろうと思うけど)
Applet#initメソッドでaddしたものをApplet#destroyメソッドでremoveしたりするといいのかも
0487ぴゅあ2006/12/02(土) 15:12:46
>>476
言うまでもないことだろうけど

>下手にコンパイラが通ってしまう
コンパイラは構文とか足りないものくらいまでは面倒見てくれるけど
書いたロジックまでは見てくれないから仕方ない
ロジックは自分で考えなきゃ

そこ、ぼやいても仕様がない
0488デフォルトの名無しさん2006/12/02(土) 15:54:40
サーブレットのコンパイルが通りません。シンボルが解決できませんと8個ぐらい
エラーがでてきます。クラスパスをコンソールから調べたところ、
CLASSPATH="C:TOMCAT5_5\common\lib\servlet-api.jar"と表示されました。
何か、クラスパスの設定が間違っているのですかね?
0489デフォルトの名無しさん2006/12/02(土) 15:59:48
>>488
C:\
0490デフォルトの名無しさん2006/12/02(土) 16:06:38
488です。
>>489
C:¥にしてみてもダメでした・・・。
0491デフォルトの名無しさん2006/12/02(土) 16:09:25
何をC:¥にしたの?
0492デフォルトの名無しさん2006/12/02(土) 16:18:42
>>491
そうしました。
0493デフォルトの名無しさん2006/12/02(土) 16:26:09
>491
環境変数の値です。
0494ぴゅあ2006/12/02(土) 16:31:11
>>488
デフォルトならC:\TOMCAT5_5にインストールされるのではないんじゃないの?
0495デフォルトの名無しさん2006/12/02(土) 16:33:13
>>493
\(^o^)/ オワタ

C:\>set (enter)
COMPUTERNAME=C:¥
ComSpec=C:¥
HOMEDRIVE=C:¥
HOMEPATH=C:¥
LOGONSERVER=C:¥
Path=C:¥
PATHEXT=C:¥
...

\(^o^)/ ナンテ コッタイ
0496ぴゅあ2006/12/02(土) 16:35:54
あ でも"TOMCAT5_5"と書いているところを見ると自分でインストール先指定したのかな。。。

で、>>490の後でもエラーの内容も変わらず?
それらのエラーメッセージ挙げてみてもいいのかも?
>クラスパスをコンソールから調べたところ
のところもレスするには微妙に自信なかったりしますけど…
0497ぴゅあ2006/12/02(土) 16:37:32
>>495
あ… そういうことか。。。(>>489-493)
0498デフォルトの名無しさん2006/12/02(土) 16:43:08
もともとのアドバイスは、
CLASSPATH=C:TOMCAT...
を
CLASSPATH=C:¥TOMCAT...
にしろ、という話だったと思うのだが、まさか
CLASSPATH=C:¥
にしちゃったの?
0499デフォルトの名無しさん2006/12/02(土) 16:48:26
>>ぴゅあさんへ
エラーメッセージは、シンボルが解決できませんと表示されています。エラーは全部で6個です。
HttpServletRequestやHttpServletResponseのところに^がでています。

インストール先はC:\Program Files\Apache Software Foundation\Tomcat 5.5になっていたので
インストールするときにProgram Files\Apache Software Foundation\をけしました。
0500デフォルトの名無しさん2006/12/02(土) 16:52:24
>>498
CLASSPATH=C:\TOMCAT にちゃんとしましたよ。さすがにC:\だけにはしていません。
私の書き方が悪かったです。すみません。
0501ぴゅあ2006/12/02(土) 16:53:01
>>499
(ここんとこ触ってないのでCLASSPATHに必要だったかどうかとか定かではないですが)
その消したのを消さないままで書けばたぶん解決するんだろうと思いますよ
0502デフォルトの名無しさん2006/12/02(土) 16:59:46
どうでもいい質問なんですけどぴゅあさんはプログラマをやってらっしゃるのですか?
いつも凄く為になる解説をしていただけるので気になっていました。
0503ぴゅあ2006/12/02(土) 17:43:09
>>502
ここ1,2ヶ月はずっと断り続けていたSE業を押しに負けて引き受けてしまったので
今のところプログラマではないですが(春には戻ってるだろうけど)
なので当面はたまに遊びだけ


どうでもいい質問とかいうのに引っ掛けて(?)どうでもいいような話も加えておけば

プログラマだからというわけでもないと思うけど
ただ、プログラマ(仕事)という意味合いでも解る人が増えてくれれば
仕事としての面では、会社も売上率が上がるだろうし
それに伴ってプログラマとかの給料とかももっと上がったりすることもあるんだろうし

それより、解る人がもっと増えてくれれば
自分自身にとっても仕事も楽になるし
更にもっと色んな仕事(プログラムを書くとか)にも触れることができるようになるだろうなぁ
ってとこ?

別に「凄く為になる解説」と言ってもその僅かな部分しか伝えられないし
仮にそれによってその相手が伸びてきたとしても
そうそう追いつけるものでもないだろうし(追いつかれるかどうかとかはどうでもいいことだけど)
もし追いつかれてしまうようなら、自分がもっと勉強すればいいだけのことですしね

それより、質問に答えようと(課題を消化しようとするようなもの?)考えることが
質問者側には単に答えているだけのように見えてそうで、自身の知り得ていないことを知る機会になるかも
と思っているのかも
0504デフォルトの名無しさん2006/12/02(土) 17:54:50
>502
どうでもいい質問は通りすがりの俺が答えましょう
ぴゅあさんは風水師です。
鬼門の方角にJAVA_HOMEを設定すると運気があがります。
0505ぴゅあ2006/12/02(土) 17:57:26
>>504
>ぴゅあさんは風水師です。
>鬼門の方角にJAVA_HOMEを設定すると運気があがります。

意味解らんし。。。(−−;

てか、マジでそんな話あったら
あちしには難し過ぎて理解できんかも
(かも…じゃなくて、できん(汗))
0506デフォルトの名無しさん2006/12/02(土) 18:04:42
ぴゅあタン(;´Д`)ハアハア
0507デフォルトの名無しさん2006/12/02(土) 18:19:50
ぴゅあってプログラムの知識はあるけど
文章を書く能力はそんなに無いよね
全体的に読みにくい
0508デフォルトの名無しさん2006/12/02(土) 18:21:59
>>ぴゅあさん
classpath解決できましたよ!!ありがとうございました!!コンパイルも無事できました!!
本当にありがとうございました!!
0509デフォルトの名無しさん2006/12/02(土) 19:24:05
classpathは解決できたのに・・・・ブラウザから指定できない・・・

私の場合、ディレクトリはwebappsの下にchapter03-3というディレクトリ
を作り、その下にWEB-INFを作り、そしてweb.xmlをおきました。そして
WEB-INFのしたにclassesディレクトリを作りました。
ブラウザからlocalhost:8080/chapter03-3/Helloと指定すると、エラー画面
になってしまいます。説明 The requested resource (/chapter03-3/Hello) is not available.
というものも表示されています。なぜでしょう?
web.xmlはこんな感じです。
- <servlet>
<servlet-name>mySample</servlet-name>
<servlet-class>Sample</servlet-class>
</servlet>
- <servlet-mapping>
<servlet-name>mySample</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
</web-app>

0510デフォルトの名無しさん2006/12/02(土) 19:41:14
>>509
Servletはデフォルトパッケージで作るな。
0511デフォルトの名無しさん2006/12/02(土) 20:22:45

>>510
509です。どういうことでしょう?ちょっと分かりません。テキストを写して
書いただけなんで・・・。
そもそもweb.xmlは、自分でメモ帳などで書くのですか?どうやって作るもの
なのでしょうか?
0512デフォルトの名無しさん2006/12/02(土) 20:26:26
>>509
釣られてあげようではないか。
classesフォルダの直下にSample.classを置くと幸せになれるよ
Sample.classはいわゆるサーブレットってやつでつよ。
「サーブレット」がなんなのかびみょーなら
ぐぐると易しく解説してくれてるサイトがいぱーい引っかかりますよ。
0513デフォルトの名無しさん2006/12/02(土) 20:33:16
>>512
一応classesフォルダの直下においてあるんですけど。それでもダメです・・
0514デフォルトの名無しさん2006/12/02(土) 20:34:32
>>513
だから、デフォルトパッケージで作るなって。
パッケージを知らないのなら、
Servlet以前に入門書でJavaの基礎から勉強し直した方がよい。
0515デフォルトの名無しさん2006/12/02(土) 20:58:45
>>514
パケージ作りました。パッケージ文も追加してコンパイルいたのですが、やはり
ダメでした。
classes以下では、javaのパッケージの考え方が使われているのは知っていたのですが、
テキストなどには、すべて、デフォルトパッケージでサンプルなどがあるもので・・・。
0516デフォルトの名無しさん2006/12/02(土) 21:11:35
>>515
で、コンパイルされたclassファイルは
パッケージ階層と同じディレクトリ階層を作って、そこに入れた?
それから、web.xmlのクラス名の指定も完全限定名にしたの?
0517デフォルトの名無しさん2006/12/02(土) 21:37:48
>>516
別にデフォルトパッケージでも大丈夫だろ?なんでパッケージにこだわってんの?
第一、ここは初心者が質問しに来るところだぜ。第一、サーブレットの最初の方から
パッケージなんてそんなにでてこない。本によっては全部デフォルトパッケージで
サンプル作ってるやつだってある訳だし。質問見ると、とにかくブラウザに表示したい
訳だろし。パッケージパッケージ言ってないで質問の意図分かってやれよ。
0518デフォルトの名無しさん2006/12/02(土) 21:54:36
アプレットって過去の遺物なんでしょうか。
アプレットみたいなやつで最近はやりのやり方があったら教えてください。
0519デフォルトの名無しさん2006/12/02(土) 21:57:08
>>509
そのままだと、コンテキストのデプロイに失敗しているのかそれ以外か判断付かないね。
webapps/chapter03-3/hoge.html を作成し、適当なHTMLを記述してみて。
http://localhost:8080/chapter03-3/hoge.html をブラウザで表示できないなら、
コンテキストのデプロイに失敗している。logs フォルダに何かログがあるはずなので、そこを見てみよう。
hoge.htmlが見えたなら、他の原因かな。ちょっと思いつかない。
とりあえずログ見てみよう。
0520デフォルトの名無しさん2006/12/02(土) 21:57:39
>>509
俺から見ると別に問題はなさそうなんだが・・・。単純にブラウザから
の指定の仕方、例えば、スペルミスとかじゃないのかな?

>>516
あんまり初心者いじめんなよ。あなたも最初からすぐに理解してできたわけじゃないでしょ?
自分が分からない立場だったらどうよ?混乱するだけだろ?
0521デフォルトの名無しさん2006/12/02(土) 21:58:28
>>515
またまた釣られてみました。
509で書かれたweb.xmlを見る限り、先頭に<web-app>が抜けてるよぉ。
できればSample.classのソースコードとweb.xmlの詳細を載せてもらえると、なんかわかるかも
0522デフォルトの名無しさん2006/12/02(土) 22:00:47
無名パッケージはあまり推奨されてないし、
特にJSPでは、Javaの仕様の関係で無名パッケージのクラスが使えないからね。
ま、サーブレット単体では動かなくなることはないんだけど。
実際Tomcat5.5付属のサンプルなんか無名パッケージに属してる。
0523デフォルトの名無しさん2006/12/02(土) 22:00:56
>>517
デフォルトパッケージで動かしてみてから言えよ。
0524デフォルトの名無しさん2006/12/02(土) 22:15:14
JSPを使ったときに、デフォルトパッケージではまるんだよなぁ・・・
0525デフォルトの名無しさん2006/12/02(土) 22:29:53
>>521
import javax.servlet.http.*;
import javax.servlet.*;

import java.io.IOException;
import java.io.PrintWriter;

public class Sample extends HttpServlet {
public void doGet( HttpServletRequest req,
HttpServletResponse res )
throws ServletException, IOException {

res.setContentType( "text/html; charset=Shift_JIS" );

PrintWriter out = res.getWriter();

out.println( "<html>" );
out.println( "<head>" );
out.println( "<title>Sample</title>" );
out.println( "</head>" );
out.println( "<body>" );
out.println( "HelloWorld!" );
 out.println( "</body>" );
out.println( "</html>" );
}
}
0526デフォルトの名無しさん2006/12/02(土) 22:30:42
>>521
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"; version="2.4">
- <servlet>
<servlet-name>mySample</servlet-name>
<servlet-class>Sample</servlet-class>
</servlet>
- <servlet-mapping>
<servlet-name>mySample</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
</web-app>
0527デフォルトの名無しさん2006/12/02(土) 22:39:45
- <web-app とか
- <servlet> とか
- <servlet-mapping> とか。

先頭に"-"がなぜ付いている?

コンテナ起動時に何かエラーが出てないかい?

> res.setContentType( "text/html; charset=Shift_JIS" );
相当古い本を使っているか、サンプルがマズい本を使っているね。
Windows環境なら
res.setContentType( "text/html; charset=Windows-31J" );
がおすすめ。
0528デフォルトの名無しさん2006/12/02(土) 22:48:02
>>527
サンプルがまずいんですか・・・
-<web-app よくわかりませんが"-"がついています。
コンテナ起動時にはとくに何もおきていないです。
コンテナ起動時に起きるエラーといとどういうものが考えられますか?
0529デフォルトの名無しさん2006/12/02(土) 22:58:42
>>527
IE6で開いたのをコピペしたんじゃないか?
0530デフォルトの名無しさん2006/12/02(土) 22:59:44
>>528
要素の前に付いている"-"は全部取ろう。

>コンテナ起動時に起きるエラーといとどういうものが考えられますか?
parse error とか出てない?
"-"なんて付いているから、web.xmlの読み込みに失敗しそう。
0531デフォルトの名無しさん2006/12/02(土) 23:26:52
>>530
parse error というものは出ていないです。"-"は消します。
web.xmlというのはメモ帳で自分で作成するのですか?
それとも、どっかからコピーしてきて少しだけ直すもんなんですか?

とりあえず、今日はもうテキスト読んで考えてみます。
色々とアドバイスありがとうございました。またよろしくお願いします。
0532デフォルトの名無しさん2006/12/03(日) 00:19:47
質問させてください。

String型やint型をInteger型に変換したいのですが、
new Integer(String a)などとインスタンス生成すればできますよね。

しかし、ループのなかで変換をを行いたい場合、
インスタンス生成以外の方法で変換をかけることはできないでしょうか?
0533デフォルトの名無しさん2006/12/03(日) 00:23:17
> インスタンス生成以外の方法で変換をかけることはできないでしょうか?
基本的に無理。

ループまわす回数や数値の範囲によっては、
インスタンスプール使うって手もあるけど。
05345322006/12/03(日) 01:05:46
>>533

回答ありがとうございます。

たとえば無茶ですが、以下のように生成したとしても
制御する方法があるということですか。

for(int i=0 : i<100 ; i++){
new Integer(a[i]);
}

インスタンスループについて調べてみましたが
なかなか難しい・・。
0535デフォルトの名無しさん2006/12/03(日) 01:10:04
>>534
Javaのバージョン何使ってる?
5.0使ってるならInteger#valueOf使いなさいな
内部で配列にキャッシュしてるから。

Stringの場合、Mapでキャッシュするのが一般的だが
生成される相手がIntegerならMap#getのコストやString#equalのコストのが高くつくかもね
0536デフォルトの名無しさん2006/12/03(日) 01:38:39
Java使ってる時点で何やっても高コストC言語で作りなさい
0537デフォルトの名無しさん2006/12/03(日) 01:48:25
フィッシングを謳うコンプレックスマンがまた登場しました
0538ぴゅあ2006/12/03(日) 04:37:34
>>532
何故そうしたいと思ったのかが判らないところですけど
書くコードとしてはnew Integer(...)としたくないというところなんでしょうか

Integerが内部に持つ値を直接置き換える手段はなく
例えdecode,valueOfメソッドを使って見た目はnewしてないように見えるコードにしても結局内部でnewしてます
(5.0のvalueOf(int)でキャッシュを持っていると言っても高々-127〜+128程度の範囲で予めnew Integer()してるだけだし)
intについては1.4までだとnew Integer(int)しか手段がないみたいです

そんなことやってくれるものが他にあるか?と言っても、Integerと決めた時点で内部では毎回newするしかないし
素直にnewするコードを書くのがいいんじゃないかと思いますけど

どうしても見た目にnewしたくないのなら、そういうクラスを作るのが早いんじゃないでしょうか(1.4までの場合)
見た目だけにしかならないと思うし、Integerとしては見えなくなるのは嫌だったりしないのか?とか思ったりもするけど

無駄な努力をしようとしているようにも思えてしまったりですけど
もっと違うことを求めていたりするんでしょうか
0539デフォルトの名無しさん2006/12/03(日) 10:29:27
昨日に引き続き質問させてもらいます。
今、web.xmlのことで悩んでいるのですが、メモ帳で中身を書いたら、中身が消えていました。
そもそもweb.xmlというものは0から自分で書くものなのですか?それとも、コピーして書き換える
程度なのですか?書き換える(編集)する場合は、どうすればよいのでしょう?
0540デフォルトの名無しさん2006/12/03(日) 10:31:53
539です。
web.xmlの中身はこんな感じになっちゃっていました。どうしてでしょうか?

The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.


--------------------------------------------------------------------------------

End tag 'servlet-name' does not match the start tag 'url-pattern'. Error processing resource 'file:///C:/Tomcat 5.5/webapps...

<url-pattern>/HellohtmlServlet</servlet-name>
----------------------------------^
0541デフォルトの名無しさん2006/12/03(日) 11:04:33
>>539
>そもそもweb.xmlというものは0から自分で書くものなのですか?それとも、コピーして書き換える程度なのですか?

どちらでもお好きなように。最終的に正しい書式になっていればOKです。
メモ帳でも、他のテキストエディタでもお好きなのを使ってください。

で、消えちゃったと言っているのは、消えたのではなく
内容が間違っているのでIEで表示できていないだけでしょう。

「<url-pattern>/HellohtmlServlet</servlet-name>」
じゃなくて
「<url-pattern>/HellohtmlServlet</url-pattern>」
じゃないの?
XMLの書式は(HTMLも基本的に同じ)開始と終了の要素名が一致していないとダメ。

0542デフォルトの名無しさん2006/12/03(日) 11:12:40
>>541
ありがとうございます。もう一度書いてみます。
0543デフォルトの名無しさん2006/12/03(日) 11:19:49
<?xml version="1.0" encoding="ISO-8859-1" ?>
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"; version="2.4">
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>

こんなふうに書いたのですが、また、ダメでした・・・。どうしてですかね?
0544デフォルトの名無しさん2006/12/03(日) 11:36:09
一見して2行目の先頭がオカシイ。
0545デフォルトの名無しさん2006/12/03(日) 11:41:35
>>544
もしかして”-”ですか?なんかいつもついているんですよね?
■ このスレッドは過去ログ倉庫に格納されています