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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
過去ログ、関連スレッド、よくある質問とその回答、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/

これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

以下のエラーが表示されて、途方にくれているあなたは、下のページへ。
「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path%2Cclasspath

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


/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */

また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc5.2ch.net/hp/
0153デフォルトの名無しさんNGNG
>>140
その瞬間での読み取り可能数を知る方法は、実際に読み込む以外に
ないですね。
その通信単位の読み取り可能数はプロトコルによって取得法が
0154デフォルトの名無しさんNGNG
>>142
たくさんあります。
0155デフォルトの名無しさんNGNG
StringBuffer fileLog[];
int c;
fileLog[c] = new StringBuffer();

こうすると、なぜか例外処理が発生し、fileLog[c]が使えません。
なぜなのでしょうか?
0156デフォルトの名無しさんNGNG
cは、forループとなってます。
初期値は0です。

for(c = 0;c < curLogList.length ; c++)
{

fileLog[c] = new StringBuffer();
fileLog[c].setLength((int)f.length());
fileLog[c].append(sb);
}

sbは、StringBufferで、ファイルからReadしたデータが格納されてます。
それをappendで、fileLogへ追加したいのですが、
例外が発生してしまいます。
0157デフォルトの名無しさんNGNG
>>156
StringBuffer fileLog[] = new StringBuffer[curLogList.length];
という風に配列オブジェクトを生成してないから
ぬるぽが発生しているのではないかな?
0158デフォルトの名無しさんNGNG
>>142
ポインタあるし。
Javaのオブジェクトは動的メモリ配置させないほうが難しい。
0159デフォルトの名無しさんNGNG
Javaの勉強を始めたものです。
SunからSDKダウンロードしてDOSプロンプト上で
簡単なjavaプログラム、javaアプレットを実行する所まで出来ました。
ところでデスクトップ上に「java Web Start アプリケーションマネージャ」
というショートカットが出来てるのですがこれは何ですか?
何のために使うのでしょうか?
0160156NGNG
>>157
ご返答ありがとうございます。

StringBuffer fileLog[] = new StringBuffer[curLogList.length];とし、
内部では、fileLog[14]とインスタンス化されましたが、

そのあと、fileLog[0]に、ファイルからReadしたデータをappendすると例外が発生してしまいます。
なぜなのかがわかりません。
只今も格闘中です。

int c;
char recv[] =new char[100000];
StringBuffer fileLog[] = new StringBuffer[curLogList.length];

for(c = 0;c < curLogList.length ; c++)
{
File f = new File(curPath + curLogList[c]); ←Readするファイル(.txt)のあるPath
FileReader fr = new FileReader(f);

while(-1!=fr.read(recv)) {
fileLog[c].append(recv); ←ここで例外発生。
}
}
0161デフォルトの名無しさんNGNG
>>152
ガッ
0162デフォルトの名無しさんNGNG
>>160
fileLog[0]がヌルポインタだからです。
fileLog[0]=new StringBuffer();
としてから、append()してくださいませ。
0163デフォルトの名無しさんNGNG
for(c = 0;c < curLogList.length ; c++)
{
fileLog[c] = new StringBuffer(); ←こうしてくださいませ。

File f = new File(curPath + curLogList[c]); ←Readするファイル(.txt)のあるPath
FileReader fr = new FileReader(f);

while(-1!=fr.read(recv)) {
fileLog[c].append(recv); ←ここで例外発生。
}
}
0164デフォルトの名無しさんNGNG
>>159
実行すればいいじゃない
0165デフォルトの名無しさんNGNG
>>164
実行したらパソコンが壊れちゃった
0166デフォルトの名無しさんNGNG
>>165
その今書き込んでる奴を使え
0167デフォルトの名無しさんNGNG
仕込み漫才かYO
YOUかYO

サンプルだよサンプルデモ。げぇむもついてるYO
赤いたまも黒いたまもむつかしいYO
これだYO
ttp://java.sun.com/products/javawebstart/ja/demos_ja.html
016876NGNG
>>79
>>83
>>85
レスありがとうございます。

>>79の方法でやろうと、
myjtextfield.getInputContext().setCompositionEnabled(false);
としてみたんですけど、
InputContextインスタンスが取得できずに、nullpointerexceptionが出てしまいました。

いろいろ調べたら、
http://java-house.jp/ml/archive/j-h-b/043354.html
の方法

texiFieldがFocusGainedされた時
Input Method Frameworkにより
IMEをオフにして直接入力
textField3.getInputContext().setCharacterSubsets(null);

があり、これをしたらMS-IMEがoffになってくれました。

でもデフォルトでMS-IMEがonになるって>>83さんのいうように自分のjreは変なんですかねぇ。
0169デフォルトの名無しさんNGNG
> InputContextインスタンスが取得できずに、nullpointerexceptionが出てしまいました。
それは>>168の使い方が悪いだけ。
017076NGNG
>>169
んじゃどうやったら取得できるんですか?
0171デフォルトの名無しさんNGNG
今日はJAVAでJAVAJAVA洗濯しました。
0172デフォルトの名無しさんNGNG
>>170
> textField3.getInputContext().setCharacterSubsets(null);
こっちでは取得できてんだろ。使い方が悪いだけ。
0173160NGNG
>>163
ご返答の程、ありがとうございます。

ご指摘のとおり記述しなおしたところ、うまくビルドできました。
StringBuffer fileLog[] = new StringBuffer[curLogList.length];のままだと、まだnullの状態なんですね。
知らなかったです。

本当に助かりました。
017476NGNG
>>172
>> textField3.getInputContext().setCharacterSubsets(null);
>こっちでは取得できてんだろ。
おおそういえばそうです。

ためしにやったらできした。
何でできなかったのかな??
0175デフォルトの名無しさんNGNG
Javaの印刷について詳しく載ってるサイトってあります?
0176デフォルトの名無しさんNGNG
Graphicクラスだけど、
drawString使うと、文字列中の改行が無視されてしまいます。
改行をきちんとされるようにしたいのですが・・・。
0177デフォルトの名無しさんNGNG
JavaでGUIを勉強し始めようとおもっているのですが
AWTとSWINGどっちからやるのがおすすめですか?
0178デフォルトの名無しさんNGNG
>>177
SWINGがいいと思います。
AWTは古いコンポーネントなので処理も重く使い勝手が悪いです。
SWINGはそのAWTを改善したものですので、
SWINGを勉強しましょう。
0179デフォルトの名無しさんNGNG
>>178
即レス�dくすです。

早速、SWINGを勉強してみます。
0180デフォルトの名無しさんNGNG
軽量コンポーネントって誤解をまねくよな
0181デフォルトの名無しさんNGNG
大文字、小文字、全角、半角
少しは気にしてくださいよ
0182デフォルトの名無しさんNGNG
すくなくともAWTが一番軽いよ
ネイティブだしな

でも、機能少なすぎてお話にならないのでSwingでいい
何も考えずsetSizeするのだけやめれば大丈夫

分からなかったらNetBeansつかえ

0183デフォルトの名無しさんNGNG
Bean とか、Beans とかって何ですか?
豆?

なんかコンポーネント化されたクラスみたいな解説は見たことがあるがいまいちはっきり分からない。
だれか簡潔に一言でスカッとトロトロに解説してください。(略してスカトロ)
0184デフォルトの名無しさんNGNG
>>183
ウンコ喰って氏ね
0185デフォルトの名無しさんNGNG
OK.ウンコだけじゃアレなのでリンゴも食って寝ます。
0186デフォルトの名無しさんNGNG
SocketでHTTPプロトコル通信プログラムを作成してるのですが
転送コーディング無しのエンティティボディをストリームクラス
(BufferedReader)で読み込むと、Content-Lengthの80%位
読み込んだ後に-1が返ってきてそれ以上読み込めなくなってしまいます。
例えば10万バイトなら8万バイト読み込むと-1が返ってきてしまうのです。
その後にRangeヘッダ指定の部分GETで、残りの2万バイトを読み込もうと
すると、今度は1万6千バイト位読み込むと-1が返ってくるのです。
大きいボディでも小さいボディでも同じなのです。
300バイトだと250バイトで-1が返ってくるのです。しかもどのURLでもです。
一度もボディを全て読み込めた事がありません。
どうか解決策を教えてください。
0187デフォルトの名無しさんNGNG
>>180
軽量コンポーネントってOSのリソースを使わないって意味だからな。
GUIの描画にOSの機能(ネイティブ)使うのと、
Javaを使うのとどっちが速いかは言うまでも無い。
「遅い軽量コンポーネント」と言うようにすれば勘違いも減るだろう。
0188デフォルトの名無しさんNGNG
え、逆でしょ
0189デフォルトの名無しさんNGNG
>>186
読み込んでる部分のコードがないと何とも答えられんと思うが。
0190デフォルトの名無しさんNGNG
>>188
Swing勉強した方がいい
0191デフォルトの名無しさんNGNG
またまたご冗談をw
Swingは軽量コンポーネントなので遅いですよ。
0192183NGNG
俺の質問は・・・?
0193デフォルトの名無しさんNGNG
無視
0194デフォルトの名無しさんNGNG
>>186 readLineで読み込んだ文字列の長さを積算して、
「80%しか読めない」とかいってるわけじゃないよね? まさか。
0195デフォルトの名無しさんNGNG
>>192
>>184
0196デフォルトの名無しさんNGNG
>>191
SWTは?
0197デフォルトの名無しさんNGNG
>>191
横槍だけどさ。
その遅いってのは何と比べて?
SwingはAWTをベースに軽量化&高速化した物って
俺の持ってる本には載ってる。
また、別の本だったかサイトだったかに
AWTは重量コンポーネントと呼ばれるってのも読んだ事がある。

軽量コンポーネントの「軽量」とは軽いって意味じゃないのか。
違うなら詳しい説明よろしく。
0198デフォルトの名無しさんNGNG
>>194
違います。
例えばHTMLソースのエンティティボディを読み込んで
そのバイナリデータを出力すると、明らかに途中で途切れてるのです。

>>189
コートは簡単なものです。
レスポンスヘッダ部分を読み終えた後に
size = r.read(buffer, 0,buffer.length); (rはBufferedReader)
をsizeの合計がContent-Length以上になるまで
ループしてるだけなのです。しかし、その途中で-1が
返ってきてしまうんです(泣)しかも大体8割位のとこで。。。
0199デフォルトの名無しさんNGNG
>>196
SWTは速い重量コンポーネント。

>>197
> その遅いってのは何と比べて?
ネイティブ、AWT、SWT全て

> SwingはAWTをベースに軽量化&高速化した物って
作者が勘違いしているのでしょう。
軽量化は正しい、しかし軽いという意味ではない。

> AWTは重量コンポーネントと呼ばれるってのも読んだ事がある。
OSのリソースを食うというだけで重いわけじゃない。
win9x系ではリソースが少ないので問題が発生することがあるが、
それ以外ではなんの問題も無い。

> 軽量コンポーネントの「軽量」とは軽いって意味じゃないのか。
違う。
0200デフォルトの名無しさんNGNG
>>198
Readerのreadメソッドの返り値はバイト数ではなく文字数だから,文字コード変換
の結果として実際にソケットから読み出したデータのバイト数よりも小さい整数値を
返したとしても不思議ではない。
0201デフォルトの名無しさんNGNG
シングルトンに関することで教えてください。

シングルトンの、「インスタンスの生成を1つに制限する」という機能は、
「クラスのコーディング時に静的属性や静的メソッドだけ使うようにする」
ということで実現できてしまう気がするのですが、
あえてシングルトンを使うメリットはどんなところにあるのでしょうか?

シングルトンの実装の方法はわかったのですが、
メリットが見えないのです…。
0202デフォルトの名無しさんNGNG
> シングルトンに関することで教えてください。
一人身のブタです。
かわいそうなのでほっといてやってください。
0203デフォルトの名無しさんNGNG
>>201
「クラスのコーディング時に静的属性や静的メソッドだけ使うようにする」 ように気をつけなくても良くなる。
0204デフォルトの名無しさんNGNG
>>198 バイナリデータをreaderで読むなよ。
0205デフォルトの名無しさんNGNG
>>199
ぜんぜん理解できん。

何が重量で何が軽量なんだ?
うーん・・・
OSのGUIが重量で、JAVAが提供してるGUIが軽量なのか?
0206デフォルトの名無しさんNGNG
java始めようと思って、sunで最新版(1.4.2_05)をDLして
インストールした訳だが、インストールの途中で以下のエラーが出る。
--------------------------------------------------
jre\bin\awt.dll:Old File not found. However a file of the same name was
found. No update done since file contents do not match.
--------------------------------------------------
古いファイルがないって・・・。Update専用って話じゃないし。
マシンを2台持ってて、OSはどちらともWin2k。
メインのマシンは、問題なくインストールできた。
開発用として使おうと思ってるマシンで、このエラー。
ちなみにOSクリーンインストールしてパッチも最新版にしてこの有様。
当然だが、クロックアップなぞ一切していない。
プログラム始める前から躓いてる俺ってorz。
誰か救ってください。
0207デフォルトの名無しさんNGNG
>>201
そのクラスを使用するクラスを選別する事ができます。
静的メソッド&静的属性だと、どのクラスからでも呼び出せて
しまうので、どのクラスから使用されてるのか掴みにくくなってしまいます。
さらに、そのクラスがアクティブかどうかが、実行上の重要なキーワードと
なる時に必要となります。
静的属性&メソッドだと常にアクティブになってしまうので、その選択が
できません。
さらに、そのクラスが大規模なデータを持つ場合にメモリの節約になります。
必要な時だけ実体化させ、それ以外の時は0にできます。
静的だと常に属性がメモリを占有する事になってしまいます。
0208デフォルトの名無しさんNGNG
>203さん
ご解答ありがとうございました。やっとすっきりしました。

>202さん
…ほっといてあげます。
0209デフォルトの名無しさんNGNG
>>204
実は、BufferedInputStreamも試したのです。
結果は同じでした。8割くらいでー1が帰ってきます。
chunked転送コーディング時は、どっちにしろBufferedReaderを
使わねばならないので、プログラム上スッキリさせる為に
Readerを用いてるのです。
0210201 208NGNG
>207さん
ご丁寧にありがとうございます。
非常によくわかりました。
シングルトンの場合では、必要がない場合には
アクティブにさせないこともできるということが
ポイントなのですね。

どうもありがとうございました。
0211197&205NGNG
あー見つけた!
うーん、どうやら>>199の言う通りAWTを高速化したってのは作者の勘違いなのか?

OSのGUI部品とJAVAで定義されたGUIクラスを二重で持ってるから重量と呼ばれる。
それに対し、SwingはJAVAだけで完結してるから軽量って意味とあった。
動作が軽いって意味ではないと。

ただ、AWTは形状や機能の一貫性が保障されないし、
Swingは物凄く機能強化されてるから、Swingを使うのがお徳だよとある。
新しいSwingが遅いってのは、OS依存がないって利点の負の副産物だったんだな〜。

何冊か参考書読んだけど、こういう根本的な事書いてる本なかったな。
すげー基本的な事なんだろうけど勉強になった。
>>187と>>199に感謝。
0212デフォルトの名無しさんNGNG
すいません、C#の話なのですが質問をさせてください。

javaにはGUI設計手段としてSwingとかSWTがありますが、C#にはあるのでしょうか?
0213デフォルトの名無しさんNGNG
Windows.Formsか、それともUser32.dllを無理やり読み出して自前でウィンドウ作るか、とか
0214デフォルトの名無しさんNGNG
>>209 194や200も書いているけど、Reader系は文字ストリームだから
エンコーディング変換の処理が入る。だから普通使わない。
#まあSunのiso-8859-1が8bitクリーンである実装に依存する書き方する人いるけど。

で、BufferedInputStreamも試して駄目なら他でおかしいところが
あるはずだから、状況を再現する一番短いコードをさらしたら?
0215デフォルトの名無しさんNGNG
>>212
俺は使った事も無いし使う予定も無いが、monoのGtk#とか。
http://www.mono-project.com/using/gtk-sharp.html
0216デフォルトの名無しさんNGNG
>>210=201=208
203や207の言ってることはどっちかというと電波発言だぞ。
静的メソッドでは動的束縛ができないというのが本質だ。
0217デフォルトの名無しさんNGNG
>>211
> ただ、AWTは形状や機能の一貫性が保障されないし、
それはどのOSでも一貫性が保証されないという意味であり、
逆にいえばSwingはどのOSでも一貫性が保証される。

が、それはJavaアプリの場合の話であり、
それを動かしているOSやJava以外のアプリとの一貫性は保証されない。

ようするに、JavaアプリはどのOSでも同じように見える代わりに、
他のアプリとは同じように見えなくなるということ。

多くのユーザーは複数のOSで同じアプリを使わんよ。
それよりか、自分の使っているOSと同じようなインターフェースを望む
0218デフォルトの名無しさんNGNG
>SwingはどのOSでも一貫性が保証される。
これが大事なんだろ
OSごとに作る必要がなくなってOSの垣根を越えて
ユーザーを獲得できる
0219デフォルトの名無しさんNGNG
2兎追うものは..
0220デフォルトの名無しさんNGNG
泥棒のはじまり。
0221デフォルトの名無しさんNGNG
>>218
それは作る側の論理だな。
そりゃ、どのOSでも同じインターフェースだと作るほうは楽だろうよ。
でも使う側からみりゃ、OSや他のアプリと違うインターフェースは見難い使いにくい。
結果的に、SWTみたいにOSネイティブの機能を使って、そのOSのインターフェースに
あわせた使いやすいインターフェースにするのがユーザーを獲得することにつながる。
SUNもそれに気づいたから、SwingにOSネイティブを入れることにしたんだろうよ。
0222デフォルトの名無しさんNGNG
俺、SwingのUI好きだよ
UIを自分で自作できたりする所なんかもいいね
0223デフォルトの名無しさんNGNG
基本的にSystemLAFでほとんど間に合うけどね
たとえばWinだとALT押したらメニューにカーソルいくとかよくできてる
ま〜ネイティブで高速化するなら大歓迎だけどね
しかも大概文句言う人はWinユーザーだからちょうどいい

なんとなくWEBサービスに載せにくいSWTはEclipse専用になりそうな予感
って現行でもほぼEclipse専用か
なんだかんだでSwingは業務系アプリ作りやすいのでそれなりに価値があるかと
0224デフォルトの名無しさんNGNG
文字エンコーディングにUS-ASCII、CP-1252、ISO-8859を指定して
Readerでバイトデータを読み込むと、そのbyteデータがそのまま
1バイト拡張される形でcharに格納されるのでしょうか?
0225デフォルトの名無しさんNGNG
>>224
対応する文字についてはそうだが、それ以外のbyteコードがある場合は?に変換される
0226デフォルトの名無しさんNGNG
>>225
ありがとうございました。
0227デフォルトの名無しさんNGNG
>>226
今チェックしてみたけど出力されるまでは、?に変換されずにちゃんと持ってるみたい。

一応アホなテストコードを
String a = "abcdあああああああああscdcdscsd";
byte[] b = a.getBytes( "Shift_JIS" );
Reader in =new BufferedReader( new InputStreamReader( new ByteArrayInputStream( b ), "ISO8859-1" ) );
char[] c = new char[1024];
Arrays.fill( c, '\0' );
in.read( c );
int i = 0;
while ( c[i] != '\0' ) {
System.out.print( c[i] );
System.out.print( ':' );
System.out.println( Integer.toHexString( c[i] ) );
i++;
}
0228デフォルトの名無しさんNGNG
>>227
InputStreamReaderのAPIリファレンスには含まれない文字の扱いについて
書かれていないから、実装依存である可能性は認識しておいたほうがいいと思う。
Charset#encodeには明確にデフォルトの置換文字列に置き換えるって書かれているけど。
0229デフォルトの名無しさんNGNG
>>227
>>228
ありがとうございました。

>>214
あなたの言うとおりでした。何とか問題が解決しました。
0230デフォルトの名無しさんNGNG
>>227
わざわざテストまでしてくれて、どうもありがとうございました。
0231デフォルトの名無しさんNGNG
>>228
以前のサーブレットは、国際化の仕様にバグがあったので、
この手法を使って無理やりSJISを通してたよ。
実装依存で問題が出た例はないみたいだけど、
あまりやるべきことではないな。
0232デフォルトの名無しさんNGNG
>>206
過去スレに何度か同様の報告が出てるので、なんとか探してみて下さい。
4スレくらい前で解決した例があった気がします。
そのときは質問者が余計なことをしてインストールしたファイルを上書きしたか何かで
みんな飽きれてそれ以降問答が続かなかったような気もしますがとにかくインストール自体は成功したようです。
この手の問題は、遭遇してない人には、
遭遇した人のマシンをあちこち調べでもしないとなかなかアドバイスしにくいと思うんでそこをひとつよろしく。
0233デフォルトの名無しさんNGNG
>>206 >>232の言うのを探してみた。46スレだな。
「どかせたものを戻す」辺りが意味分からん流れだったが。
まあ、普通は戻さなくても動く・・・・・・んじゃないか?

>553 名前:デフォルトの名無しさん 投稿日:04/06/01 13:07
>>>549
>同じファイルがあって邪魔って書いてあるじゃねーか
>jre以下をどかせ

>554 名前:549 投稿日:04/06/01 14:08
>>>553
>\j2sdk1.4.2_04\jre 以下を一旦どかせたら無事インストール完了しました。^^;
>どかせたものをその後元に戻したらVMのバージョン情報もかえってきました。
>ありがとうございます。
0234デフォルトの名無しさんNGNG
こんにちわ
えっと早速ですが質問です

Javaにはポインタがありませんよね?

Cで関数名の配列に対応させた関数へのポインタの配列を用意して
関数を呼び出す処理をJavaで書くにはどのようにしたら良いのでしょうか
0235デフォルトの名無しさんNGNG
インタフェースを定義して、それを実装したクラスを定義して、
そのクラスのインスタンスを生成して、インタフェースの配列を生成する。
などなど。無名クラスについて知っておくとなお良いかも。

とりあえずメソッドへのポインタは用意できないからしょうがない。
リフレクションちうのもあるけどあんま関係ない。

>Javaにはポインタがありませんよね?
イメージ的には、クラスを型にした変数はインスタンスへのポインタだよ。演算できないけど。
あんまり端的に言い放つと不毛な議論がはじまるから今後慎重にどうぞ。
0236デフォルトの名無しさんNGNG
>>235
すんません(;´Д`)
以後気を付けます
0237デフォルトの名無しさんNGNG
×インタフェースの配列を生成する。
○インタフェースの配列を生成して、配列から各インスタンスへ参照させる。
0238デフォルトの名無しさんNGNG
>>234
JAVAにも似た様なものがあります。
例えば同じクラス内のStringオブジェクトを引数とする3つのメソッドをindexの値によって、
どれか呼び出す時にはこうします。

void func() {
  String[] methodList = {"funcA", "funcB", "funcC"};
  int index;
  String text;
  ・
  ・
  getClass().getDeclaredMethod(methodList[index], new Class[1]{ String.class}).
  invoke(this, new Object[1]{text});
}

void funcA(String str) { }
void funcB(String str) { }
void funcC(String str) { }
0239デフォルトの名無しさんNGNG
MyFunction を実装した無名クラスのインスタンスを返す例。
こういう方が好きだなぁ。リフレクションと違ってコンパイル時に名前解決するし。
クラスだらけになるけど。
なお、必要なければいちいち create せずに Caller のコンストラクタで一個用意してもいいし。

public interface MyFunction {
 public void funcX(String str);
}

public class Caller {
 void func() {
  MyFunction[] funcs = { createFuncA(), createFuncB(), createFuncC() };
  //略
  funcs[index].funcX(str);
 }
 public MyFunction createFuncA() {
  return new MyFunction() {
   public void funcX(String str) {
    //場合によっては TheClass の内部にアクセスするなんやかや
   }
  };
 }
 public MyFunction createFuncB() {
  return new MyFunction() { /*略*/ };
 }
 public MyFunction createFuncC() {
  return new MyFunction() { /*略*/ };
 }
}
0240デフォルトの名無しさんNGNG
>>238
へェーへェーへェーへェー(゚д゚)つ"
それなんかの本に載ってるかい?
0241デフォルトの名無しさんNGNG
# WEBプログラミング板に妥当なスレがあるのか無いのか・・・見つからないので、もしあったら誘導してください(_ _)

Apache2.0.48、Tomcat5.0 を JK2 でつないで Solaris8 上で動作させています。
Java Servlet から日本語ファイル名の URL にリダイレクトする必要があり、
当初は UTF-8 で URL エンコードしていましたが、
お客さんがファイル名が読めないのはどうしても嫌だと言い張って、
何とか日本語表示できないかと考えています。
クライアントはとりあえず IE6 のみで。

JK2 が UTF-8 エンコードで送信するのに、
IE がファイル名を Shift_JIS としてデコードしてしまうらしく文字化けが発生するので、
下記のようにその逆の操作をはさんでみましたが

response.sendRedirect( baseURL + new String( fileName.getBytes("Windows-31J"), "UTF-8" ));

状況が改善されません。
最終的には JK2 のコードに手を加える道も残ってはいますが、
できればコード側で対処したいです。
お知恵をお貸しください。
0242デフォルトの名無しさんNGNG
>>238
>>240
リフレクションは一見便利なようだけど、安易に使わない方がいいよ。
プログラムが読みにくくなったり、パフォーマンスが落ちたりする。
正しい使い方としては、設定ファイルを読み込んで、オブジェクトを初期化する処理がある。
JavaBeansなんかも内部ではリフレクション使いまくっているし。
あとは、Javaでスクリプト言語のインタプリタを実装するときとか。
0243デフォルトの名無しさんNGNG
java.net.URLEncoderを使って、
new String( fileName.getBytes("Windows-31J"), "UTF-8" )
の部分を
URLEncoder.encode(fileName, "Shift_JIS")
としたらいけないかなぁ。

webprog板なら、このスレ
http://pc5.2ch.net/test/read.cgi/php/1087331455/l50
0244デフォルトの名無しさんNGNG
>>239
それも良い。
いいんだけど、>>238の方がいろいろ応用がきくんじゃないかな?
>>238は、少し変えればメソッドのパラメータ構成もそれぞれ別にできるし
返値もそれぞれ別にできる。
ケースによっては、外にも幾つか応用がきく。
0245デフォルトの名無しさんNGNG
>>241
無理。URLとして使用できる文字はRFCで決められている。
それ以外の文字を使うとブラウザが正しく動作しない。
画像ファイル名を日本語にすると表示しないのと同じ。

インターネットにはRFCという規格・仕様があって、
ブラウザはそれに沿って作られているので、規格外のURLは扱えません、
とでもお客さんには説明するんだね。
0246デフォルトの名無しさんNGNG
>>241
せめてローマ字で我慢してもらうしかないのでは。。。
お役に立てず申し訳ない
0247デフォルトの名無しさんNGNG
>>244
お前、>238だろ。
>238なんて単なるオナニーコードだろ。
0248デフォルトの名無しさんNGNG
違うよ。
アンタこそ>>240=>>247だろ。
このホットジャバ野郎。
0249デフォルトの名無しさんNGNG
すみません、質問です。
テキストファイルから一行読み込んでHTMLに変換し、結果を返したいのですが、

aaa;bbb;cccなら
<td>aaa</td><td>bbb</td><td>ccc</td>と返し、

aaa;j3なら
<td colspan="3">aaa</td>、

aaa;bbb;j2cccなら
<td>aaa</td><td colspan="2">bbb</td><td>ccc</td>

という解析を入れたいので正規表現で実現しようとし、
一番上は簡単に出来ましたがcolspanが絡んでくるとどうもアイディアが浮かびません。

どうしたらよいでしょう?
0250デフォルトの名無しさんNGNG
>>249
テキストファイルからHTMLに変換する仕様がなけりゃ
答えようがないべ。
単純にセミコロン(;)区切りの行を分割したいなら、
java.util.StringTokenzerを使って、
for(i = new StringTokenizer(line, ";"); i.hasMoreTokenz();) {
...
}
というようなループを作って回せ。
0251デフォルトの名無しさんNGNG
240は俺どえす。
0252デフォルトの名無しさんNGNG
line.split(";")
■ このスレッドは過去ログ倉庫に格納されています