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

★★Java質問・相談スレッド143★★

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2011/01/25(火) 03:07:32
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

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

前スレッド
★★Java質問・相談スレッド142★★
http://hibari.2ch.net/test/read.cgi/tech/1290103530/

次スレは>>950あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
0951デフォルトの名無しさん2011/03/21(月) 15:54:31.94
>>950
データベースのどの側面が欲しいかによると思う。
・機能なのか (SELECTでのカラム入れ替え、JOIN、ORDER BYなど)
・性能なのか (複雑なクエリに対する性能劣化が小さいこと)
・インターフェイスなのか (SQL文)

とりあえず、SqlJetでin memoryにどうでしょか。
0952デフォルトの名無しさん2011/03/21(月) 17:19:23.65
JavaHelpという化石APIを試しているのですが、
これのHTML表示部の文字コード指定方法分かる方いますか?
HTMLファイル冒頭のcharset指定はどうも無視されるようなので…
0953デフォルトの名無しさん2011/03/21(月) 21:06:55.34
intの値130を1バイトのバイト配列として扱いたいのですが、
下記のコードでは2バイトとなってしまいます。
修正が必要、またはそもそも間違っているのかご指摘お願いいたします。

int in = 130
Integer.toHexString(in);
byte[] by = hex.getBytes("SJIS");
0954デフォルトの名無しさん2011/03/21(月) 21:07:51.71
>>953
コードが誤っていましたので修正です。
int in = 130
String hex = Integer.toHexString(in);
byte[] by = hex.getBytes("SJIS");
0955デフォルトの名無しさん2011/03/21(月) 21:16:36.48
>>952
Integer#toHexString(int) は10進数の130を16進数の文字列に変換するので
Integer.toHexString(130) は "82" になる。

1バイトだけなら byte[] by = { (byte)130 }; でいいんじゃね?
複数バイトなら>>420-422あたりにある。
0956デフォルトの名無しさん2011/03/21(月) 21:23:37.79
java の byte は符合無し?
0957デフォルトの名無しさん2011/03/21(月) 21:31:19.79
Javaに符号無し整数はありません
0958デフォルトの名無しさん2011/03/21(月) 21:35:49.33
byteが255じゃないから俺も苦心したわ
0959デフォルトの名無しさん2011/03/21(月) 21:55:48.12
>>957
char
0960デフォルトの名無しさん2011/03/21(月) 22:11:11.94
>>955
ありがとうございます!
キャストすると0〜255の範囲で扱えるとは知りませんでした。
ただし、キャストだと文字コード指定できませんので、
>>420のgetBytesを使う方法になりそうです。
ただ、getByteに必要なStringとして130を渡す必要があるため、
Integer.toHexStringを使ってStringを生成していますが
正しいのかよくわかっていないため調べてみます。
0961デフォルトの名無しさん2011/03/21(月) 23:27:01.75
javaのライセンスについて教えてください。

現在、Androidアプリを作成中なのですが、JDK1.5のいくつかのソースコードを改変して
アプリに組み込もうと思っております。

javaのライセンスは確かGPLだったと思うので、作成したアプリの
ソースコードを公開してしまえば、問題なかったでしょうか?
よろしくお願いします。
0962デフォルトの名無しさん2011/03/21(月) 23:32:14.95
オラクルのJDKはGPLじゃないよ
OpenJDKの方
0963デフォルトの名無しさん2011/03/21(月) 23:57:16.43
そうだったんですか。調べ方が足りなかったみたいで、
JAVAのライセンスは結構ややこしいですね。。。

ライセンスのことをもう一度調べてみようと思います。
ありがとう御座いました。
0964デフォルトの名無しさん2011/03/22(火) 02:05:09.11
Object型の変数に入れたTimestamp型のデータはどうやって取り出せばいいでしょうか?
Object型の変数.toString()ではClassCastExceptionになりました。
0965デフォルトの名無しさん2011/03/22(火) 03:16:18.53
アンドロイドのjavaはアパッチライセンスじゃなかったか?
0966デフォルトの名無しさん2011/03/22(火) 09:34:09.30
JDK1.5のソースって言ってるからDalvikのライセンスは関係ないんじゃないか
0967デフォルトの名無しさん2011/03/22(火) 09:44:04.90
OracleっつかSunのソースだと1.5でGPLってあったっけか?
GPLで配布されてるOpenJDKは今のところ1.6と1.7だけだったような
0968デフォルトの名無しさん2011/03/22(火) 10:42:18.71
>>960
「キャストだと文字コードが指定できない」とか、表現からすると、やりたいこととやってることに勘違いが重なっているように見えるんだが。
「int値"130"を要素1個のバイト配列にする」のに文字コードなんて関係ないだろ。
「SJISコード'130'の入ったint変数をバイト配列にしなさい」とかいうおバカな課題でも出されたのか。
0969デフォルトの名無しさん2011/03/22(火) 14:04:37.66
RandomAccessFileでファイルサイズ以上の位置にseekしwriteした場合、
書き込み前のファイル末尾〜書き込み開始位置までは0で埋められるのでしょうか?
それとも、書き込み前のファイル末尾から書き込まれるのでしょうか?
0970デフォルトの名無しさん2011/03/22(火) 15:09:34.80
>>969
> それとも、書き込み前のファイル末尾から書き込まれるのでしょうか?
少なくともRandomAccessFile#write(int)、RandomAccessFile#write(byte[])の
API仕様の記述に反する振る舞いだから基本的にないと思っていい。

> 書き込み前のファイル末尾〜書き込み開始位置までは0で埋められるのでしょうか?
API仕様には直接的な記述はなかったはず。
RandomAccessFile#setLength(long) には
> length により返されたファイルの現在の長さが newLength 引数よりも小さい場合、
> ファイルは拡張されます。この場合、ファイルの拡張部分の内容は定義されていません。
って書いてあるから、これに準じた振る舞いをするんじゃないかと。
ちなみに、Windowsで元々大きかったファイルを再拡張した場合に、
元々の内容がそのまんま残ってたりする事もある。
0971デフォルトの名無しさん2011/03/22(火) 16:09:52.49
今、java.com 繋がりますか?
0972デフォルトの名無しさん2011/03/22(火) 16:28:18.48
>>971
繋がってhttp://java.com/ja/に転送される
0973デフォルトの名無しさん2011/03/22(火) 16:56:16.23
java.comの件、解決しました。
グローバルIPが弾かれていました。
頭が1.から始まるとアクセス出来ないそうです。
失礼しました。
0974デフォルトの名無しさん2011/03/22(火) 16:59:09.12
えっ、俺133.xxx.xxx.xxxだよ?
そういう事じゃない?
09759692011/03/22(火) 19:21:10.02
>>970
ありがとうございます。
仕様に定義されていない以上、安全のため0で埋める独自処理を入れることにします。
0976デフォルトの名無しさん2011/03/22(火) 20:19:23.78
なんでAppletは使われなくなったの?
一種のクラナドやん
0977デフォルトの名無しさん2011/03/22(火) 20:36:28.38
JREが必要だから
Flashのようなプラグイン式に比べてユーザーの負担や嫌悪感が非常に大きい
0978デフォルトの名無しさん2011/03/22(火) 21:32:26.64
Java初心者の高校生です。今タイピングゲームを作っています。
以下のような、クラス内でpaintメソッドを定義したJFrameを継承したクラスXXXのインスタンスを、mainメソッドから生成してmeeenメソッド中の処理を行うようにしたいです。

class XXX extends JFrame{
Image offi;
Graphics offg;

public XXX(){
offi = createImage(640, 480);
offg = offi.getGraphics();
meeen();
}
public void paint(Graphics g){
offg.setColor(new Color(0,0,0));//[[[[この行]]]]
offg.drawString("うるおいミルク ぷー",100,100);
g.drawImage(offi,0,0,this);
}
public void meeen(){処理;}
}

実行してみると、上の[[[[この行]]]]を含む行にNullPointerExceptionが発生する時があります(しない時もあります)。
例外が発生した時はXXXのコンストラクタ内の特定の処理が終了する前にpaintメソッドが呼び出されてしまったということなのでしょうか?
どなたか解説お願いします!
0979デフォルトの名無しさん2011/03/22(火) 23:12:01.37
offi.getGraphics()がnullを返してるんじゃね
0980デフォルトの名無しさん2011/03/23(水) 02:34:24.84
4スレ消費毎ぐらいの周期で発狂したり鎮まったりしてるよねこのスレ
ここ見てるPG/SEの帰宅時間に関係があったりして
0981デフォルトの名無しさん2011/03/23(水) 03:49:18.33
Jakarta のサイトから JSTL がダウンロードできなくなってるんだけど何なの?
SVN 以外での配布やめたの?
http://tomcat.apache.org/taglibs/standard/
0982デフォルトの名無しさん2011/03/23(水) 08:50:37.11
>>981
以下のようにあるから、恐らく開発中。
> not yet JCP approved
0983デフォルトの名無しさん2011/03/23(水) 08:52:58.24
>>978
初心者にしては珍しく具体的な情報が多くて良い質問だなぁ。

main()とEDTは別プロセスだから、mainの実行中にswingのオブジェクトツリーに追加されるような操作(setVisible(true)とか)すると、以降非同期にEDTからpaint等が呼ばれる可能性があるような。

JFrameってコンストラクタでsuper()しなくていいんだっけ?
0984デフォルトの名無しさん2011/03/23(水) 08:59:39.60
スーパークラスにデフォルトコンストラクタが定義されていれば
暗黙的にそれが呼ばれます。
0985デフォルトの名無しさん2011/03/23(水) 09:04:55.04
>初心者にしては珍しく具体的な情報が多くて良い質問だなぁ。
>JFrameってコンストラクタでsuper()しなくていいんだっけ?

自分が初心者のくせになに言ってんだw
0986デフォルトの名無しさん2011/03/23(水) 09:49:22.52
どうせ鼻糞だろ
相手にするな
0987デフォルトの名無しさん2011/03/23(水) 10:01:09.16
自分を上級者と勘違いしてる基礎もわかってない初心者が、頼まれてもいないのに質問に珍回答で応答しちゃうのがこのスレ
0988デフォルトの名無しさん2011/03/23(水) 13:30:12.60
978です。解答ありがとうございます。
現在はダブルバッファリングの実装を必要としない方法に書き換えました。

質問の状態ではsetVisible(true)をXXXのコンストラクタ内に記述していたのですがこれがいけなかったのでしょうか。
ということはつまり、JFrameのインスタンスを生成する際にはコンストラクタ内の処理とpaintメソッド内の処理のどちらが先に行われるかはわからないということでしょうか?

また、
>JFrameってコンストラクタでsuper()しなくていいんだっけ?
についてできれば詳しく教えていただきたいです。
0989デフォルトの名無しさん2011/03/23(水) 15:11:35.05
そんなのサンプル落としてくる方が早いぞ
0990デフォルトの名無しさん2011/03/23(水) 15:32:22.96
>>988
コンストラクタの処理とpaintの処理については、StringBuilderのようなフィールドにそれぞれの呼び出しで別の値を追加するようにすればわかるんじゃないかな?
で、Javaはコンストラクタの先頭で明示的にsuperを指定しないと引数なしの superが自動的に呼び出される。
0991デフォルトの名無しさん2011/03/23(水) 16:14:20.21
Servletでブラウザに複数のファイルをダウンロードさせたいのですが
サーバー側で複数ファイルをzipなどで圧縮して1ファイルにし
ブラウザにダウンロードさせ、それを解凍してもらうしかないでしょうか?
0992デフォルトの名無しさん2011/03/23(水) 16:58:12.40
>>978
オフスクリーン用 Graphics は paint 内で作るとよい。
if (offg == null) offg = offi.getGraphics();
0993デフォルトの名無しさん2011/03/23(水) 17:08:39.65
>>992
んなことせんでも Swing は最初からダブルバッファ機構あるから
自前でやる必要まったくない

なにもしなくてもおけ

paintComponent(Graphics g)

これオーバライドして、適切なタイミングで repaint 呼び出すだけでよい
ちなみに repaint は、ちゃんと再描画の範囲を指定してやると無駄な処理が少なくなっていい
0994デフォルトの名無しさん2011/03/23(水) 20:16:20.23
>>978
JFrame のサブクラスでなにかを描画するプログラムを
書くよりは、まず JComponent のサブラクス作って、そこに描画
のプログラム書いて、

そのパネルを main メソッドの中で JFrame#setContentPane とかして、
表示させるのがいい

コードが整理されて見やすいし、アプレットとかにも転用できる
0995デフォルトの名無しさん2011/03/23(水) 20:30:15.37
何年経っても、メインスレッドからSwingコンポーネントを触る人間が絶滅しないな
0996デフォルトの名無しさん2011/03/23(水) 22:11:39.11
>>993
オライリーのSwingHacksとかでも、描画関連の処理はpaintComponentでやれって書いてたな
SwingHacksは、ちょっと古いけどSwingの描画まわりはかなり詳しく解説されてた
Swingを本気でやるならオススメだ

>>995
Swing自体、複雑だしわかりにくいからな
その辺りを解消するために、Swing Application Frameworkとか開発されてたけど、
今、どうなってるか知ってる人いる?
0997デフォルトの名無しさん2011/03/23(水) 22:38:12.51
>>996
SWTみたく別スレッドからアクセスしてきたから
即例外エラー出さないからねえ

しかし、それでも、コンポーネントの組み替えとか
必要なところだけ SwingUtilities.invokeLater(doRun)
やればいいだけだろう、そんなに難しい話じゃない
0998デフォルトの名無しさん2011/03/24(木) 04:51:30.65
つぎすれ
09999832011/03/24(木) 07:54:24.69
>>984
> スーパークラスにデフォルトコンストラクタが定義されていれば
>暗黙的にそれが呼ばれます。
そうだっけ。
最近そういうの全然意識してなかったうえに、swing使ってた頃はJFrameは引数付けて呼んでたもんで、確認せずに適当に書いた。
984以降指摘してくれた各位と質問者にお礼とお詫びする。
ありがとう。混乱させてすまなかった。


ついでに埋め。
1000デフォルトの名無しさん2011/03/24(木) 10:07:02.51
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。