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

このエントリーをはてなブックマークに追加
1Javaが初心者
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

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

前スレッド
【初心者】Java質問・相談スレッド114【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1207385614/
次スレは>>990あたりで。

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

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝のう存じます。
3Javaが初心者:2008/05/12(月) 03:07:10
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 7
ttp://pc11.2ch.net/test/read.cgi/tech/1204155623/l50
■ SWT は --
Java 高速GUI SWT 3
ttp://pc11.2ch.net/test/read.cgi/tech/1164877399/l50

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part16
ttp://pc11.2ch.net/test/read.cgi/tech/1207110104/l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 7
ttp://pc11.2ch.net/test/read.cgi/tech/1180010672/l50

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 64 ★★
ttp://pc11.2ch.net/test/read.cgi/tech/1196543694/l50

**** 開発環境が必要の場合は ****
■ J2SE 1.4.0
ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/index.html
■ J2SE 5.0 (1.5.0)
ttp://java.sun.com/j2se/1.5.0/ja/
■ Java SE 6
ttp://java.sun.com/javase/ja/6/

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
ttp://www.java.com/ja/
4デフォルトの名無しさん:2008/05/12(月) 03:39:10
>>1
5デフォルトの名無しさん:2008/05/12(月) 03:55:12
>>1
おつ
6デフォルトの名無しさん:2008/05/12(月) 04:36:14
javaを勉強するなかで、私はまずjavaで簡単なゲームを作ることにしました。
アプレットを作る方法を勉強すればいいと思うのですが、
javaでできるのはアプリケーションとかサーブレットとかもあるがそれはしないつもりなのか?と突っ込まれました

まだ全然よくわからないのですが、アプリケーション用のjavaとかサーブレット用のjavaとかがあるわけではないですよね
アプレットを作るプログラムの基本を学んでいけば、その応用でアプリケーションやサーブレットにも対応していけると予想しているのですが
この考え方で問題ないでしょうか?

いろんな本やサイト見ても、そもそもjavaで出来るのはこれこれで、それはこういうものだっていう説明は中々見つかりません
いきなりプログラムの書き方について(クラスとかメソッドとか)ってのが多くてこの疑問がなかなか解決しなくて困っています
7デフォルトの名無しさん:2008/05/12(月) 05:08:40
JDKのドキュメント見てわからないなら何見ても一緒
Sunの米国サイトに行っても概要は分かるはず
jakartaなども覗いて見るといいだろう
8デフォルトの名無しさん:2008/05/12(月) 10:29:10
>6 javaにはたくさんのクラス、メソッドがあり全てを覚えきって
使いこなすには今生では無理。java.utilパッケージを使いこなすのは必須事項だけど
javaで何がやりたいか?(サーブレット、アプレット,swing etc)を決めて
それのエキスパートになるのが良いと思うよ。
9デフォルトの名無しさん:2008/05/12(月) 10:52:16
String[] allTokens = line.split(" ");
for (String token : allTokens)
この意味を教えてください。
10デフォルトの名無しさん:2008/05/12(月) 11:11:42
age
11デフォルトの名無しさん:2008/05/12(月) 11:40:03
>>1乙です。
早速質問お願いします。

import java.util.regex.*;

public class TestRegex {
public static void main(String[] args) {
Pattern pattern;
Matcher matcher;
/* パターンマッチ */
System.out.println("<パターンマッチ>");
pattern = Pattern.compile("[^0-9a-zA-Z]+");
matcher = pattern.matcher(args[0]);
boolean b = matcher.matches();
System.out.println("match =[" + b +"] CD=[" + args[0] + "]");
}
}

実行時コマンド java TestRegex "a"
結果はtrueを期待していたのですが、falseになります。

なぜでしょうか?
1211:2008/05/12(月) 11:44:10
すいません、自己解決しました。
falseで合ってますね、失礼しました。
13デフォルトの名無しさん:2008/05/12(月) 11:49:53
>>9
jdk5以降のjavadocの新機能の章、拡張for文のところを嫁
14デフォルトの名無しさん:2008/05/12(月) 12:14:42
>>13
thx
15デフォルトの名無しさん:2008/05/12(月) 14:29:49
>>6
ただ漫然とエキスパート目指してもその類の人間はごまんと居る
君のように何が出来るのかを考え大枠を作り出す能力こそが非常に重要
16デフォルトの名無しさん:2008/05/12(月) 16:51:17
javaでUSBバスパワーのON/OFFや
電圧制御などはできますか?
USB扇風機をプログラムで制御できないものかと考えたのですが・・・
17デフォルトの名無しさん:2008/05/12(月) 17:13:13
JavaUSB
18デフォルトの名無しさん:2008/05/12(月) 17:40:55
>>17
kwsk
19デフォルトの名無しさん:2008/05/12(月) 18:06:54
>>18
ぐぐれ
20デフォルトの名無しさん:2008/05/12(月) 19:10:38
質問なんですがjavaにもMSDNライブラリみたいなサイトってあります?
21デフォルトの名無しさん:2008/05/12(月) 20:03:27
sunのページが山ほどあるだろ
22デフォルトの名無しさん:2008/05/12(月) 20:05:05
>>19
ありがとうございます。
色々検討してみます。
23デフォルトの名無しさん:2008/05/12(月) 20:10:18
>>21
あ なるほど・・ありです!
24デフォルトの名無しさん:2008/05/12(月) 20:20:15
import java.util.Scanner;
class Les4_1{
public static void main(String[] args){
Scanner stdIn = new Scanner(System.in);
int y;
do{
System.out.println("整数を入力してください");
int x = stdIn.nextInt();

if(x == 0){
System.out.println("入力された値は0です。");
}
else if(x <0){
System.out.println("入力された値は正です。");
}
else{
System.out.println("入力された値は負です。"); }

System.out.println("もう一度? YES=1 NO=2");
y = stdIn.nextInt();
}while(y == 1);
}
}
・・・というような参考書に載っていた読み込んだ整数値の符号を判定するプログラムを
作っていたのですが、utilのパッケージ、Les4_1のクラスでシンボルを解決できない、
というエラーが出てしまいます。

一行目をimport java.io.*;に変えるとutilのパッケージのエラーが消えました。
開発環境はJ2SE SDKです。長くなりましたが、どうか回答お願いします。
25デフォルトの名無しさん:2008/05/12(月) 20:23:25
何の回答?
2624:2008/05/12(月) 20:30:28
>>25
すみません、言葉足らずのようでした。
どうしたら解決できるのでしょうか?
プログラムとしては間違っていないようなのですが・・

ttp://www.javadrive.jp/start/scanner/index1.html
こちらのサイトのサンプルプログラムでも同じようなエラーが出てしまいました。
27デフォルトの名無しさん:2008/05/12(月) 20:44:53
正常に動くようだけど?ただし不等号が逆
28デフォルトの名無しさん:2008/05/12(月) 20:46:46
java.util.Scanner
Since:
1.5
2924:2008/05/12(月) 20:50:28
>>27
気付きませんでした。ありがとうございます。

>>28
今使ってるのが1.4.2でした・・・。
新しいバージョンのでやり直してみます。ありがとうございます。
30デフォルトの名無しさん:2008/05/12(月) 21:33:21
質問です

ArrayList型の変数に格納されてる値をString型の変数に代入して行きたいのですが
C言語の配列だと最後に\0が格納されていて、終端の判断が出来るのですが
ArrayListにもその様な終端の判断が出来る要素ってありますか?

また無かったら、どの様にして終端を判断するのか教えてください
31デフォルトの名無しさん:2008/05/12(月) 21:39:29
size()
32デフォルトの名無しさん:2008/05/12(月) 21:43:35
ArrayListの長さならsize()
Stringの長さならlength()



33デフォルトの名無しさん:2008/05/12(月) 21:55:13
>>31-32
ありがとうございます
34デフォルトの名無しさん:2008/05/13(火) 00:18:55
javaを勉強してる学生です。
win+ECLIPSEでやってるのですが、ECLIPSEがちょっと重たい。
いいツールないですか?オススメあったら教えてください。

私、普段macなんですが、macでjavaを勉強しようと思ったらどういう環境がいいですかね?やっぱりECLIPSEですか?OS10.5です。
35デフォルトの名無しさん:2008/05/13(火) 00:24:47
vim + Makefile は軽いよ! 当然ながら。
36デフォルトの名無しさん:2008/05/13(火) 00:54:31
>>34
個人的な意見だが、MacOSXのSWTはやたら遅いので、
MacでやるならNetBeansのほうがサクサク動いてお勧め。
37デフォルトの名無しさん:2008/05/13(火) 01:17:39
>>35,36
vimは先生が使うなって言ってたんです。
なんでかわかりませんが。

MacだとNetBeansですか。。
ちょっとチャレンジしてみます!
38デフォルトの名無しさん:2008/05/13(火) 01:21:57
vim 使いの俺に対する挑戦か・・・その先生はw
まあ、初心者には敷居高いわな。
39デフォルトの名無しさん:2008/05/13(火) 01:24:26
>>38

にゃはは。敷居が高いって言ってました。うちの先生。
NetBeansでいろいろしてからvimにチャレンジしてみます!
40デフォルトの名無しさん:2008/05/13(火) 01:45:06
プログラムでも何でもないんだけど
良いスレ見つからなかったので
簡単な質問させて下さい。

私はローテクアニオタゲーマーでブロック崩しとか
好きなんですけど、JAVAのブロック崩しって
マウス操作がおもくそ引っ掛かりませんか?
ノートだろうがハイスペックデスクトップだろうが
同じような頻度で同じように引っ掛かって
ちゃんと操作してるのにカーソルが動かなくて
玉をロストってのがめっさムカつきます。
これってJAVAゲーの仕様なんですか?
どうしようもないことなんですか?
それ以外は作り手さんが色々な工夫を
し易いみたいで面白いんですが、アレだけは
本当に嫌なんです。どうにかなりませんか?
41デフォルトの名無しさん:2008/05/13(火) 02:08:06
>>40
板違い
ここはプログラミングするひとの板です
そのゲームプログラムを>>40が改造してもっとよくしたいとかなら
>>40が作成したソースを示すことで相談に乗れる人もいるでしょう
42デフォルトの名無しさん:2008/05/13(火) 02:34:37
作り手の質の問題だよね
そんなひどい品質のゲームを出すこと自体センスを疑う
43デフォルトの名無しさん:2008/05/13(火) 04:48:09
Integerの配列のデータをintの配列のデータに入れようとしたらエラーがでます。
(int)でIntegerの配列のデータをキャストしようとしたんですが無理でした。
なんで?
44デフォルトの名無しさん:2008/05/13(火) 04:54:57
43です。
自己解決しました。
Integer-int変換なんだから自動で処理してほしいですね
45デフォルトの名無しさん:2008/05/13(火) 06:15:08
>>44
Integer[] i = ...;
int[] j = ...;
j[0] = i[0];
みたいにIntegerとintの間ならauto-boxing, auto-unboxingしてくれるはずだが?
どんな代入を行おうとしたんだ?
46デフォルトの名無しさん:2008/05/13(火) 06:19:35
使ってるのが1.4以下だったならこの言語仕様はないから真面目に変換を書かないとだめだが
47デフォルトの名無しさん:2008/05/13(火) 07:17:12
>>45
DataTableがInteger型です。
int [ ] DataOfSocialStudies= new int [ DataTable[2].length ] ;
for(int i=0;i<DataOfSocialStudies.length;i++){
DataOfSocialStudies[i]= DataTable[2][i].intValue(); ←この部分
}

ぷらっとフォームを確認したらJDK1.4だったんでJavaHotSpotClient VM1.6
ってのにしたんですけどエラーは変わらず出ました・・・
48デフォルトの名無しさん:2008/05/13(火) 07:33:13
JDK1.6入れろよ
49デフォルトの名無しさん:2008/05/13(火) 16:11:23
>>47
>ぷらっとフォームを確認したら
PCショップか。
50デフォルトの名無しさん:2008/05/13(火) 21:04:29
あれはぷらっとホーム

昔、営団がホームドアを導入したとき、Home Doorと英表記してたのを思い出した。
51デフォルトの名無しさん:2008/05/13(火) 21:09:54
swingスレか迷ったのですが、
コマンドプロンプトを起動+コマンド入力→実行
をJavaプログラム内から行いたいのですが、こういうのは可能なのでしょうか?
52デフォルトの名無しさん:2008/05/13(火) 21:20:05
Runtimeクラスを調べてごらーん
53デフォルトの名無しさん:2008/05/13(火) 22:14:05
Web系の仕事をしてまもない若輩者です。

最近、上司の教えにより、ようやくsyncronized構文を使ったサーブレットを作成する事が
理解できるようになりました。スレッドについては他にThreadクラス、Runnableインターフェイス等あるみたいなんですが、
とりあえずsyncronizedを覚えてといわれたので上記2つは勉強しておりません。

Web系開発をするにあたり上記2つ(Threadクラス、Runnableインターフェイス)は
必要でしょうか?

よろしくお願いします。
54デフォルトの名無しさん:2008/05/13(火) 22:47:42
もしかしてResultSetってクエリの結果をオブジェクト内に保持しているんじゃなくて
getXxx()する度にDBに結果を取りに行ってるんですか?
55デフォルトの名無しさん:2008/05/13(火) 22:54:58
1レコード取得するたびにRDBMのカーソルが動くと思っておけばいいんでない?
56デフォルトの名無しさん:2008/05/13(火) 23:04:16
どうせでっかいがちがちのフレームワーク使うことになると思うよ。
57デフォルトの名無しさん:2008/05/13(火) 23:04:50
5853:2008/05/13(火) 23:08:17
>>57
なんですか!?なにかおかしかったですか??

せっかくスレッドの本を1冊かったので、もし必要ならやっとこうかなとおもったんです。

だから、教えてくれればありがたいんですが。。

59デフォルトの名無しさん:2008/05/13(火) 23:11:55
>>53
お前にはまだ早いというのが上司の判断だろう
60デフォルトの名無しさん:2008/05/13(火) 23:18:55
            ____
         __,,/  _, ----`ヽ
        / _     ___   、\
       / /   i      \   \\
       ,'./       i  ヽ:.   ヽ:.:.. ヽ.ヽ
      ,'/    / .ハ ヽ ヽ:.:.:.:. ヽ::.. ヽヽ
       |i .i i  .i /  ヽ ト 、 \、:.:.:. ',:.',:.:.lヽ}
       |i .i l  :N_, -弋 \弌弋ナ:}:.:}
      |i∧ ', :{ ,ィjモト \  イjミトイイV
       .|  :メヽ.', `ozZ}      izN。ハ::{
        |  :ヾ_! ゝ "゙゙    '  `゙ ハ.:',
      |  :.:_イ .:.ヽ.   (二フ , イ :.:.:!:.ヽ
      / rィイ | :.:.ヽ: >r/`<ノ .:.::.}ヽ、\
      / ∧l;l ! :.:.:.://{二 ̄ .} ..:..::リ//ハ.:\
    / .{. ',ヾ、ヽi .:.:.{ /(^`  |.:.:.:.//: : :.}: . ヽ.
   / /  ) ヽ ヾ、ヽ:.ハ ヤ{   ∧/.-‐'": : |:.:. i ',
  ./ .,イ .:..} : :\ヾレ'ハ ∧__ノノハヾ、  : : : l:.:.: .ハ ',
  { /| .:.:ハ : : :i Y {ヾ`Yヽニン'ノ}: : } : : : :/:.:.:/ }:.}
  V | .:.:/:.:|_,ィ' ̄  ヽ三{ `ー-ノ : イ : : :/:.:i.:{  リ
    ヽ:.:{、.:.V     : : ヘ     : : {: : :/:.::∧|
     ヽ! )人    : : :人      : : : / \!
      "  ヽ : : : : :/イ{     :.ノ: : : :.\
          \__///: :\______/: : : : : : : ヽ
           / //: : :|;|: : : : : : i: : : __: : : : ',
             / 、 {;{   |;|   . : i/. : : : : : :|
          / `Y;{. . . .|;|. : : : /i: : : : : : : : :l

なんですか!?なにかおかしかったですか??

せっかくスレッドの本を1冊かったので、もし必要ならやっとこうかなとおもったんです。
61デフォルトの名無しさん:2008/05/13(火) 23:24:02
>>58
状況がよく分からんが・・・・・

そもそも、synchronizedを使うということは、
マルチスレッドが絡んでる領域だろう

一般論としてマルチスレッドプログラミングは、概念を理解した上で行わないと危険
しくじると簡単にデータの整合性を破壊したり、パフォーマンスを劣化させてしまう
おまけにバグが再現しにくいので修正も簡単じゃないことがある
62デフォルトの名無しさん:2008/05/13(火) 23:26:04
単なる釣りだろ
63デフォルトの名無しさん:2008/05/13(火) 23:26:34
まあJavaでWebならデフォでマルチスレッドだからな
64デフォルトの名無しさん:2008/05/13(火) 23:33:53
サマータイムになったらどうすればいいの?おしえてちょ
65デフォルトの名無しさん:2008/05/13(火) 23:40:51
何がしたいの?
66デフォルトの名無しさん:2008/05/13(火) 23:55:28
質問です

Javaアプリケーションで起動したときに
フレームの上半分にあらかじめ指定していたファイルから
画像を読み込み表示するというプログラムを
作りたいのですがどう作れば良いのでしょうか?

調べてもAppletに関することばかりで困ってます
67デフォルトの名無しさん:2008/05/13(火) 23:58:48
appletで出来るのなら
親をJFrameにすれば?
68デフォルトの名無しさん:2008/05/14(水) 00:00:39
フレームにAppletを貼ったあとinitとstartを呼び出すのも忘れずに。
69デフォルトの名無しさん:2008/05/14(水) 00:14:30
>>67
いえ
Appletでも出来ないんです
70デフォルトの名無しさん:2008/05/14(水) 00:16:26
ということはここでアプリケーションに関する情報を得たとしても作れないってことだ
素直に宿題スレへ行け
71デフォルトの名無しさん:2008/05/14(水) 00:25:08
申し訳ありませんでした
もう少し勉強してきます
72デフォルトの名無しさん:2008/05/14(水) 00:26:03
>>69
で、どこまで調べた?
73デフォルトの名無しさん:2008/05/14(水) 00:32:19
そういや>>68っていう手があったな。
アプレットなんてもう何年も使ってないから忘れてた。
7451:2008/05/14(水) 00:44:12
>>52
すいません、寝ちゃって返事が遅くなってしまいました!><
ちゃんと引数まで付けて実行出来るとは、正にやりたかったことです!
おかげさまで非常に助かりました、本当にありがとうございます!!
75デフォルトの名無しさん:2008/05/14(水) 00:58:52
ぐぐればすぐ出てきそうなもんだろうに…<<66
76デフォルトの名無しさん:2008/05/14(水) 01:02:34
宿題スレから誘導されて来ました。
乱数を利用して0〜53の値をランダムで配列に格納するプログラムなんですけど、
永久ループになってしまいます。値は一意です。
どなたか助けてくださいm(_ _)m


public class XXX {
public static void main(String[] args) {
/* 変数宣言 */
int[] card = new int[53];
int nn, num;
boolean frg = false; // 配列との比較用フラグ

/* 乱数の発生と格納 */
nn = 0;

while (nn != 52) {
num = (int)(Math.random() * 54);

for (int i = 0; i < nn; i++){

if (num == card[i]) {
frg = true;
break;
}
}

if (frg == false) {
card[nn] = num;
nn++;
}
77デフォルトの名無しさん:2008/05/14(水) 01:03:02

/* 結果の表示 */
String buf;

for (int i = 0; i < card.length; i++){
buf = " " + card[i];
buf = buf.substring(buf.length() - 4);
System.out.println(buf);

if (i % 10 == 0){
System.out.println();
}
}
}
78デフォルトの名無しさん:2008/05/14(水) 01:14:05
>>76
while (nn != 52) {
num = (int)(Math.random() * 54);

for (int i = 0; i < nn; i++){

if (num == card[i]) {
System.out.println("num=" + num);
frg = true;
break;
}
}
でやってみたらどう?
79デフォルトの名無しさん:2008/05/14(水) 01:34:33
>>78
やってみました、
num = で、1〜53までのランダム整数が永久ループで表示され続けます。
フラグ初期値falseがどんな数値でもtrueになってしまっているようで、
それでいてnnが加算されないのが永久ループの原因のようです。
うう、どうしてかわからない・・・。
80デフォルトの名無しさん:2008/05/14(水) 01:37:22
シャッフルって普通こう書くんでは?

public static void shuffle(int[] array) {
shuffle(array, array.length);
}

private static void shuffle(int[] array, int size) {
if (size == 1) return;
int swapIndex = random.nextInt(size - 1);
int temp = array[size - 1];
array[size - 1] = array[swapIndex];
array[swapIndex] = temp;
shuffle(array, size - 1);
}
81デフォルトの名無しさん:2008/05/14(水) 01:44:02
>>80
すません、まだJAVAならいたてのど素人なので
そこらへんは・・・

(int)(Math.random(x + 1))で、0〜Xまでの数値のランダムというのを
ネットで発見したのでそれを使ってやろうと考えています。
8280:2008/05/14(水) 02:05:54
誤: int swapIndex = random.nextInt(size - 1);
正: int swapIndex = random.nextInt(size);

死にたい。

>>81
if (frg == false) {
card[nn] = num;
nn++;
} else frg = false;

ってしてみたら?
あとフラグの綴りはflagです。

buf = buf.substring(buf.length() - 4);

は何やってるのかわかりません。
if(frg == false)はif(!frg)でいいじゃん
8353:2008/05/14(水) 02:08:44
たびたびすみません。>>53です。みなさん、レスありがとうございました。

上司からデッドロックとかスレッドの概要はおしえてもらいました。データの整合性
とか同期とかも教えてもらいました。

スレッドクラスとかランナブルインターフェイスというのは、スレッドを専門にあつかうクラスであるみたいですが、
Webアプリやるならsyncronizedだけでいいといわれました。でも、せっかく本を買ったので
必要ならやってみたいとおもったりしたわけです。

概念的なものは理解したつもりです。後はクラスの使い方だとおもうんです。
ですから、それを勉強しといたほうが得なのか、Webアプリには必要ないのかを聞きたいんですが…

ぜんぜん、つりではなく、まじめな質問なので、よろしくお願いします。
具体的には、WebアプリでThreadクラスやらRuunableインターフェイスを使う事があるのかないのかを聞きたいです。

どうか、よろしくお願いします。
8453:2008/05/14(水) 02:10:08
上司の物言いが軽かったので、真偽のほどをおしえてもらいたいんです。

すみませんが、軽く答えていただければいいのでよろしくお願いします。
85デフォルトの名無しさん:2008/05/14(水) 02:15:59
その辺のめんどくさいことはアプリケーションサーバがやってくれるので、
意識しなくてよいはずです。
そのためのアプリケーションサーバですから。
せっかく本を買ったのなら、アプリケーションサーバのベンダの人達は、
こんなめんどくさいことやってるんだなあ、と考えながら読みましょう。
86デフォルトの名無しさん:2008/05/14(水) 02:17:01
明示的に使う使わないに関わらずjava技術者ならスレッド全般の知識はあって当然
目先のことに囚われて勉強しなくていいやなんて思っているなら死んだ方がまし
8753:2008/05/14(水) 02:26:06
>>85
まいど!やんなくていいですか。ありがとうございます。
せっかく買ったのでやってみようとおもいます。ありがとうございました。

>>86
スレッドってそんな大事なんですね。あちきは、単なる1部分くらいにおもってました。
じゃあ、やってみます。

みなさん、回答どうもありがとうございました。多謝です。
88デフォルトの名無しさん:2008/05/14(水) 02:30:21
>>82
あーっ、なるほど。漸くわかりました。
一度既出の値が出たときにフラグがtrueになるのがそのままtrueのまま続いてしまっていたんですね。
どうもありがとうございます。精進します。


>buf = buf.substring(buf.length() - 4);

すいません、説明不足でした。表示する内容を右揃えする制約があったので、
substringを利用して右揃えをする部分ですこれ。
89デフォルトの名無しさん :2008/05/14(水) 03:45:49

◆6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催
http://system-trading.jp/news/index.php?cID=3

5月22日より登録受付開始、6月2日よりグランプリ開始の予定。賞金総額2000万円。
  デモトレードの優勝者には賞金三百万円がプレゼントされます。


▼トレード部門
初期資産500万円で、デモ取引のトレード収益を競っていただきます。
http://www.fx-gp.com/about/

▼賞金総額
■社長特別賞(シストレソフト買取価格) 10,000,000円
●シストレソフト部門賞 1位300万円 2位100万円 3位50万円
●トレード部門賞 1位300万円 2位100万円 3位50万円
●前期MVP賞 50万円
●後期MVP賞 50万円
90デフォルトの名無しさん:2008/05/14(水) 05:35:57
すみません、別のプロジェクト内のクラスのインスタンスを作ることって可能なんでしょうか?
教科書にスタックの考え方を再現したJAVAプロジェクトと、前置記法のアルゴリズムを再現したJAVAプログラムがあり、
そのうち前置記法のプロジェクトが当然のようにスタックのプロジェクト内のクラスのインスタンスを作っているのですが。
エクリプス上でその部分に赤線が引かれており、実行してもエラーが出ます。
また、別のクラスを呼び出すために「Javaのビルド・パス>プロジェクト」と「プロジェクト参照」の設定」とやらも試してみたのですが、
そうすると赤線部分はなくなったのですが、実行しても何も起こりません。
前置記法のプログラムの最初にはimport java.io.*; とあるのですがそれが関係しているのでしょうか?
91デフォルトの名無しさん:2008/05/14(水) 07:06:40
すいません。初歩の初歩でつまずきました。。。
実行すると
Exception in thread "main" java.lang.NoClassDefFoundError:
↑はwikiで解決するんですが、
at java.net.URLClassloader$1.run(Unknown Sourse)
at ・・・
at ・・・
と、at何とかが7個出てくるんですがあれはなんでしょうか?
教えてください。
92デフォルトの名無しさん:2008/05/14(水) 11:42:50
エラー
93デフォルトの名無しさん:2008/05/14(水) 14:25:20
>>91
スタックトレース
例外が投げられた時点でどういうメソッドが呼ばれていたのかの情報
下の行のメソッドが上の行のメソッドを呼んでいることを表す
その場合は例外は一番上のjava.net.URLClassloader$1クラスのrunメソッドで投げられた
94デフォルトの名無しさん:2008/05/14(水) 16:23:05
2006年atex1003第XX回「hoge」(piyopiyo).avi

↑のようなファイル名のファイルが大量に入ったディレクリを引数に指定して、
中のファイル名を第XX回「hoge」.aviにしたいと考え以下のようなものを書いたのですが、
renameToの返却値がfalseになってダメです。
どうしたらちゃんとリネーム出来るのでしょうか?orz
public static void main(String [] args)
{
File dir=new File(args[0]);
String[] str=dir.list();
for(int i=0;i<str.length;i++)
{
File file=new File(args[0]+str[i]);
String newfile=new cui().toRenStr(str[i]);
System.out.print(file.renameTo(new File(args[0]+"/"+newfile)));
}
}

public String toRenStr(String str)
{
Pattern pattern = Pattern.compile(".*第");
Matcher matcher = pattern.matcher(str);
String renstr = matcher.replaceAll("第");
pattern = Pattern.compile("」.*");
matcher = pattern.matcher(renstr);
renstr = matcher.replaceAll("」.avi");
System.out.println(renstr);
return renstr;
}
}
95デフォルトの名無しさん:2008/05/14(水) 17:01:05
>>94
renameTo()を呼ぶ前に、file.getName()とnew File(args[0]+"/"+newfile).getName()
を表示して確認。

96デフォルトの名無しさん:2008/05/14(水) 20:11:53
質問です。
左右マウスホイールって使えないんですかね?
(一般的にはチルトホイールという?)
少し調べたんですけど、全然出てこないですね。
97デフォルトの名無しさん:2008/05/14(水) 20:51:21
JavaでWebサーバを作成中で、POSTリクエストの受付を可能にしようとしています。
POSTのHTTPリクエストは
「ヘッダ部複数行」
 1空行
「データ部1行」なので、
BufferedReader br = new BufferedReader
(new input StreamReader(socket.getInputStream()));
でHTTPリクエストを取得。そのあとに
while(br.readLine() != (""){
}
String data = br.readLine();
とやれば、データ部をdataに入れられると思ったのですが、
データ部の後ろには改行コードのCRLFがないため、readLineで1行読み込む
ことができないようです。同様にread()でもうまくいきません。

どうにかしてデータ部を取得することはできないでしょうか?
98デフォルトの名無しさん:2008/05/14(水) 21:09:43
>>97
たいていの場合はヘッダにデータ部の長さが入っているので、そのぶん
だけ読めばよろしい。

他、気になるところ:
・HTMLからのフォームPOSTでも、データがMIMEで送られることがあるので、データが1行とは限らない
・データがバイナリのこともあるので、基本的にReader類は使ってはダメ
・chunked-encodingのこともあるので、以下略
99デフォルトの名無しさん:2008/05/14(水) 21:27:47
private InputStream is;
private InputStreamReader in;
これらを使って文字列を読んでるんですが、ファイルが終端に達したかを調べる方法ってありますか?
100デフォルトの名無しさん:2008/05/14(水) 21:32:32
>>99
readメソッドの戻り値がー1
101デフォルトの名無しさん:2008/05/14(水) 21:40:13
>>100
ありがとうございます
102デフォルトの名無しさん:2008/05/14(水) 22:50:49
スレチかもしれませんが教えてください。
いまSQL Serverとjavaを繋げる勉強をしています。
INSERTした時間を後で取り出し
after()メソッドで比べたいのですが、そういった処理は可能ですか?
もし可能なら詳しく教えてください。
103デフォルトの名無しさん:2008/05/14(水) 23:01:01
System.currentTimeMillis() または System.nanoTime()
104デフォルトの名無しさん:2008/05/15(木) 00:19:56
ガベージコレクションは必要なくなったオブジェクトを自動的に開放してくださるそうですが、ストリームも自動開放してくれるのでしょうか?

また、どのタイミングでしてくれるのですか?
105デフォルトの名無しさん:2008/05/15(木) 00:25:52
しません。
106デフォルトの名無しさん:2008/05/15(木) 00:27:08
忘れてた。ファイナライザでクローズしちゃだめだよ
107デフォルトの名無しさん:2008/05/15(木) 00:30:16
ストリームくらいちゃんと閉じろ、馬鹿者
108デフォルトの名無しさん:2008/05/15(木) 00:33:55
void hoge() {
InputStream input = null;
try {
  // 略
} finally
  input.close();
  input = null;   // ←
}
}
これが必要か?って話ならばイラネ
109デフォルトの名無しさん:2008/05/15(木) 05:30:00
無駄にnull突っ込むのはC#でもよく見かけるんだが、何でこんなに
流行しちゃったの?何か歴史的背景とかあんの?
110デフォルトの名無しさん:2008/05/15(木) 08:45:43
>>103
ちょっと難しそうですけど、ありがとうございました。
111デフォルトの名無しさん:2008/05/15(木) 09:38:05
>>109
nullを入れたほうがGCの取りこぼしが少ないとか、即座にGCされるから効率的だとか、そういう勝手な思い込みから
112デフォルトの名無しさん:2008/05/15(木) 11:19:31
input.close();
input = null;
 System.gc();

しても実際3行目でメモリ解放するかはGCの実装依存なんだよね。
113デフォルトの名無しさん:2008/05/15(木) 11:47:37
バグの原因になるからだよ
処理しないでそのまま流してしまうコードを書くおっちょこちょいが多すぎて
コンパイラがデフォでnullを入れてないコードをコンパイルするときにエラーをはくようになった

114デフォルトの名無しさん:2008/05/15(木) 12:46:18
何言ってんだ?
115デフォルトの名無しさん:2008/05/15(木) 14:52:45
public class A {
 public static void main(String args[]){
  static int i = 0; // int i = 0;ならエラーにならないのはなぜですか?
116デフォルトの名無しさん:2008/05/15(木) 15:10:35
>>115
ローカル変数には static つけられないって言語仕様で決まってるから。
117デフォルトの名無しさん:2008/05/15(木) 15:21:37
public class A {
 static int i = 0;
 public static void main(String args[]){
これならいいんですね。
118デフォルトの名無しさん:2008/05/15(木) 17:27:21
>>117
それだとiはローカル変数ではなくなる。
staticはインスタンスでなくクラスに属する変数であるという意味だから、
クラスやインスタンス個別でなくスレッドごとに存在しているローカル変数に付けると
意味不明になってしまう。単に、>>115でstaticを外したように書けば、
ローカル変数iとして使えるし、コンパイルも通るはず。
それともクラス変数にしようとして書く場所を間違っただけ?
119デフォルトの名無しさん:2008/05/15(木) 17:37:44
型の静的変換について質問です。
とあるObject型のobj、Sting型のstrがあるとして

((String)obj).charAt(0);
str.charAt(0):
この二つでは、静的変換が入る上のほうが実行速度にペナルティーがあるのでしょうか?

以前やっていたCではペナルティがなかったと思うのですが、Javaだと「静的型変換に失敗した」という例外を投げてくれるようなので、おそらくなかでチェック機構が働いており、ペナルティがあるかなと思っているのですが
120デフォルトの名無しさん:2008/05/15(木) 17:48:19
>>119
コードや実行環境によるとしか言えない。

例えばループ内で obj が再代入されないなら
JITコンパイラが String tmp = (String)obj; みたいなコードを
ループ外部に作成して、ループ内部では tmp.charAt(0) に変換、
みたいな事をする可能性はある。
121デフォルトの名無しさん:2008/05/15(木) 17:49:55
>>119
あと、(String)obj は動的(実行時)型変換だよ。

静的(コンパイル時)型変換じゃない。
122デフォルトの名無しさん:2008/05/15(木) 17:58:49
>>120-121
なるほど、最適化されるということは、裏を返せば型変換にはペナルティがあるってことですね。

>あと、(String)obj は動的(実行時)型変換だよ。
たしかに。書き方がCと同じだからって、同じものだとは限らないわけですね。
Javaには静的型変換はないようで。

ありがとうございました。
123デフォルトの名無しさん:2008/05/15(木) 18:15:56
>>118
ありがとうございます。
int変数のiが5なのかを判定したくて
if(i == 5){
と書いてみたのですが、そのif以前にiが初期化されていなかったらiがnullかもしれないから
if(i != null && i == 5){
と書かなくてはならないのか調べたくて
int i;
if(i == 5){
とするとコンパイルできなかったから、
static int i;
if(i == 5){
と書きましたが、これもコンパイル不能でしたが、コンパイラがstaticを
解釈できていないようなメッセージを出しているみたいだったので質問させていただきました。
124デフォルトの名無しさん:2008/05/15(木) 18:17:38
>>123
int型が null になる事はない
125デフォルトの名無しさん:2008/05/15(木) 18:21:49
>>124
そうですね。nullになりませんが、プリミティプの数値型は0で暗黙の初期化がされるらしいので
int i;
を書いてから、初期化を書かずに
if(i == 0){
を実行して真となることを確認したいのですが、そのようなソースは書けませんか?
126デフォルトの名無しさん:2008/05/15(木) 18:23:40
>>125
ローカル変数は暗黙の初期化はされない。
127デフォルトの名無しさん:2008/05/15(木) 18:24:46
>>125
書けません。
必ずローカル変数はその値を参照する前に初期化されていることが求められています。
そして、ローカル変数は初期化を省略した際のデフォルト値のようなものはないので、
自分で初期化しなければなりません。
128デフォルトの名無しさん:2008/05/15(木) 18:27:37
>>125
int i;
と書いただけではiの値は確定していないので必ず初期化が必要。
iに値を代入するのがそんなに面倒?
129デフォルトの名無しさん:2008/05/15(木) 18:29:52
public class A {
 static int i;
 public static void main(String args[]){
これならiは暗黙の初期化で0ですね。
ありがとうございました。
130デフォルトの名無しさん:2008/05/15(木) 18:36:28
なにがやりたいのかわからん
ローカル変数とクラス変数では全然意味が違う
暗黙の初期化をしたいがためにローカルなものをフィールドに出したら
プログラムそのものの動作が変わってしまうだろ
131デフォルトの名無しさん:2008/05/15(木) 19:15:37
暗黙の初期化なんて百害あって一利ぐらいだわ。
一般的なJavaプログラミングには必要ない。

むしろプリミティブ型の値範囲と精度に注目して欲しい。
132デフォルトの名無しさん:2008/05/15(木) 19:58:21
なんか、Seasar2っていうのがいいらしい。

おもしろかったらやってみたいんだけど、
家計がしんどいので2000円の本買うのためらってる。

Seasar2っておもしろい??
133デフォルトの名無しさん:2008/05/15(木) 20:13:25
まず働いて2000円の本位買える家計環境にしよう
134132:2008/05/15(木) 20:50:48
>>133
働いています><; 一人暮らしでバイクのローンもあるから厳しいんです><;

原付にしときゃよかった><;

Seasarのスレがあったのでみたら、閉店するそうなので
やめます><;
135デフォルトの名無しさん:2008/05/15(木) 21:03:04
2,000円の本を買うのためらうくらいならネットで調べろ
136デフォルトの名無しさん:2008/05/15(木) 21:05:57
JSPでDBとやり取りするドライバ(のようなもの?)のクラスを作っているのですが、判らないことがあります。
ResultSet.nextをコールしないとSQLExceptionがスローされるようなのですが、なぜExceptionになるのでしょうか?

statement.excute(SQL文)でSQLのカーソルをSQL文に対応するレコードに移し、
statement.getResultSet()でカーソルの指し示すレコードをResultSetとして渡す。
で、ResultSet.getString()なりなんなりでSQLの中身を取り出す。

複数のレコードを取り出すならばResultSet.next()を使うのが自然だと思うのですが、単独のレコードが期待される場合は使う必要がないのではないでしょうか?
excuteじゃなくてexcuteQueryだと違うんでしょうか?
137デフォルトの名無しさん:2008/05/15(木) 21:15:23
なぜExceptionの詳細を書かないんでしょうか?
stacktraceくらい張ったらどうでしょうか?
138デフォルトの名無しさん:2008/05/15(木) 22:24:48
>>136
ResultSet のカーソルは、初期状態では最初の行の前に位置付けられています。
メソッド next の最初の呼び出しによって、最初の行が現在の行になります。
2 番目の呼び出しによって 2 行目が現在の行になり、以降同様に続きます。
139デフォルトの名無しさん:2008/05/15(木) 22:29:52
>>136
http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html
> A ResultSet object maintains a cursor pointing to its current row of data.
> Initially the cursor is positioned *before the first row*.

日本語版は誤訳だから気をつけろ
140136:2008/05/15(木) 22:49:57
英語苦手なんでアレなんですが…

ResultSetのカーソル位置が最初0で、受け取ったデータは1から始まるって事でしょうか?
141デフォルトの名無しさん:2008/05/15(木) 22:54:57
そう
142デフォルトの名無しさん:2008/05/15(木) 23:02:39
把握しました。ありがとうございます。

<チラ裏>
言えない…ResultSetが単体のレコードを格納すると思ってたなんて言えない…
</チラ裏>
143デフォルトの名無しさん:2008/05/16(金) 01:09:02
Cursorとかいう名前だったらよかったのにな。
144デフォルトの名無しさん:2008/05/16(金) 08:31:41
>>140
可能です。
以上。
↓次の方どうぞ
145デフォルトの名無しさん:2008/05/16(金) 08:35:28

質問です、文字列からColorクラスに変換することってできないでしょうか?つまり、
String colorname = "red";
のような色名を表す文字列を使って、setBackgroundやsetColorなどのメソッドの引数をつくる方法はないでしょうか?
色名を全部並べてif文とかで条件分岐をすればできるですが、それだととてもコードが長くなってしまうので・・・
146デフォルトの名無しさん:2008/05/16(金) 08:38:52
>>145
java.awt.Color#getColor(String)
147145:2008/05/16(金) 09:11:22
>>146
レスありがとうございます。やってみたのですが、たとえば
Color color;
color.getColor("red");
というふうにすると、コンパイルはできるのですが、ちゃんと色が出ませんでした。
redをblueやcyanに変えてみても、同じ黒っぽい色しか出ません。
どうしてなんでしょうか?

148デフォルトの名無しさん:2008/05/16(金) 09:17:15
APIリファレンスすら読まないから。
149145:2008/05/16(金) 09:29:15
一応読んではいるのですが・・・
150デフォルトの名無しさん:2008/05/16(金) 10:16:27
質問です

2次元の配列データを、csvファイルにして(デスクトップなどに)出力したいのですが、どのような方法があるでしょうか。
151デフォルトの名無しさん:2008/05/16(金) 10:29:14
自前でやるのが面倒なら commons-csv なりなんなり使え。
152150:2008/05/16(金) 10:32:28
すみません、自前でできる方法をお願いします。
153デフォルトの名無しさん:2008/05/16(金) 10:43:36
>>147
使い方としては、
Color color = Color.getColor("red");
だけど、ドキュメントを見るとシステムプロパティがどうとか書いてあっ
てよくわからんね。
154デフォルトの名無しさん:2008/05/16(金) 10:49:05
>>152
自前でやるんなら、自分でCSV書き出すプログラム書くだけだよ。
155デフォルトの名無しさん:2008/05/16(金) 11:40:26
>>152
for(data[] row : array){
for(data cell :row){
data.toString()と","をファイル出力
}}
156デフォルトの名無しさん:2008/05/16(金) 12:41:17
>153
それはダメ。
その実体は new Color(int, int, int, int) の引数を結合した数値の文字列表現。
> 指定されたプロパティが見つからない場合、
> ***または整数値として解析できなかった場合***、null が返されます。

>145 の言う「名前から色」というのは、どこかで対応表を持つ必要があるから、
公開ライブラリには向かない、と私は思う。
要は、Map<String, Color> か何かで専門クラスを作りましょう、と。
157デフォルトの名無しさん:2008/05/16(金) 12:45:53
>>145
javax.swing.txt.html.StyleSheet#stringToColor(String) とか?
158デフォルトの名無しさん:2008/05/16(金) 12:47:53
>>155
改行してない。
159デフォルトの名無しさん:2008/05/16(金) 18:00:57
アプレット初めて半年の初心者なんですが、
JToggleButton();で押下時のボタン色を変えるシンプルな方法はありますか?

メソッドをネットで検索しても見つかりませんでしたので、
JToggleButton();を継承して、オーバーライドしたクラスを作ったんですが、
ボタンのイベントの"actionPerformed()"が、使用されるアプリのほうが
自分より早く呼ばれてしまう為、旨くいきませんでした・・・
160デフォルトの名無しさん:2008/05/16(金) 18:05:23
こんな感じで作りました。

public class IToggleButton extends JButton implements ActionListener
{
private boolean isSelected = false;

IToggleButton(String str){
super(str);
addActionListener(this);
if (this.isSelected) setBackground(Color.pink);
else setBackground(null);
}

public void actionPerformed ( ActionEvent e ) {
isSelected = isSelected?false:true;
if (isSelected) setBackground(Color.pink);
else setBackground(null);
}

public void setSelected(boolean selected){
this.isSelected = selected;
if (this.isSelected) setBackground(Color.pink);
else setBackground(null);
}

public boolean isSelected() {
    return(this.isSelected);
}
}
161デフォルトの名無しさん:2008/05/16(金) 19:55:47
プログラミング初心者が最初に行き着く
プログラム言語のスレはココですか?
162デフォルトの名無しさん:2008/05/16(金) 20:40:20
いえいえ、アッセンブラ〜やCを長年経験した上での質問です・・・
163デフォルトの名無しさん:2008/05/16(金) 22:35:26
若い女のプロ意識に脱帽編…

若い女の営業スマイル。よく出せるなと思っていました。
コンビニやスーパーでも俺みたいなきもいおっさんによくこうも
にこやかな営業スマイルだせるなと感心しておりました。

こないだ、パチンコ屋に行きました。そこは町の中心部にあり自宅から
4,50分のところです。そこは、衣装もエロチックでミニスカートにスリットなる
切れ目が入っていて、店員さんもなかなかの魅力的な娘が多いです。
それも楽しみにときどきそこの店に行きます。

あまりでないので、自動販売機のところで一服してるとかわいい娘が
コーヒーを配っています。あまりこの店までこれないので、ついミニスカートのスリットから見える
太ももを凝視して興奮してしまいました。かなり長い間エロい目つきで見てたはずです。

相手に気づかれました。さすがに、とってもいやな顔されるだろうとおもっていました。
最初はたしかにちょっといやな顔をしましたが、すぐにあのにこやかな営業スマイルにもどりました。

これはびっくりしました。いくら店員とはいえ、俺みたいなもてないブサ男に
この場面で営業スマイルとは・・・

恐れ入りました。パチンコ屋のあの店員。
164163:2008/05/16(金) 22:36:08
すまん。誤爆った。リロードされたら、プログラム板だった。すまそ。
165デフォルトの名無しさん:2008/05/16(金) 22:39:49
クライアントの変更要求や追加要求に嫌な顔をして見せる奴は、パチ屋の
女性店員よりプロ意識が低いと言いたいわけですね?わかりますw
166デフォルトの名無しさん:2008/05/16(金) 22:54:26
基礎からのJava
http://www.7andy.jp/books/detail?accd=31942656

やさしく学ぶ Sun認定Javaプログラマ
http://www.7andy.jp/books/detail?accd=32020519

この2つでどっちを買うか迷ってるんだけどどっちがオススメ?
もしくは他にオススメある?
一応研修でざっと習って「やさしいJAVA」ってのも貰った
基本をきっちり押さえつつも実践的な練習もできる本が欲しい
他のSUN認定の分厚いのや外人が書いた翻訳された本は見にく過ぎて無理だった
とりあえず逆引きの本は1冊買った
誰か助けて
167デフォルトの名無しさん:2008/05/16(金) 23:12:15
>>166
「実践的な練習」がどのレベルを指してるのか分かんない。
1.実用的なプログラムを、とりあえず動くレベルで書けるようになりたい。
2.動けばいいレベルなら既に書けるから、より良いコーディングを学びたい。

1なら言語本(Javaそのものを説明してる類の本)はやさしいJava1冊で十分。
それよりも実際に何か書いてみる方に注力して、書きながらその都度必要
な情報を検索する、それでもみつからないなら本を探して買うってやり方の
方が経済的だし効率いい。
言語本を何冊も買うのは意味ないし、言語本を2冊読む時間があるなら1
冊だけ読んでもう1冊読む分の時間で実際にコード書く方が効率いい。
あと、1のレベルに達してない人が2を求めるのは非効率。先ずは1から。

もし2ならJavaの鉄則とJavaの格言は良い本だよ。読みやすいしね。
168デフォルトの名無しさん:2008/05/16(金) 23:27:34
>>167
こんな時間にどうもありがとう!
明日その2冊を立ち読みしてみる
169デフォルトの名無しさん:2008/05/17(土) 00:21:32
初歩的な質問ですみません
javaプログラミングをするのに優れたフリーのテキストエディターを教えて下さい。
できれば文字の色を変えてくれて、Tabで列を揃えてくれるやつがいいです。
OSはWindows XPです。
よろしくお願いします。
170デフォルトの名無しさん:2008/05/17(土) 00:36:59
java.util.Collections#synchronizedList() の使い道(使い方)がわかりません。

java.util.List は同期化されませんが、以下のようにすれば、list はスレッドセーフになって帰ってくるのですよね。

List unsyncList = new ArrayList();
List list = Collections.synchronizedList(unsyncList);

○質問1:
マルチスレッド環境において、
Collections#synchronizedList() が返した list に対しては、
synchronized ブロックでくくらずに add() や get() しても、スレッドセーフが保たれるという理解でよいですか?

○質問2:
javadoc の Collections#synchronizedList() のところに、
以下のように書いてあるのが気になります。

>返されたリストの繰り返し処理を行う場合、ユーザは、次に示すように手動で同期をとる必要があります。
>
>List list = Collections.synchronizedList(new ArrayList());
>  ...
>synchronized(list) {
>  Iterator i = list.iterator(); // Must be in synchronized block
>  while (i.hasNext())
>    foo(i.next());
>}
>これを行わない場合、動作は保証されません。

これは、list の add() や get() は質問1:で同期化されるようになったが、
list.iterator() が返すイテレータへのアクセスは同期化されていないので、
イテレータでグルグルまわすときは、synchronized 文で自分で同期化してね、という理解でよいでしょうか?
171デフォルトの名無しさん:2008/05/17(土) 00:42:19
>>169
いくつもあるし相性があるって人もいるので、
ぐぐって出てきたのを使ってみれば?

あるいはEclipse、NetBeans等の統合開発環境とか
文法ミスを指摘してくれたり、デバッグ用の機能がそろってたりと何かと便利
大規模な開発にも耐えうるし、ひとつ持っておくのをお勧めする
172デフォルトの名無しさん:2008/05/17(土) 00:48:44
>>171
なるほど、ありがとうございます。
早速ぐぐってみます。
173デフォルトの名無しさん:2008/05/17(土) 01:17:27
>>168
Effective Javaがいいよ!
174デフォルトの名無しさん:2008/05/17(土) 01:31:30
>>170
sync-List は、単にsynchronizedメソッドでラップされたインスタンスを提供してるだけ。
必要とされる同期化の手続きが、著しく改善されるわけではない。

iterator で返されるインスタンスは、ラップされたものとは違うので、
生成前に必要な手続きを行う必要がある。
175デフォルトの名無しさん:2008/05/17(土) 01:42:45
>>170
>質問1
はい。

ただし、例えば以下のようなことをしたい場合は、containsやaddがそれぞれ単体で同期されてても
間に割り込まれる可能性があるので、全体をsynchronizedで囲まないと望む結果にはならない。

if ( list.contains(x) == false ) list.add(x);

>質問2
はい。

どのみち、iterator、hasNext、nextをそれぞれ単体で同期したところで、
間にaddが割り込まれたらConcurrentModificationExceptionが起きるから、使い物にならないと思う。

ところで、CopyOnWriteArrayListという便利なものもあるよ。
状況によってはおすすめ。
176デフォルトの名無しさん:2008/05/17(土) 02:24:22
>>145
Color c = (Color)Color.class.getField(colorname).get(null);

要try-catch
177デフォルトの名無しさん:2008/05/17(土) 07:49:46
JSPの質問なのですが、ここでしてもいいものでしょうか?
スレ違いなら誘導をお願いします。

DBから読み込んだ内容をテーブルとして表示し、レコードごとにボタンを置いて押すとそのレコードの詳細を表示するものを作っています。
レコードをテーブル表示するのはwhile(ResultSet.next())で<tr>〜</tr>を繰り返して実現できそうなのですが、詳細を表示するボタンに迷っています。

というのも渡すパラメータが10個あり、しかもそのうち9つがレコードの内容に依存しない共通の項目です。
ボタン一つ一つにformを作ってhiddenで10個のパラメータを付加してwhileで回すのも考えたのですが、例えば20個のレコードに対して200のhiddenが生成されるのはいかがなものかと他の手段を探しています。
buttonを押したときにonclickで遷移することも考えましたが、buttonに直接パラメータを付加できる属性はないものでしょうか?
178デフォルトの名無しさん:2008/05/17(土) 08:27:13
HTML(リンク)からJAVAサーブレットに情報を与えるにはどうすればいいのでしょうか。
リンク"A href=恐らくdoPostの値></A"で
データをJAVAサーブレットに送信したいのですが方法がわかりません。
リンクにdoPostの情報を与えるのもわかりませんがリンクからの情報をサーブレットに値を与えデータを返す方法もわかりません。

本にも載ってないのでどうすればいいかわかりません、教えて君になってしまいますがよろしくお願いします。
179178:2008/05/17(土) 08:52:14
すみませんdoPostのところはdoGetです。
180デフォルトの名無しさん:2008/05/17(土) 09:55:43
質問です。
現場のソースで、
List list = new ArrayList();と記述し、ArrayListのメソッドを
使っているソースを見かけたのですが、
ArrayList list = new ArrayList()とのメリット上での差異が分りません。
良い点があるから、List list = new ArrayList();と記述するのでしょうが、
その良い点が分りません。よろしくお願いします。
一応、sjc-p1.4の資格は持っていて、SJCPに合格するだけのインターフェースの知識は
あります。
181デフォルトの名無しさん:2008/05/17(土) 10:01:33
どっちかというとHTMLの話になるわな。
そもそも、一覧から詳細にいくのに10個もパラメータいらんだろ?
なんかおかしな設計ではないのか?

POSTで送信する(Formを使用する)場合、
>9つがレコードの内容に依存しない共通の項目
レコード(繰り返し処理)の外側に配置すればいい
各列のハイパーリンクをクリックしたならば、JavaScriptで各行のキーをhidden項目に設定。
その後、隠しボタンにした「詳細」ボタンをJavaScriptでクリック
ってのが1つの方法。
詳細がボタンであっても同様。

GETでいいならば、URLのパラメータに10個のパラメータを付ければいい。

POST/GETとFORMあたりがよく解っていないならば、まずはHTTPの勉強を汁。
182デフォルトの名無しさん:2008/05/17(土) 10:07:06
>>180
ぶっちゃけて言えば、半端な知識のマが書いた中途半端なコードなだけ。
意図としてはListで定義されているメソッドしかlist変数では使えないって効果しかない。
これがメリットとなるか?というならば、ほとんどの場合は否。

これがメリットとなるケースは、一般的にいって定義されたクラス外からlistの参照を持つ場合。
つまり、あるクラスのフィールドとして、
private final ArrayList list = new ArrayList();
と書いてあっても、
public List getList() {
  return list;
}
とアクセサを定義しておけば、
private final List list = new ArrayList();
とする必要は(ほとんど)ない。

クラス内でArrayListをLinkedListに変更したり、配列に変更しても、List getList()さえ仕様通りの動きをすればいいわけだ。
ローカル変数でやるならばもっと意味はない。
183デフォルトの名無しさん:2008/05/17(土) 10:12:13
あと、当然な話だけど、List list = new ArrayList();と書くよりもArrayList list = new ArrayList()と書くほうが、実装上の選択(メソッド)は増える。
極端な話、LinkedListなんて専用メソッドを活用しなきゃいらない子。
184デフォルトの名無しさん:2008/05/17(土) 10:25:11
質問です。
swingでゲームを作ろうとして勉強しているものです

ゲーム中(ループ中)にJPanelを実装したクラスのコンストラクタでボタンを配置
別スレッドでループ処理する。このときアクティブレンダリングして描画命令
してるのですが、なぜかボタン隠れた状態で更新されてしまいます。
下にコードを書きますので、どなたかご教授ください
185デフォルトの名無しさん:2008/05/17(土) 10:26:43
>>180
「選択肢があるなら、抽象データ型を使え」という指針がある
Listとおけば実装の詳細がより隠蔽される
例えば実装を交換したいという状況になっても、new ArrayList();の部分だけを取り替えてやればいい

・・・・一応、理論上はそういうことになってるようなのだが、
listのスコープが狭い場合はデメリットにしかならんような?使えるメソッド減るし
186デフォルトの名無しさん:2008/05/17(土) 10:26:48
//必要パッケージをインポート
import java.awt.*;
import javax.swing.*;
/*****************************************
* パネルクラス(中間コンテナ)
*
*****************************************/
class MainPanel extends JPanel implements Runnable{
//パネルサイズ
public static final int WIDTH = 500;
public static final int HEIGHT = 500;
private Thread thread;
//コンストラクタ
public MainPanel(){
//サイズの設定
setPreferredSize(new Dimension(WIDTH,HEIGHT));
thread = new Thread(this);
thread.start();
JButton btn = new JButton("OK");
add(btn);
}

187デフォルトの名無しさん:2008/05/17(土) 10:28:14
//ゲームループ

public void run(){

while(true){

SwingUtilities.invokeLater(new Runnable() {
public void run() {
gameRender();
paintScreen();
}
});

try{
Thread.sleep(200);
}catch(InterruptedException e){
e.printStackTrace();
}

}


}

188デフォルトの名無しさん:2008/05/17(土) 10:29:03
/*** ダブルバッファリング ***/

// ダブルバッファリング用
private Graphics dbg;
private Image dbImage = null;

//バッファにレンタリング
public void gameRender(){

//初回時の呼び出しならばダブルバッファリング用のオブジェクト作成
if(dbImage==null){
//バッファイメージの作成(領域)
dbImage = createImage(WIDTH,HEIGHT);
if(dbImage==null){
System.out.println("no dbimage obj!");
return;
}else{
//バッファイメージに図や画像を書き込むために必要なGraphicsオブジェクトも作っておく
dbg = dbImage.getGraphics();
}

}

//バッファをクリアする
dbg.setColor(Color.WHITE);
dbg.fillRect(0, 0, WIDTH, HEIGHT);

}
189デフォルトの名無しさん:2008/05/17(土) 10:29:39
//バッファの内容を画面に転写
public void paintScreen(){

try{

Graphics g = getGraphics();
if(g!=null && dbImage!=null){
//バッファイメージを画面に描画
g.drawImage(dbImage,0,0,null);

}

//システムのtoolkitオブジェクトを返し、画面を強制的に更新させる
Toolkit.getDefaultToolkit().sync();

if(g!=null){
//グラフィックオブジェクトの破棄
g.dispose();
}

}catch(Exception e){
e.printStackTrace();
}


}


}
190デフォルトの名無しさん:2008/05/17(土) 10:33:02
public class MPN extends JFrame{
//コンストラクタ
public MPN(){
//タイトル
setTitle("ウィンドウ");
setResizable(false);
//ContentPaneにパネルを貼り付ける
MainPanel panel = new MainPanel();
Container contentpane = getContentPane();
contentpane.add(panel);
//フレームサイズをパネルに合わせて設定
pack();
}
private static void createFrame(){
MPN game = new MPN();
game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.setLocationRelativeTo(null);
game.setVisible(true);
}
public static void main(String[] args) {

//イベントディスパッチスレッドにフレームを作成させる
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createFrame();
}
});
}
}
191デフォルトの名無しさん:2008/05/17(土) 10:35:21
上記ソースを投稿したものです。
長くなりすみません。
どうもダブルバッファリングするとボタンがうまく配置しません。

paintComponentメソッドを使った描画処理ではうまくいきました。
192デフォルトの名無しさん:2008/05/17(土) 10:51:46
>>180
trimToSize() も clone() も使う必要ない場合だと、5文字削れてラッキーとか。

メソッド境界以外では抽象型に拘る必要がないってのもわかるけど、
ArrayList と List にも拘るほど違いないから、ぶっちゃけどうでもいい。
193デフォルトの名無しさん:2008/05/17(土) 11:23:53
自分でボタンを描画したいの?
それとも親(JPanel)にボタンを描画させたいの?
194デフォルトの名無しさん:2008/05/17(土) 11:54:22
>>180
俺は、後でプロファイルを取ってListの実装を最適化する予定の時、よくそう書いておく
195デフォルトの名無しさん:2008/05/17(土) 12:03:04
>>193

JPanelに描画させたいっす。
コンストラクタでやってるように

なのになぜか裏にいってしまうんだああああ!なぜだあああ!
196デフォルトの名無しさん:2008/05/17(土) 12:31:26
dbImageのgraphicsを取得してJButtonのpaintに渡してdbImageにボタンを書き込む
dbImageを描画した後にrepaintして親を再描画させる
適当に考えてみたので見当違いだったらごめん
197186:2008/05/17(土) 12:44:26
パネルにボタンを配置したあと
パネル上に描画処理をほどこすと、かぶるものなのでしょうか

ダブルバッファ処理をしないでpaintComponentを使った描画はかさならず描画されました
ダブルバッファ処理は別スレッド処理なのでイベントディスパッチスレッドで
処理させているのですが、そこらへんがおかしいのでしょうか

うむうむ・・・・
198デフォルトの名無しさん:2008/05/17(土) 12:47:16
ダブルバッファリングって書いてあるけど、バッファ1つだけじゃん……
199186:2008/05/17(土) 13:07:34
>>188

描画する領域と、描画する前のサブ領域でダブルバッファリングでは?
参考サイトにはそうかいてあった
200デフォルトの名無しさん:2008/05/17(土) 14:17:28
>>199
その参考サイトが間違ってるだけじゃね?
例えば、そのプログラムだと gameRender() と paintScreen() を
マルチスレッドで並列動作させたらチラつくでしょ。
チラつかないようにgameRender() が使う描画用の領域と、
paintScreen() が使う、既に描画完了してる表示用の領域と
二つ持つのがダブルバッファリング。
paintScreen() 相当の処理が十分速ければダブルでいいけど、
遅い場合はトリプルバッファリングが必要になったりする。

まぁ、いまどきは Window#createBufferStrategy() 使えば済む話だから
自前でダブルバッファリングする必要はあんましないはず。
201デフォルトの名無しさん:2008/05/17(土) 14:25:11
JtextAreaに対して入力キー制限したいです
つまり、左右方向キーは入力を受け付けて上下方向キーは無視、のような
ただJtextAreaに直接KeyEentリスナーを加えてもダメみたいだたし
何かいい方法があればご教示下さい
202201:2008/05/17(土) 14:26:47
言葉足らずだったので補足します

左右キーでカーソルを左右に移動、上下キーでは何も処理をいない、
というテキストアリアを実現したいと考えています
203デフォルトの名無しさん:2008/05/17(土) 14:34:45
コンポーネントは描画されて表示している部品だから
その上から塗りつぶしたら見えなくなるよ
204デフォルトの名無しさん:2008/05/17(土) 14:41:26
>>201
何が真っ先に呼ばれるんだろう
protected void processKeyEvent(KeyEvent e)かな・・・自信ない
上手くいったら報告プリーズ
205186:2008/05/17(土) 14:49:13
>>203

ありがとうございます。
とすると、上のコードではどうなるのでしょうか
私も考えているのですがいまいち・・知識がたらず・・すみません
206デフォルトの名無しさん:2008/05/17(土) 14:53:08
C:\MixIDE-1.4rc6>java -jar MixIDE.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: mix/ide/MixID
E (Unsupported major.minor version 50.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
207206:2008/05/17(土) 14:57:03
間違って、送信してしまったorz
javaのプログラムをコンパイルしたいのですが・・・

http://mixide.sourceforge.net/
mixideというプログラムです

jar形式で配布されてるので、それをcmdで実行すると
C:\MixIDE-1.4rc6>java -jar MixIDE.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: mix/ide/MixID
E (Unsupported major.minor version 50.0)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)

となってしまいます・・・アドバイスください
208デフォルトの名無しさん:2008/05/17(土) 14:59:46
gameRenderの
dbImage = createImage(WIDTH,HEIGHT);
以降で自身にaddされたコンポーネントを自分で描画する
209デフォルトの名無しさん:2008/05/17(土) 15:07:57
>>201
Keymap 使って、VK_UP や VK_DOWN に何もしない Action を結び付けてみるとか。

TextAction noaction = new TextAction("noaction") { public void actionPerformed(ActionEvent e){} };
textarea.getKeymap().addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), noaction);
210デフォルトの名無しさん:2008/05/17(土) 15:08:49
>>204
本当ありがとう、processKeyEventメソッドを
オーバライドしてやったら上手くいったよ

昨日1日奮闘してダメだったことを30分で解決してくれるとは、、
もっと精進せねば
211201:2008/05/17(土) 15:15:27
>>209
Keymapなんて使ったことなかったので勉強になります
この方法でも上手くいきました。ありがとうございます
212186:2008/05/17(土) 15:41:54
>>208

なるほどなるほど。
画面に描画するときに一緒に描画するんですね

ボタンのようなコンポーネントの描画に関してちょっと知識不足です
ぱねるにaddすればはりつけられることはわかっているのですが

一緒に描画というところがまだわかりません
自分で調べてみますが、よろしかったらご教授お願いします!
213180:2008/05/17(土) 15:50:16
>>182,185
質問に答えていただいてありがとうございます。
214デフォルトの名無しさん:2008/05/17(土) 16:13:01
以下のプログラムで「booleanの結果を戻す必要があります」と
コンパイルエラーがでるんですが、なぜでしょうか??
returnでbooleanを返してるんですが???
tryの外からbooleanを返すとうまくいくのですが、何故なのか理由がよくわかりません。
public boolean DBDelete(int formVal[]) {
try {
Connection con = getConnection();
Statement smt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = smt.executeQuery("SELECT * from kyuuyo WHERE 社員番号="+formVal[1]);
if (rs.next()) {
if (rs.getInt("社員番号")==formVal[1]) {
rs.deleteRow();
return true;
} else {
System.out.println("該当する社員番号がありません");
return false;
}
}
} catch(Exception e) {
e.printStackTrace();
}
}
215デフォルトの名無しさん:2008/05/17(土) 16:21:52
>>214
全てのケースにおいて return するか例外投げるかしないとダメ。

具体的には rs.next() が true にならないケースと、
catch(Exception e) で例外捕捉したケースが漏れてる。
booleanの結果を戻すか、例外投げる必要がある。
216デフォルトの名無しさん:2008/05/17(土) 16:31:00
>>214
SQLインジェクション
217デフォルトの名無しさん:2008/05/17(土) 16:41:21
KeyMapを使うのと、InputMap + ActionMapを使うのはどっちがいいんだろ。
KeyStroke a = KeyStroke.getKeyStroke("ctrl A");
for (InputMap im = t.getInputMap(); im != null; im = im.getParent()) {
im.remove(a);
}
とか。
218214:2008/05/17(土) 16:44:04
>>215
あ、catchにもreturn書かないといけないんですね
なるほど!ありがとうございました!!
219デフォルトの名無しさん:2008/05/17(土) 17:05:30
>>218
それはそれでマズイ
220デフォルトの名無しさん:2008/05/17(土) 17:07:28
>>218
if (rs.next()) {
}
//ここじゃね?
221214:2008/05/17(土) 17:40:53
>>218
マズいんでしょうか???
222デフォルトの名無しさん:2008/05/17(土) 18:00:52
例外の握りつぶしでググレ
223デフォルトの名無しさん:2008/05/17(土) 18:08:45
>>180
List list = new ArrayList();

は、List としての機能が必要だが、インスタンスを生成するには具象クラスが必要なので
とりあえずArrayList を使ったということ。

すなわち、それ以降は単に List の機能が必要なだけという、
プログラムの書き手から読み手への強い意思表示が含まれている。

これを、半端な知識のマと言ってしまうと、書き手は哀れw
224デフォルトの名無しさん:2008/05/17(土) 18:44:13
>>223
無駄に短いスコープで抽象化するのは俺も反対だな
そもそもListに関して言えば、何も考えずにgetListとか作る方が問題となるわけで。
225186:2008/05/17(土) 19:10:01
>>186 のコードのものです

gameRenderの
dbImage = createImage(WIDTH,HEIGHT);
以降で自身にaddされたコンポーネントを自分で描画する

とアドバイスをいただいたのですが、まだ理解できずボタンが隠れてしまします

gameRender内でaddで追加してもだめでした。
どなたかご教授お願いします
226デフォルトの名無しさん:2008/05/17(土) 19:20:40
最初に具象クラスで書いておいて
「お、ここ、List で十分じゃん」と書き換えるのは抽象化って感じだけど、

List でロジック組んでみたけど、その List のインスタンスも生成しなくちゃならない
というような場合は、むしろ具象化って呼ぶのが適当じゃね?
(そもそも、はなっから List でなく ArrayList で考えるような場合がどれだけあるのだろうか)

そのような場合、生成部分は仕方ないけどそれ以外を
わざわざ List から ArrayList へ置き換えてやる必要があるのかどうか。
いくらスコープが狭くても面倒だし
227デフォルトの名無しさん:2008/05/17(土) 19:21:18
eqlipseのページからEMF build 2.2.0が落とせない
どこか落とせるところ無いですか?
228227:2008/05/17(土) 19:36:02
お騒がせしました、できました。
229デフォルトの名無しさん:2008/05/17(土) 19:43:14
button.paint(dbg)
230186:2008/05/17(土) 19:47:52
>>229

できました!
感激です!
スキです!
231デフォルトの名無しさん:2008/05/17(土) 20:01:14
http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/252.java

これをコンパイルしようとすると終盤でFigureTypeが見つけられないとでてしまいます
どこを修正・追加すればコンパイル可能になるでしょうか?
232デフォルトの名無しさん:2008/05/17(土) 20:06:42
>>226
むしろ最初からListではなくArrayListで考えれば充分で、Listとして考える必要もないような気がする。

>生成部分は仕方ないけどそれ以外をわざわざ List から ArrayList へ置き換えてやる
宣言と初期化は普通は同時に行うわけで、書き換える必要もないと思うけど?
233186:2008/05/17(土) 20:13:31
>>229

ボタン表示ができたのですが、ボタンとしての機能がなくなっていました!
コンストラクタでボタンをADDで貼り付けて、別スレッドでpaintで描画した結果、
addで貼り付けたボタンは結局うしろにいって、paintで描画したボタン(ボタンとしての機能なし)
が画面はじにでるだけでした!
こういうものなのでしょうか?
234デフォルトの名無しさん:2008/05/17(土) 20:57:46
そりゃ下のコンポーネントにボタン置いてその上のコンポーネントにボタンのグラフィック描画しただけだから
クリックしたイベントが伝達されてないだけだと思う。
設計が悪い。
235デフォルトの名無しさん:2008/05/17(土) 21:01:08
ボタンが押されたら押された状態を描画すればいい
バッファイメージを自分で作るってのはそういう事だよ。
ゲームなんだよね?
JButton使わずにパネル上のマウス位置とマウスイベントを拾ってボタンは画像にしたらどうだろう。
236デフォルトの名無しさん:2008/05/17(土) 21:05:05
>>232
それは順序が逆だ。使う側が必要とするのは本来はListという概念を実現している何かであって、その実現手段は知ったこっちゃない。
しかし、Listの実体を生成するためには、具体的なモノを明示的に指定する必要があって、諸々の取捨選択の結果としてArrayListを用いることになるわけだ。
だから、ListでなくArrayListを型として用いるということは、利用側が必要としているのは「Listを実現した何か」ではなく「ArrayListという実装」である、という意志の表明になる。
237デフォルトの名無しさん:2008/05/17(土) 21:06:41
>>232
まあ、どうでもいいんだけど

例えば、本来、ローカル変数で十分なところに(ループのイテレータとか)フィールドを割り当ててて、
 「できることが多いからいいじゃないか」
 「クラスの外からは隠蔽されているからいいじゃないか」
 「最初からフィールド変数で考えれば十分じゃないか」
と言われるくらい気持ち悪い(※)

ましてや、これを、
「イテレータにフィールド変数を使わないのは、半端な知識がマが書いた云々」
とか非難され始めたら、ちょっと一言いいたくなる。

(※)それぞれ、以下から脳内変換
 「ArrayList は List よりメソッドが多いからいいじゃないか」
 「外向けのメソッドをつくる場合に、List にすればいいじゃないか」
 「最初から ArrayList で考えれば十分じゃないか」


>>生成部分は仕方ないけどそれ以外をわざわざ List から ArrayList へ置き換えてやる
>宣言と初期化は普通は同時に行うわけで、書き換える必要もないと思うけど?

考えてみれば、仮引数とかに使うとかしなければ、そうそう必要ないねぇ。
でも、まあ、人間の頭の中では List を操作しているつもりなのに、
プログラムの中では操作している変数は ArrayList である
という剥離は気持ち悪い。プログラムは、人間が読むためのドキュメントであるべきなのだから。
238デフォルトの名無しさん:2008/05/17(土) 21:45:36
>>236
その理論でいくならば、すべてのクラスにおいて具体的なモノとインターフェイスは別々に考えなければならないともとれる。
現実ではListとして考える≒ArrayList、諸所の取捨選択なんてほとんどない。

メソッド内とかクラス内で閉じるものに対して、「使う側」を意識するんか?
実体をつくるのも使うのも自分だろ。
そりゃ外部とのインターフェイスとしてはListが望ましいけどね。
239デフォルトの名無しさん:2008/05/17(土) 22:24:21
まあどっちでもいいと思うのは確か
Listでも構わんし、ArrayListでも気持ち悪くもない。
>232も必要がないとしか言ってないわけでどっちでもいい的立場なんじゃね?
240デフォルトの名無しさん:2008/05/17(土) 22:26:57
>>238
> その理論でいくならば、すべてのクラスにおいて具体的なモノとインターフェイスは別々に考えなければならないともとれる。
ある意味yes. 実装レベルでclassとinterfaceに分離するか否かは、モノの性質、作業工数、管理工数などを考慮して決めるけど。
あと、「使う側」って言うのは「List/ArrayListを使用しているコード」のこと。
それから、「表明」する主語は「コードを書いた人」で、「表明」している先は「そのコードを読むモノ(人だけじゃなくコンパイラも含む)」のこと。
つまり、List でなく ArrayList と書いたなら、そのソースコードを書いた人はそれを読むモノに対して、「ここでは (List ではなく) ArrayList である必要があるのだ」と主張しているのに等しい。
241177:2008/05/17(土) 22:46:21
>>181
確かに詳細にいくだけならプライマリキーを渡せばいいのですが、
詳細からまた一覧に戻ってくる際に同じ条件で検索する必要があるので一覧画面が受け取ったパラメータをまるまる渡してやらなければいかんのです…

ユーザインターフェスはformとボタンを使用する事を考えています。
コードとしては

<table>
<% while(ResultSet.next()){ %>
<tr><td>-----テーブル内容-----</td><td><form action="URL" method="POST"><--hiddonいっぱいとsubmit--></form></tr>
<% } %>
というのが思いついてはいるのですが、それだと生成されるレコードごとにhiddonがたくさん書き込まれてしまうなぁと思いまして…bottunタグにパラメータを埋め込めたら便利なんだけどなぁと思っているのですが…
242177:2008/05/17(土) 22:47:30
hiddenのスペル間違えてる…お恥ずかしい…
243デフォルトの名無しさん:2008/05/17(土) 22:54:05
>>241
行ごとにformを作るな、ページに1つでいいだろ

どこまでも検索条件を持ちまわすのか?
検索条件が増えたとき困らないか?

なんでもセッションに値を突っ込むのは奨励されないが、2画面以上遷移して値を保持しなければならない場合、セッションに積んだ方がいい。
244デフォルトの名無しさん:2008/05/17(土) 23:04:57
Webサービスのライブラリって、axis2とJAX-WSのどっちがお勧め?

axis2は今動かして(クライアントだけだけど)とりあえず動いた。
JAX-WSはJDK落とすのがかったるいのでまだ試してないw

ttp://homepage2.nifty.com/igat/igapyon/diary/2008/ig080116.html
の「いろいろ問題」ってーのは具体的にどのあたりなんでしょ?
245デフォルトの名無しさん:2008/05/17(土) 23:09:08
List と ArrayList だとわかりにくいかもしれないけど、
Map と Hashmap では、体感しやすい経験があった。

最初のソース:
マスタ取得部品みたいなクラスがあって、
Hashmap map = new Hashmap();
で定義されていて、この map オブジェクトを外部からさわれるようになっている。
当然、呼び側からは Hashmap 型でアクセスしていた。

後日、Map の一覧をソートされた状態で表示する必要が発生し、Treemap に変えたくなった。
けれども呼び側では、すべて Hashmap にしているため、呼び側を、結局 Map で
取得するよう、すべて書き換えた。

部品側は、Map map = new Treemap();
にしておしまい。

こういうことがあると、呼び出し側ではインターフェースで取得すべきと思うようになった。
List においても、後日データ量が増えた、チューニングの問題で、ArrayList から LinkedList に変えたくなった
ときに、呼び出し側は List にしておけば、部品側だけの修正ですむと思うのだけど。
246デフォルトの名無しさん:2008/05/17(土) 23:09:29
いがぴょんに聞けば良いじゃん。

ま、現状だと資料とか実装例とか豊富なaxis2でいいと思う。
チャレンジャーならばJAX-WS使ってみれば?
247デフォルトの名無しさん:2008/05/17(土) 23:12:59
>245
問題は「当然、呼び側からは HashMap 型でアクセスしていた」ところ
248244:2008/05/17(土) 23:19:44
>>246
おお、もうお返事がw
了解、さしあたりaxis2でもう少し掘り下げてみる。

いや、axis(1)のような、Wikipediaにまで載ってる明らかなダメがあるのかと思ってねw
>JAX-WS
ttp://ja.wikipedia.org/wiki/Apache_Axis
249245:2008/05/17(土) 23:20:49
>>247
その部品は、以下のようなメソッドが外部向けに定義されていた。

public Hashmap getMasterMap() { }

たしかにこのままでも、呼び側は Map map = HogeUtil.getMasterMap();
すればよかったんだけど、Javadoc に返却値の型が Hashmap と書かれていたので、
みんな Hashmap 型で取得していたよ。
250デフォルトの名無しさん:2008/05/17(土) 23:25:23
ちげーよw
× public HashMap getMasterMap() { }
○ public Map getMasterMap() { }
あとHashMapだよ、Hashmapはないわ
251デフォルトの名無しさん:2008/05/17(土) 23:27:28
>>244
xfire ( http://xfire.codehaus.org/ )
あるいは、後継の
CXF ( http://cxf.apache.org/ )

はどうだい?

xfire は使ってたけど、POJO を WebService 化するのがすごく楽だった。
(コード修正なし、xml 書くだけ)

まぁいまどきのデファクトという意味では、Axis2 でしょう。
252デフォルトの名無しさん:2008/05/17(土) 23:37:28
>>243
ページに一つでformにしたいんですが、複数のSubmitを作ったら全部のHiddenを渡してしまうのが…というのが悩みでして。
submitを押したときに特定のパラメータを渡す動作をsubmitの中に書ければいいのですが…

検索条件は検索結果と詳細の間だけで持ちまわす物です。
253デフォルトの名無しさん:2008/05/17(土) 23:42:34
普通は悩まない
254170:2008/05/17(土) 23:49:21
>>174-175
レスどうもありがとうございます。
より詳しく理解できました(とくに >>175 の前半)

いま、マルチスレッドとパフォーマンスについて勉強していて、
(Map のほうが今の仕事に必要なのですが、>>170 は、わかりやすくするために List で質問しました)

Hashtable - Hashmap - ConcurentHashMap
にたどりつきました。

CopyOnWriteArrayList も、同じ java.util.concurrent パッケージですが、
copyOnWriteArrayList の javadoc をみると、ArrayList のスレッドセーフなもの、とあります。

なんで CopyOn・・・なのかわからない。
CopyOnWriteArrayList は、変更時にコピーを作るとあるが、ふつうの ArrayList は、
そうじゃないときにもコピーを作るということ?
また、なぜ「変更時にコピーを作る」がスレッドセーフに寄与するのか?
255デフォルトの名無しさん:2008/05/17(土) 23:51:14
やさしいJavaの本理解したら、会社で通用する?
256デフォルトの名無しさん:2008/05/17(土) 23:51:46
>>252
JavaScript使って問題ないなら、
・必要なパラメータはhiddenで1組分だけ用意する。
・submitボタンは使わない。
・onClickハンドラで、hiddenのパラメータを書き換えてsubmit。
257デフォルトの名無しさん:2008/05/17(土) 23:52:16
やさしいJavaの本理解したら、会社で通用しないことが理解できる
258デフォルトの名無しさん:2008/05/17(土) 23:58:34
>>256
なるほど、
<Button onClick="">をwhileの中に入れて、JavaScriptの関数の中でhiddenを書き換えて渡せばいいということですね。
関数の引数で書き換えるデータは渡せそうだし、あとはhiddenの書き換えをどう実現するかですね。もしくは関数の中でパラメータを渡す処理をしても同じ動作いけそうです。

この路線で調べながらやってみます。ありがとうございました。
259デフォルトの名無しさん:2008/05/18(日) 00:07:00
>>254
普通のArrayListは、サイズがキャパシティよりも増えるときにしかコピーはしない。
同じ配列を操作するので、複数のスレッドから同時にアクセスすると危険。

CopyOnWriteArrayListは、いかなる変更操作を行うときも元の配列のコピーを作ってそっちを操作し、最後に参照先を指し替える。
元の配列は決していじらずに捨て置くので、iteratorは変更操作に影響されず古いものを参照し続けることができるし、getなどの取得操作も影響を受けない。
変更操作同士は衝突することになるが、参照先の指し替えをAtomicReference#compareAndSetで実行し、失敗したら最初から(コピーを作るところから)やり直す、という方法でスレッドセーフを実現している。
260デフォルトの名無しさん:2008/05/18(日) 00:14:05
>>254
てか、その辺のクラスでスレッドセーフを保証するよりも、Mapを持つクラスを作ってそのクラスが同期制御を管理する方が良い。

どんだけ排他制御が利いたMapにしたところで、Mapの参照を公開してしまうと一気に制御が難しくなる。
逆にHashMapでもあるクラスから外に参照を渡さず、HashMapにアクセスする公開メソッドの同期とれば良い。
並行処理の話ならば新APIの件もあるから、Java並行処理プログラミングって本を読むと良いよ。
261デフォルトの名無しさん:2008/05/18(日) 00:48:55
Win98SEでjavaの勉強をしてるんだけど、コマンドプロンプトをもっと簡単に入力できるようにする設定方法を教えて
会社のPCだと「↑」キーで今まで入力したコマンドやファイル名を20個ぐらい出せるのに、家のPCだと会社と同じWin98SEなのにできない
「→」キーを押したら直前の入力だけなぞれるけど不便過ぎて困ってる
262170:2008/05/18(日) 00:51:41
レスどうもありがとうございます。
>>259 なるほど、 CopyOnWriteArrayList の仕組みとメリットが理解できました。
ということは、あるスレッド(A)が CopyOnWriteArrayList#iterator で
iteratorを取得し、それをずーっと保持するとしたら、別スレッド(B)が add() しても、
スレッド(A)が保持する iterator の中身は、スレッド(B)が add() する前の List の内容の
参照を持っているわけですね。なんか DB の分離レベルの話みたいだな。

>>260
Map ですが、実際の現場では Map オブジェクトをそのまま外部にさらすことは無いと思いますが、
(map = null で消されたらお終いだし)
・ラップするクラスを作り、map は private にする
・ラップするクラスには、put と get のメソッドを作る

このとき、map の実装を
・Hashtable にすると、get もロックがかかるので、
・HashMap にしておき、ラッパクラスの put メソッドは、内部で synchronized (myMap) { } ブロックで囲み、
 get メソッドは synchronized をつけなければ、取得時の同時並行性は確保できると思いました。
・でもこの場合、Map の実装を ConcurrentHashMap にして、put メソッドの synchronized を
 はずしても同じなのでは、と考えました。

多分その先は Java並行処理プログラミング を読め、って感じだと思うので、読んでみる事にします。
新APIとは、J2SE5 で導入された、java.util.concurrent.* のことですか?
263261:2008/05/18(日) 01:21:29
doskeyで自己解決できた
下らない質問すんませんでした
264デフォルトの名無しさん:2008/05/18(日) 01:32:46
>>260
>・ラップするクラスには、put と get のメソッドを作る 

putとgetだけを提供する場合、

>if ( list.contains(x) == false ) list.add(x); 

のような問題は相変わらず回避できないことに注意。
まぁ用途次第かもしれないので、わかってればかまわない。

>・HashMap にしておき、ラッパクラスの put メソッドは、内部で synchronized (myMap) { } ブロックで囲み、 
>get メソッドは synchronized をつけなければ、取得時の同時並行性は確保できると思いました。

それはだめ。
変更(put)中のデータを参照(get)すると不正な結果を得たり死んだりする可能性がある。
もっと不可解なことが起きる可能性もあるけど、詳細は件の本でも読んでください。
要するにgetにもsynchronizedは必要。

同期の対象がMap1個で済む状況なら、ConcurrentHashMapは便利。
2個以上のMapを同時に更新しなければならない場合とかには無力。
265デフォルトの名無しさん:2008/05/18(日) 01:39:06
>>262
やっぱり理解不足。
putもgetもsynchronized (myMap) { } にしておく、が正解。
getだからといってつけないと、痛い目にあう(ヒント:Atomic性)

>Map の実装を ConcurrentHashMap にする
正しいといえば正しい。
だけど、並行処理で品質を高めるには1箇所で必要最低限の同期を取るのがポイント。

例えばMapとなにか別の要素もあわせて同期を取りたいとする。
すると、Mapで同期をとってさらにラップクラスで同期を調整して・・・と複雑になる。
そんな場合は同期を取るクラスは1箇所にしたほうが楽。
また、全てのメソッドを同期を取る必要があるか?という点も重要。

とはいえ、そのような要素がなければ簡単に実現できるConcurrentHashMap を使うのは正しい(シンプルこそ正義)。


予断だが、外部にさらしてもmap = null では何の影響もないぞw
map.clear() 等はマズイのでオシマイには変わらないけど。
266デフォルトの名無しさん:2008/05/18(日) 01:40:37
もろに被ったな、読み比べて補完してくれw
267170:2008/05/18(日) 01:51:25
>>264-265
レスどうもありがとうございます。

理解したつもりが理解不足といわれて&レスの内容をみて、自分のレベルの低さを実感しました。

>>264 で、put だけを synchronized にしても、
ラッパクラスで contains() も提供した場合、contains() と put は同期化されないことを理解しました。

あと、get と put の atomic 性というのも理解しました(つもりです)

>>265 さんの、ロック処理はシンプルに、というのも、以前不必要に synchronized をつけまくって
パフォーマンスを落としたことがあるので実感したことがあります。
どこを同期化して、どこは不要化、というのが大切ですね。

今回の複数の Map をスレッドセーフに更新するというのは、DB の複数テーブルを更新する際に
どこからどこまでを transaction にするか、と似ています(マルチスレッドと同期化、とは違うけど)

もっと勉強します。

268デフォルトの名無しさん:2008/05/18(日) 02:30:55
>>267
>以前不必要に synchronized をつけまくってパフォーマンスを落としたことが

Java 6 からVMの改良でsynchronized自体のパフォーマンスが上がってるので、
もしかしたら許容範囲になってるかもしれない (なってないかもしれない)。
不必要なsynchronizedを付けないに越したことはないけれど、
必要なsynchronizedを付け忘れてバグるよりはマシ、と思う。
synchronizedを外す (あるいは付けずに済まそうと企む) ときは、慎重に。
269デフォルトの名無しさん:2008/05/18(日) 06:19:04
get で重要なのは(まあどっちも重要だが)原子性より可視性だろ。
VMの最適化で、まだ変数に入れてない値が既に他のスレッドから見えるとか、
そんな奇妙なことが起こりうる。

同期化によるパフォーマンスの劣化は、スレッド間の競合が起こる場合に著しい。
競合で生じるコンテキストスイッチのオーバヘッドは大きく
その場でオブジェクト100個作ってもお釣りが来る。
synchronized 自身は、それほど重くはない。

「Java並行処理プログラミング」は誤訳が酷いね。訳本はみんなそうなのかもしれないけど。
特に最後の happens-before の説明、なんじゃありゃ?
半順序を定義しているだけなのに、ご丁寧に余計な脳内補完をしてる。
意味の通じないロジックや日本語が書いてあったら、無視するか原本を見た方がいい。
英語ができるなら、原本を読んだ方がいいのは言うにあらず
270デフォルトの名無しさん:2008/05/18(日) 09:43:02
> 英語ができるなら、原本を読んだ方がいいのは言うにあらず

最後の一文が……
271デフォルトの名無しさん:2008/05/18(日) 10:00:20
翻訳が〜ってのは解らないでもないが、英語が読めてもスラスラと読める人間は少ないわけで。
非難するならお前が翻訳しろと。
272デフォルトの名無しさん:2008/05/18(日) 11:57:09
いや、普通の感想だろw
金出して買ったものが酷いもんだったら文句いう権利はある。
273デフォルトの名無しさん:2008/05/18(日) 12:09:23
>>267
もう辿り着いているかもしれないが、
スレッドセーフ性は「スレッドセーフか否か」と簡単に定義できるものじゃない。

Javaの理論と実践: スレッド・セーフの特性について
http://www.ibm.com/developerworks/jp/java/library/j-jtp09263/index.html
(ただいまメンテナンス中)
274デフォルトの名無しさん:2008/05/18(日) 16:05:21
Rubyで書かれたクラスを利用したいのですが、どうしたらよいでしょうか?
275デフォルトの名無しさん:2008/05/18(日) 16:07:57
>>274
っ JRuby
276デフォルトの名無しさん:2008/05/18(日) 16:22:28
JRubyの存在をすっかり忘れてました
とりあえずはなんとかなりそうです
ありがとうございました
277デフォルトの名無しさん:2008/05/18(日) 20:32:59
ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/254.java

このプログラムでどうしても線の描写だけ始点、挙動がおかしくなります
どこを変更すれば他の図形と同様にクリックした箇所を始点、ドラッグして話した場所を終点の線の描写になるでしょうか?
278デフォルトの名無しさん:2008/05/18(日) 20:42:25
>>277
API docs をちゃんと読んでください。特に java.awt.Graphics を。
279170:2008/05/19(月) 02:20:36
>>268-273
レスどうもありがとうございます。
>>273 の URL とか、「Java並行処理プログラミング」を呼んで勉強します。

これまでのいただいた情報を理解するのに精一杯で、しばらくここに質問をする
ことはないと思いますが、ひとまずお礼させていただきます。
280デフォルトの名無しさん:2008/05/19(月) 07:51:52
JAVAを勉強中の者です。
GUIを使ったサンプルコードで、
final JLabel label=new JLabel("");
というようにlabelやTextFieldにfinalとついているものがありました。
このfinalというのはどういう意味合いでくっついているんでしょうか?
フィールドにfinalが付いている場合は「変更できない」ということですよね。
私が見たサンプルコードだとfinalのついたlabelやTextFieldは表示内容を変更したりしているので、
「変更できない」というのとは違う意味でくっついてるのかなと思ったのですが・・・

281デフォルトの名無しさん:2008/05/19(月) 07:55:44
>>280
final ついてたら単に再代入不可能なだけ。
Mutableなオブジェクトなら状態は変更できる。
282デフォルトの名無しさん:2008/05/19(月) 08:59:30
>>280
final の上書き(再代入)はコンパイルエラーになるので、コーディングミスを減らせる。
メソッド引数やローカル変数にも適用でき、上書き禁止を明示することができる。
クラスやメソッドに適用しても、上書き禁止(継承禁止)の意味になる。

メソッド内で生成したクラスからの参照を保証する為に、当該ローカル変数を final にすることも。
283デフォルトの名無しさん:2008/05/19(月) 11:38:06
ぐち。
クラスをfinalにするとユニットテストが書きにくくて困る。
284デフォルトの名無しさん:2008/05/19(月) 12:55:11
そりゃそうだろうな
285デフォルトの名無しさん:2008/05/19(月) 13:11:07
javaで作るゲームの本に、vistaでゲームを作るとき1/60秒に一回書き換える
ループを作ると誤差がでるから1/10秒で書き換えなさいとか書いてあるけど
1/10秒はカクカクして嫌なので、誤差を出ないように1/60秒で書き換えたいのです。
それなので、そのループを教えてください。
286280:2008/05/19(月) 13:11:24
>>281-283
レスありがとうございます。
代入と状態の変更をごっちゃにしてしまっていたということなんですね。
すっきりしました!
どうもありがとうございました。
287デフォルトの名無しさん:2008/05/19(月) 17:09:58
>>285は釣られていい餌?
288デフォルトの名無しさん:2008/05/19(月) 19:04:35
腹が減っていたらどうぞ
289デフォルトの名無しさん:2008/05/20(火) 01:54:09
すみません。質問させてください。
コマンドプロンプト上でjavaファイルをコンパイルしようとしても
pathが通っていないらしく、処理ができません。
今設定しているpathを書かせていただきますので、
どなたかご教授下さい。お願いします。
pathです

C:\WINDOWS\system32;
C:\WINDOWS;
C:WINDOWS\System32\Wbem;
C:Program Files\pcdNavi\bin;
C:\Program Files\Common Files\Roxio Shared\DLLShared\;
C:\Program Files\Softex\OmniPass;
C:\Program Files\Fujitsu\sadata\fsaax;
C:\j2re1.4.2_17\bin

ちなみにローカルディスクCのProgram FilesのJavaの中に
jre1.6.0_05フォルダがあり、そのbinフォルダにもjava.exeが入っているのですが・・・。
これは何か関係あるのでしょうか?
290デフォルトの名無しさん:2008/05/20(火) 02:12:10
JRE=j2re1.4.2_17=jre1.6.0_05=実行
JDK=コンパイル+実行
291デフォルトの名無しさん:2008/05/20(火) 02:39:27
>>289
んむ。>>290の言うようにJDKへのパス通せ。
つかそういうJava以前のことは初心者用の本とかサイトに書いてないか?
292デフォルトの名無しさん:2008/05/20(火) 02:42:25
テンプレに誘導が書いてある
293デフォルトの名無しさん:2008/05/20(火) 12:35:12
すみません、質問お願いします。
今、JAVAの勉強でサーバとクライアントのプログラムを作っていて(クライアントからコマンドを送り、コマンドに応じてサーバから答えを返すプログラム)、
その中でサーバーから送られた文字列をクライアント側で表示する部分がどうしてもうまくいかず、原因がわからず困っています。
下記がおおまかなコードです(はしょりまくってますが)
・サーバ側
ServerSocket ss;
Socket s;
PrintWriter out;
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
out = new PrintWriter(s.getOutputStream(),true);
for(;;){
<ここにコマンドを受け取ってそれに応じた文字列を返すコードが入ります>
(例) out.println("aaaa\nbbbb\ncccc");
}
294デフォルトの名無しさん:2008/05/20(火) 12:35:33
javaアプリのmainの変わりにjavaappletのinitにしても
appleが動きませんでした
どうしたら動くのか教えてください
295デフォルトの名無しさん:2008/05/20(火) 12:35:41

・クライアント側
Socket s;
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
〜〜〜〜〜〜〜〜〜〜〜〜〜
for(;;){
<ここにコマンドを入力してサーバへ送るコードが入ります>
String message;
while((message = in.readLine()) != null){
System.out.println(message);
}
}

クライアント側の、while文がうまくいかないみたいなんです。どうもnullになったら抜けるというのがだめみたいで、
例えば送られてくる文字列を2行にしておいてwhile文の条件を2回繰り返すというようにするときちんと文字列が2行出るのですが、
それを任意の行数にしたくて「 != null 」という条件にすると全部の行を表示した後になぜかクライアントが落ちてしまうのです。
質問がわかりにくかったらごめんなさい、何かわかる方がいましたら教えていただけないでしょうか。


296デフォルトの名無しさん:2008/05/20(火) 12:41:08
>>295
落ちてしまうって何か例外でも出てるの?
それ捕まえてスタックトレース表示してみれば?
297295:2008/05/20(火) 12:51:01
>>296
コマンドプロンプトでやってるんですが、落ちるっていうか全部の行を表示した後に何も表示されなくなるんです。
適当にキーを押しても一切反応せず、でもCtl-Cで終了すると何も表示されなくなったあとに入力したキーを実行しようとした形跡がバーッと表示されるんです。
・・・すみません、わかりにくいですね。こんな感じです。

C:\>java aaa
command : bbb
>>"ccc"
>>"ddd"

ここで本来なら再度command : と出るはずなのですがそれが出ず、ここで適当に「a」とか入力しても何も起こらず、
Ctl-Cを押すと

C:\>a
'a'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。

c:\>

となるんです。






298デフォルトの名無しさん:2008/05/20(火) 12:55:12
>>297
readLineで次のデータが送られてくるのをずっと待ってるだけでは?
サーバ側でSocketをcloseするかshutdownOutputすれば通信終了(EOF)になるのでreadLineがnullを返すはず
299デフォルトの名無しさん:2008/05/20(火) 13:02:33
ちなみに
while ((message = in.readLine()) != null)
でループするということはストリームが閉じられるまで繰り返すとい
うことだから、このwhileを抜けるともうinから読むことはできない。

コマンド-レスポンスを繰り返したいなら、このwhileでメッセージの終
了判定はできないよ。

300デフォルトの名無しさん:2008/05/20(火) 13:13:07
javaアプリのmainの変わりにjavaappletのinitにしても
appleが動きませんでした
どうしたら動くのか教えてください
301デフォルトの名無しさん:2008/05/20(火) 13:16:14
javaアプリのmainの変わりにjavaappletのinitにしても
りんごが動くわけありません
りんごは手で持って動かしてください
302デフォルトの名無しさん:2008/05/20(火) 13:16:53
>>300
具体的に何をどう変更したのか書きなさい。
リンゴが動かないとは何なのか。
303デフォルトの名無しさん:2008/05/20(火) 13:18:58
304デフォルトの名無しさん:2008/05/20(火) 13:19:26
万有引力が働かない異世界だからです
305デフォルトの名無しさん:2008/05/20(火) 13:20:37
javaアプリのmainの変わりにjavaappletのinitにしても
appletが動きませんでした
どうしたら動くのか教えてください
306デフォルトの名無しさん:2008/05/20(火) 13:27:07
>>305
アプリとアプレットは別物なので、mainをinitに変えただけで動くわけはない
アプレットとして動くように作られていないのなら、アプレットとして動くように最初から作り直す必要があるかもしれない
307デフォルトの名無しさん:2008/05/20(火) 13:29:04
>>300
アプレットをアプリケーションとして動作させたいってことなら
initはあくまでも初期化処理のみ
メインの動作はstartで行うようにオーバーライドされていることが多いので
インスタンスの生成→コンテナに追加→initによる初期化→コンテナの可視化→startで開始
の順で行う
308デフォルトの名無しさん:2008/05/20(火) 13:32:50
ああ逆か
mainをinitに名前を変えてアプレットとして動作させようとしているのか
無茶な
309デフォルトの名無しさん:2008/05/20(火) 16:05:00
おまえらそんな餌に食いつくなよ
310デフォルトの名無しさん:2008/05/20(火) 18:24:38
アプリもアプレットも分からん人間には食いつきようもない餌だもんな。
311デフォルトの名無しさん:2008/05/20(火) 19:29:22
#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x77fcd989, pid=1392, tid=2524
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0-b105 mixed mode)
# Problematic frame:
# C [ntdll.dll+0x4d989]
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#

何これ
312デフォルトの名無しさん:2008/05/20(火) 19:31:30
JVMのクラッシュ
313デフォルトの名無しさん:2008/05/20(火) 19:38:45
設計根本的に変えたほうがいいのかしら
314デフォルトの名無しさん:2008/05/20(火) 20:01:41
マンガlovemakeの画像ってどうしたらコピーできますか?
315デフォルトの名無しさん:2008/05/20(火) 20:49:29
Javaのデスクトップアプリでデータをローカルで持ちたいとき、
Windowsアプリで言うリソースみたいなかたちで埋め込むにはどうしたらいいの?
316デフォルトの名無しさん:2008/05/20(火) 20:59:03
>>315
リソースファイルで埋め込めばいいよ
317デフォルトの名無しさん:2008/05/20(火) 22:26:46
>>293
>質問お願いします。
いや、質問してるのは君だから。
「回答お願いします」か「質問させて下さい」だろ。
318デフォルトの名無しさん:2008/05/20(火) 22:58:43
main(String[] args){
try{
HashMap<String , String> hashMap = new HashMap<String , String>();
putData(hashMap);
System.out.println("HashMap(bb) : " + hashMap.get("bb"));
System.out.println("HashMap : " + hashMap);
}
catch(Exception e){
e.printStackTrace();
}
static void putData(Map<String , String>map){
map.put("da" , "Five");
map.put("db" , "Four");
map.put("bb" , "Three");
map.put("bc" , "Two");
map.put("aa" , "One");
}
}
これの実行結果が
HashMap(bb) :Three
HashMap :{db=Four, da=Five, aa=One, bb=Three,bc=Two}
こんな感じになるんですが、これと同じように出力されるプログラムをHashSetで書くことはできますか?
もちろん、HashMapなので出力した際の順序まで一緒には出来ないのはいいんdねすが
319デフォルトの名無しさん:2008/05/20(火) 23:12:25
>318
DataEntry(String, String) というコンストラクタを持つクラスでも作って頑張ってください。
320デフォルトの名無しさん:2008/05/21(水) 02:07:02
HashSet クラスには get だの put だのいうメソッドはないから無理。
321デフォルトの名無しさん:2008/05/21(水) 07:09:50
HP-UXで稼動するWebシステムの保守を担当することになり
Java未経験ながらいきなり画面の追加をやらされることになりました。
(Webサーバ:SunOneでアプリサーバ:WebOTX、DB:Oracleです)

Javaは過去に勉強したこともありJavaDocなど使えば、何とかソースは読めるのですが、
ソースを格納するディレクトリの構成がイマイチよくわかりません。
なぜこのファイルはここのディレクトリに入れるのか?
とか、
このディレクトリに入れなければならないってのはどこで定義づけられているの?
というようなことです。

ソースの読み方のような入門書じゃなくて、
Webサーバのディレクトリ構成などJavaでのサーバ構築についての
書籍やアドバイスがあれば教えていただきたく。
「UNIXでJava使ってサーバ立てるならこれは基本書だろ!」
というようなものがあれば、ぜひ読んでみたいのですが。
322デフォルトの名無しさん:2008/05/21(水) 07:34:32
そんなんプロジェクト毎のルールだろ?
仕様書嫁よ。
323デフォルトの名無しさん:2008/05/21(水) 09:51:11
WEB-INFとかマニフェストファイルのことじゃないの?
いままでの開発をどうやってたのか知らないけど、
最近のIDEとかだと配備までやってくれるよ
324デフォルトの名無しさん:2008/05/21(水) 09:56:55
アプリケーションサーバのマニュアルを読め、で済む話。
325デフォルトの名無しさん:2008/05/21(水) 14:15:58
特定の文字列が、作成可能な『ファイル』を示しているかどうかを判定するにはどうすればいいでしょう?
……いえ、以下のようなコードを書いてみたんですが、「a:\backup\」がtrueになるんですよ。

public boolean check(String fileName){
File tempFile = new File(fileName);
try{
tempFile.createNewFile();
if(tempFile.exists() == false || tempFile.isFile() == false){
return false;
}
tempFile.delete();
return true;
}catch (IOException e){
return false;
}
}

EclipseのデバッガでcreateNewFileまでで止めてみると、tempFileの中身は「a:\backup」として表示されています。
どうやら最後のパス区切りは無視されてるようなふいんき(……素でtypoした(汗))です。
これは「文字列の最後の一文字がパス区切りではないこと」で判定するしかないのかな?
326デフォルトの名無しさん:2008/05/21(水) 15:22:28
>特定の文字列が、作成可能な『ファイル』を示しているかどうか
イミフ。ファイル名の事?
OS依存。
それとも任意のファイル名でファイルが作成できるかって事?
OS依存。
327デフォルトの名無しさん:2008/05/21(水) 16:49:11
>>325
javadoc で createNewFile を確認しましたか?(特に戻り値を)
File は単純ではないクラスですし、扱い方自体を確認した方が良いと思います。
328 :2008/05/21(水) 18:43:41
パソコン買おうかと思ってるんだけど、QuadのCPU買ってマルチスレッドのプログラミングをJavaで組んだら
WindowsXPでもマルチコアに対応したプログラムになってくれるんですか?
329デフォルトの名無しさん:2008/05/21(水) 18:50:29
javaのマルチCPU(コア)対応って具体的にはどこら辺まで対応してるんだろうね。
330325:2008/05/21(水) 20:25:07
>>326
失礼しました。つまり「a:\backup\」と指定されたら「backup\なんて名前のファイルは作れない。\はファイル名には使えないし、ディレクトリ名じゃなくファイル名を指定しろ」というチェックをしたかったのですよ。
>>325のコードにすれば、ファイル名に使える文字だけが含まれているかと「実際に書き込めるか」が一緒にチェックできると思ったのですが。
最後の「\」を無視して「a:\backup」と「a:\backup\」を等価に扱ってしまうのは、Javaの(WindowsのOS依存の部分の)仕様なのでしょうか?

>>327
はい、trueなら作成成功、falseが帰ってきたら既に存在する、ということですよね?
既に存在する場合の処理はもう少し詰める必要があると思いますが(canWriteを使えばいいかな?)、まずはファイル名の問題をお聞きしようと思い、あのようなコードにした次第です。
ステップ実行をさせると(>>325で書いたとおり)createNewFileの後にa:\backupが作られてしまっているのです。
これは(デバッガの表示どおり) new Fileした時点で最後の「\」を無視して「a:\backup」としてFileのインスタンスが作られてしまっている、ということではないのでしょうか?
ちなみに、他の不正な文字(backup*など)を指定すると、意図したとおりにIOExceptionで落ちるようです。
331325:2008/05/21(水) 20:31:51
……失礼。
書き込んだ直後に気が付いたのですが、Fileの仕組みだと、「a:\backup」と「a:\backup\」を等価に扱ってもかまわないのですね。
Fileが扱うのはあくまでパスであり、(まだ存在しない場合)そのパスがディレクトリを示すのかファイルを示すのかは、mkDirするかcreateFileするかによって(後で)分かれる。
よって両者は区別する必要は無いので、「a:\backup」と「a:\backup\」は等価に扱ってよい、という理解でかまわないでしょうか?
332デフォルトの名無しさん:2008/05/21(水) 22:20:02
>>328
ちゃんとスレッドを使えばそうなる
333デフォルトの名無しさん:2008/05/21(水) 22:24:12
Point型に文字を四つ格納したいんだけどどうすればいいの?
334デフォルトの名無しさん:2008/05/21(水) 22:49:35
質問です。
JScrollPane を使って、エクセルのように動的にサイズを変えるようにしたいんですけど
どうしたらいいでしょう?

JScrollPane のスクロールバーが端の状態で左右のボタンを押したら
自動でサイズが拡張する感じです。

JScrollPane つかうと無理なんでしょうか?
335334:2008/05/21(水) 23:10:21
JScrollPane から JScrollBar とってこれるんですね。
でも、JScrollBar のノブが端にあるときにボタンを押しても
AdjustmentEvent は投げないみたいなんで、だめそうですね・・・
336デフォルトの名無しさん:2008/05/21(水) 23:26:21
>>328
なる。
337デフォルトの名無しさん:2008/05/22(木) 01:16:05
すみませんアノテーションについての質問です

クラスとかフィールドとかメソッドにつけたアノテーションは
リフレクション使って取り出すのはわかったのですが
ローカル変数につけたアノテーションの取得方法がわかりません
ご存知の方お教えください、お願いします
338デフォルトの名無しさん:2008/05/22(木) 01:34:19
無理っす
339デフォルトの名無しさん:2008/05/22(木) 01:51:31
javaからMySQLに接続し、任意のテーブルの列数を取得したいのですが
PHPみたいにmysql_num_rows()みたいなメソッドはありますか?
javadocのjava.sql.*の項を参照したのですが見つからなかったので。
340デフォルトの名無しさん:2008/05/22(木) 01:54:40
select countすれば?
341339:2008/05/22(木) 02:01:19
>>340
javaでってことに考え過ぎてそっちの方をすっかり考えてませんでした
試してみます。ありがとうございました。
342 :2008/05/22(木) 04:41:06
>>332 >>336
どうもありがとう。
343デフォルトの名無しさん:2008/05/22(木) 08:41:01

ttp://mainichi.jp/enta/geinou/graph/200805/21/?inb=yt
ネット証券会社が主催するFX(外国為替証拠金)取引コンテストの発表会が21日、都内で行われた。
コンテストに特別参加するグラビアアイドルの滝沢乃南さん、山本彩乃さん、折原みかさん、山口愛実さん、佐々木梨絵さん
の5人が顔をそろえ、シストレに挑戦する意気込みなどを語った。
同コンテストは、自分で作成したトレードソフトの機能を評価する「シストレソフト部門」と、
FX初心者でも安心の仮想マネーを使った取引を体験できる「トレード部門」で賞金総額2000万円を争う。
シストレ優秀ソフトは、最高2000万円までの範囲内で買い取りの可能性もあるという。登録受付は22日から。
仮想取引は6月2日〜09年4月30日までとなっている。



▼トレード部門
初期資産500万円で、デモ取引のトレード収益を競っていただきます。
https://www.click-sec.com/corp/guide/demo/
ttp://www.yomiuri.co.jp/komachi/news/mixnews/20080521ok02.htm


▼賞金総額
■社長特別賞(シストレソフト買取価格) 10,000,000円
●シストレソフト部門賞 1位300万円 2位100万円 3位50万円
●トレード部門賞 1位300万円 2位100万円 3位50万円
●前期MVP賞 50万円
●後期MVP賞 50万円
344デフォルトの名無しさん:2008/05/22(木) 14:52:37
おい、おまえら。俺様が、Java入門者向けに環境変数自動設定ツール作ってやったんだけど、
Vectorにうpしようか迷ってる。まんどくさいんだけど、うぷしたらダウソする人いるかな?
345デフォルトの名無しさん:2008/05/22(木) 15:01:25
入門者に自動で設定させんな
346デフォルトの名無しさん:2008/05/22(木) 16:34:46
ていうか作らなくても既にそういうバッチがあった気がする。
347デフォルトの名無しさん:2008/05/22(木) 16:53:15
っていうかNetBeansとか入れれば環境変数なんて
設定しなくていいし
348デフォルトの名無しさん:2008/05/22(木) 20:48:59
JSPでDecimalFormatを使うために下のような指定を行い、
<%@ page import="java.lang.Object.*" %>

下記を書いたのですが、下のようなエラーになってしまいます。

DecimalFormat form = new DecimalFormat();
form.applyPattern("#,###");
int i1 = 20000;
out.println(form.format(i1));


DecimalFormat cannot be resolved to a type

どなたか解決策を教えていただけないでしょうか。
もしかしてインポートするクラスが間違ってたりするのでしょうか?
349デフォルトの名無しさん:2008/05/22(木) 20:51:33
お騒がせしました、、import java.text.*;で行けましたorz
350デフォルトの名無しさん:2008/05/22(木) 22:34:10
java のプロファイラで、「今はこれを使うのがベスト」ってなんだろう。
お勧めがあれば教えてください。

自分がググって見つけたこと
・Eclipse プロファイラプラグインは、開発が止まっていて Eclipse 3.3 に対応していないと聞いた。
・Eclipse TPTP のプロファイラは、重すぎてうんこ というのを ぐぐると見かける。
・NetBeans 6.1 のプロファイラがいいらしい。

IDE 統合型でない場合は、HPjmeter があるが(これはつかったことがある)、
これくらいでしょうか。
351デフォルトの名無しさん:2008/05/23(金) 00:16:20
インターフェースを実装したクラスのメソッドに継承もとのコメントを転写したいのですが
何か簡単な方法はないでしょうか?
352デフォルトの名無しさん:2008/05/23(金) 00:52:36
Ctrl+C V
353デフォルトの名無しさん:2008/05/23(金) 00:54:32
>>352
何個もあるのでツールとか使って1回でさくっとできる方法でお願いします。
354デフォルトの名無しさん:2008/05/23(金) 02:52:05
コピペは最も代表的なアンチパターン
355デフォルトの名無しさん:2008/05/23(金) 03:24:50
>351
何も書かないこと。Eclipse3.3.2 は確認。
どうしてもコメントを書きたいなら、javadocに察知されないように気をつけて。

そういうことではない?
356デフォルトの名無しさん:2008/05/23(金) 11:02:47
前スレで20桁以上の計算をしたいと相談したとき、BigDecimalやBigIntegerを使うようにアドバイスをいただいた者です。
今度はiアプリで20桁以上の整数の計算をしたいのですがどういう風にすればいいでしょうか?
ググってみるとDoJaではBigIntegerが使えないという記述を見つけたので相談しました。
よろしくお願いします。
357デフォルトの名無しさん:2008/05/23(金) 11:52:02
自分で実装するしか
358デフォルトの名無しさん:2008/05/23(金) 13:02:17
>>356
BigIntegerのソースそのまま使うとかw
359デフォルトの名無しさん:2008/05/23(金) 13:05:33
そしてGPLに感染、と。
360デフォルトの名無しさん:2008/05/23(金) 14:58:29
OpenJDKはクラスパス例外付きだろPhoneMEがクラスパス例外なしだ。
361デフォルトの名無しさん:2008/05/23(金) 15:22:37
java.mathパッケージのままだとライセンス上問題でるだろうし
パッケージ改変したり部分的にパクった場合はクラスパス例外適用されんだろ。
362デフォルトの名無しさん:2008/05/23(金) 16:24:29
とっても基本的なことなんだが、
なんで

int i=2;
String k;
String l;
k="a8";
l="a" + i;

とすると、なんで、k!=lになるんでしょう。
363デフォルトの名無しさん:2008/05/23(金) 16:25:32
間違えた。

int i=2;
String k;
String l;
k="a2";
l="a" + i;

こちらです。
よろしくお願いいたします。
364デフォルトの名無しさん:2008/05/23(金) 16:25:59
間違えた。

int i=2;
String k;
String l;
k="a2";
l="a" + i;

こちらです。
よろしくお願いいたします。
365デフォルトの名無しさん:2008/05/23(金) 16:28:14
この違いを勉強しろ
k.equals( l ) → true
k == l →false
366デフォルトの名無しさん:2008/05/23(金) 16:29:31
367デフォルトの名無しさん:2008/05/23(金) 16:29:39
ちなみに、こちらだと、str1==str2になり、ほかは等しくなりません。
2=3なら気持ちが分からんでもないけど・・・

String str1 = "aaa1";
String str2 = "aaa" + 1;
String str3 = "aaa" + String.valueOf(1);

if (str1==str2){System.out.println("str1=str2");}
if (str1==str3){System.out.println("str1=str3");}
if (str3==str2){System.out.println("str3=str2");}
368デフォルトの名無しさん:2008/05/23(金) 16:34:18
初心者の質問なんですけど
2次配列に値を入れたいのですが、

例えば・・・

int a[][] = new int[10][10];
a[][] ={ {1,1,0,1,1,1,1,2,1,1},
{1,3,1,1,1,4,1,1,1,1},
{7,1,1,5,1,1,1,6,1,1},



{ } };

こんな感じで
要素の殆ど同じ数が占めている
データを2次配列に入れたいんです。

どうやったら綺麗に力技じゃなく入力できますか?
369デフォルトの名無しさん:2008/05/23(金) 16:36:00
数字に規則性があるならできるけど、それ以外はしらね
370デフォルトの名無しさん:2008/05/23(金) 16:36:42
>>365-366
ありがとうございます。
勉強したが、やはり、>>367が理解できん。
リテラル値をそのまんま突っ込んでいるから実体に反映されてるんかなぁ。
371デフォルトの名無しさん:2008/05/23(金) 16:37:07
>>367
javac様はコンパイル中に「"aaa" + 1」を見て「両方とも定数だからい
ま1つの文字列にしちゃおう」と考える。「"aaa" + String.valueOf(1)」
は「なんか関数呼び出しがあるからコンパイル時にはどうしようもない
よね」と考える。
372デフォルトの名無しさん:2008/05/23(金) 16:38:34
>>370
定数式とかString#intern()でぐぐれ。
373デフォルトの名無しさん:2008/05/23(金) 16:43:06
>367
定数としてコンパイル可能な String のうち、同値になるものが同じインスタンスとされてるだけ。
>363 の例なら、int i=2 を final int i=2 とすれば、k==l は true となる。
374デフォルトの名無しさん:2008/05/23(金) 16:48:42
>>369
隣接行列を2次配列にしたいんですけど
ノード数が100個以上あって、
エッジが繋がっている部分に重みがあって
エッジが繋がっていない部分を無限大の重みを付けたいんです。

規則性はあんまりないです。

ちなみに駅間の最短距離を求めるプログラムで利用したいんです。
データは隣駅までの距離です。
375デフォルトの名無しさん:2008/05/23(金) 16:50:02
>>368
何をもって綺麗とか力技とかと評価するのか知らないが、
ほとんどを占めている数を配列全体に(Arrays.fillとかで)入れておいて、
配列内の位置とその値のペアで(配列やコレクションで)持っておいたものを代入するとか。
376デフォルトの名無しさん:2008/05/23(金) 16:51:44
>368
java.util.Arrays.fill
>374
規則性が無いものを "計算機" で処理しよう、とな。
そこに妙な説明が書けるんだから、その通り実装すれば良いでしょう。
377デフォルトの名無しさん:2008/05/23(金) 16:55:35
>>374
隣接行列はそういうスパースなグラフでは表現時にメモリの無駄が多いので、
他の表現方法で接続データを持っておいて(隣接リストとか)、
それをプログラム内で隣接行列に展開するようにするとか。
378デフォルトの名無しさん:2008/05/23(金) 17:08:26
メモリの無駄が多い→同じ情報が繰り返し出てきてもたつき感がある
379デフォルトの名無しさん:2008/05/23(金) 17:22:18
>>371-373
ok danke.
少しだけavacの気持ちが分かりました。
380デフォルトの名無しさん:2008/05/24(土) 00:00:25
enum ってなんて読むのですか?
381デフォルトの名無しさん:2008/05/24(土) 00:53:27
>>380
コミュニケーションする相手とのコンセンサスが取れているのならどんな読み方でもどうぞ。
enumはenumeration(またはその派生形)の略なので元の言葉の発音を基にするか、
enumそのものの綴りを連想できるような読み方にするかすればいいと思うよ。
382デフォルトの名無しさん:2008/05/24(土) 01:11:12
ファイルに入力されてるなら
そこから読み取るっていうこともありえるけど・・・
383デフォルトの名無しさん:2008/05/24(土) 01:44:02
AWTのTextFieldで右詰めにするのってできないんでしょうか??
どうやったらいいのか調べてもさっぱわかりません。。。
SwingならsetHorizontalAlignment使えばいいんですが、AWTでのやりかたをどなたかご教授願えませんかm(_ _)m
384デフォルトの名無しさん:2008/05/24(土) 02:05:43
>>381
ありがとね
385デフォルトの名無しさん:2008/05/24(土) 02:23:38
LayoutManagerを無効にしたらTextField(5)とかいう風に列の幅を指定しても
結局そのサイズが0になっちゃうんですが、、、
座標指定できるLayoutManagerとかないですよね??
列の数を指定して(Dimensionではなくcolum数で)、
座標を指定してコンポーネントを配置することってできないんですかね??
386デフォルトの名無しさん:2008/05/24(土) 03:05:52
class C2 extends C1 {...
C1 c1 = new C1();
C2 c2 = (C2)c1;
これは可能ですか?
387デフォルトの名無しさん:2008/05/24(土) 03:12:53
>>i386
C1を型に変換できません
388デフォルトの名無しさん:2008/05/24(土) 05:40:02
>>385
TextFieldを子孫コンポーネントとしたFrameを一旦表示してやると、
そのコンポーネントの推奨サイズが有効な値として取得できるようになるから、
推奨サイズをコンポーネントのサイズとして設定してやり、
その後、Frameを再描画すればいい。
一旦表示して設定後、再描画とかの流れが面倒なら、行儀の悪いものになるが、
コンポーネントを加えた後でFrameをネイティブスクリーンリソースに接続すれば、
Frameを表示することなくコンポーネントの推奨サイズを得ることができるようになる。
389デフォルトの名無しさん:2008/05/24(土) 08:48:29
>>385
なるほど。。。
ありがとうございます!!
390デフォルトの名無しさん:2008/05/24(土) 12:19:54
arraylistで値を追加する際genericsで型を指定していると処理の時間が多少短いような気がするのですが
これは偶然の誤差なのでしょうか?それとも速くなるものなのでしょうか?
391デフォルトの名無しさん:2008/05/24(土) 13:05:33
ならねぇ
392デフォルトの名無しさん:2008/05/24(土) 13:11:20
>>391
ありがとうございます
393デフォルトの名無しさん:2008/05/24(土) 13:32:08
オートボクシング/アンボクシングが働いて若干のパフォーマンス低下ってのならある。
けどもしそこがネックになってるならJITで最適化されるから気にしない。
394デフォルトの名無しさん:2008/05/24(土) 13:32:36
arraylistとlinkedlistの要素の追加に5倍ほどの時間差があるのですがこれはどういう理由なのでしょうか?
先頭の削除はarraylistが遅い
ランダムアクセスはLinkedListが遅いっていうのはわかるんですけど

intを1〜8000000
ArrayList追加 : 2385
LinkedList 追加 : 11095
395デフォルトの名無しさん:2008/05/24(土) 13:36:11
>>394
そりゃあ、最後の要素までたどりつくまで時間がかかるからじゃないの?
396デフォルトの名無しさん:2008/05/24(土) 13:58:00
>>395
末尾に追加すると ってやつね
397デフォルトの名無しさん:2008/05/24(土) 14:11:20
>>394
追加し続けるだけ? それなら、
ArrayList→1回のaddにおける代入回数は1回。配列の末尾に要素を代入する(これで1回)だけ。配列のサイズが足りなくなると、元の1.5倍のサイズの配列を確保して元の要素を全部コピー。(このときだけ遅い)
LinkedList→1回のaddにおける代入回数は5回。要素を入れるEntryをnewして要素を代入(これで1回)し、前後のリンクを繋ぎ直す。(前、後、前の後、後の前で計4回)
あとは、どちらにもサイズのインクリメントとConcurrentModificationException判定用カウンタのインクリメントがあるけど、数字を見ると大きな要因ではなさげ。(最近のCPUだと並列処理されるのかな)
また、ArrayListは配列の拡張にペナルティがあるけど、LinkedListも1要素毎にnewするからか、ある程度相殺されてるっぽい。
398デフォルトの名無しさん:2008/05/24(土) 14:20:00
>>395
すいません説明が足りませんでした
>>396さんの通り末尾に追加です

>>397
リンクを繋ぎなおす処理で問題が出ていたわけですね
詳しい説明ありがとうございました
399デフォルトの名無しさん:2008/05/24(土) 14:25:41
>>395
LinkedListは頭と尻尾を知ってるから、わざわざそんなことしないぞ。
(間にsentinelを挟んだリング状になってる)

つか、適当なこと言う前にソース嫁。
400デフォルトの名無しさん:2008/05/24(土) 16:03:41
プ ロ フ ァ イ リ ン グ
401デフォルトの名無しさん:2008/05/24(土) 18:18:39
keytoolの-validityで指定可能な最大値は何日ですか?
402デフォルトの名無しさん:2008/05/24(土) 18:43:07
javaでチャットを作ってます
swingのテキストエリアにメッセージを表示しているのですが、一行ずつフォントや色を変える方法はあるのでしょうか?
テキストフィールドを複数使ってテキストエリアのようにするぐらいしか思いつきません
403デフォルトの名無しさん:2008/05/24(土) 18:43:27
0か-1で無期限じゃなかった?
404デフォルトの名無しさん:2008/05/24(土) 18:57:47
>402
検索用ワード「JTextComponent スタイル」
405デフォルトの名無しさん:2008/05/24(土) 19:02:46
>>404
ありがとうございます!
406デフォルトの名無しさん:2008/05/24(土) 20:01:03
createImageに関しての質問なのですが
extends ComponentしたクラスでcreateImageをすると
nullが返りgetGraphicsすることができません

ググってみたところextends FrameしたクラスでaddNotifyをオーバーライドすればいいと
ありましたがcreateImageを利用する上で何をextendsするのがセオリーなのでしょうか
どうでもいいようなことかも知れませんがお願いします
407デフォルトの名無しさん:2008/05/24(土) 20:19:14
>>406
まだ表示されてないコンポーネントはcreateImageできない
BufferedImageをnewして使うといい
408デフォルトの名無しさん:2008/05/25(日) 01:35:45
>>406
Toolkit#createImageを使う手もある
409デフォルトの名無しさん:2008/05/25(日) 04:28:52
class GenericsTest<T> {
private T data;
public void copy(T newData) {
data = new T(newData); // error
}
}

このnew T(newData)のところ、
C++のテンプレートなんかだと
コンパイルできるんですが、javaではできませんでした
Tのメンバが全くわからない場合
どのようにmemberwise copy (deep copy)すべきでしょうか?
410デフォルトの名無しさん:2008/05/25(日) 06:26:14
>>409
interface CopyFactory<T> { T copy(T object); }
みたいのを定義&実装してやって、
コンストラクタ使わずにそっちで生成。
411デフォルトの名無しさん:2008/05/25(日) 08:23:19
>>410
了解です
ありがとうございました
412デフォルトの名無しさん:2008/05/25(日) 12:51:59
>>>409
・リフレクションでcloneを呼び出す
・リフレクションでコンストラクタを呼び出す
・serializeしてdeserializeする
413デフォルトの名無しさん:2008/05/25(日) 13:05:50
それが出来上がったら、俺だったら迷わずシングルトンなインスタンスを入れてみる
414FF:2008/05/25(日) 20:20:00
キャラクター画像の背景の透過処理の仕方を教えてください。
415デフォルトの名無しさん:2008/05/25(日) 20:39:42
・もともと背景が透明画像用意する。
・IndexColorModelだったら透明色指定しとく。そうじゃなければ色置換。
416デフォルトの名無しさん:2008/05/25(日) 22:47:28
ArrayListをさらにList化することは出来るのですか?
417デフォルトの名無しさん:2008/05/25(日) 23:09:17
何をしたいのかもう少し詳細に説明してください
418デフォルトの名無しさん:2008/05/25(日) 23:32:17
こうか?
ArrayList<ArrayList<Object>>
419デフォルトの名無しさん:2008/05/26(月) 00:12:45
>>417-418
レスありがとうございます。java宿題スレとマルチになってしまうんですが、とりあえず分からないなりに
解決してみようと思ってるんですが結局思いつかなくて、ここで聞いてるしだいです。
          if (bean.getSql().startsWith("select")) {
// iはループ用のカウンター;実行結果を取得する
for (int i = 1; i <= fileColumns; i++) {
columnNames.add(rsmd.getColumnLabel(i));
}
// フィールドの変数NameListに取得した文字列を入れます。
bean.setNameList(columnNames);
// 獲得したデータの格納
while (rs.next()) {
     ArrayList date = new ArrayList();
     for (int i = 1; i <= 3; i++) {
               date.add(rs.getObject(i));
            }
 bean.setResultList(date);     ←このResultListを、さらにList化したいです
        session.setAttribute("access", bean);
}
          }

SQLを実行してデータベースから結果をとりだして格納するんですが、上のプログラムだけだと
上書きしている状態で、最後に取得した情報しか表示されないのです。
すべて表示させるにはResultListをリスト化して、リスト化したところに個々の情報を入れていけば
全て表示できると言われたのですが、どうやってResultListをリストすればいいのか検討がつかないのですよ。
420デフォルトの名無しさん:2008/05/26(月) 00:53:46
マルチは首つって市ね
421デフォルトの名無しさん:2008/05/26(月) 01:07:29
>>419

commons-collectionsのMultihashMapとかどう?
422デフォルトの名無しさん:2008/05/26(月) 01:56:59
>>420
ごめんなさい。

>>421
HashMapちょっと調べてきます!!
ご助言ありがとうございます。
423デフォルトの名無しさん:2008/05/26(月) 12:39:28
お世話になっております。
今2つの内部クラスを作っています。ゆくゆくは内部クラスを別ファイルにでも切り離したいのですが、まだ先の話です。 現在は2つの内部クラス内のメンバー変数を内部クラス同士で参照させています。

下記のコードだと、eclipseはエラーを吐きませんが、 実行するとjava.lang.NullPointerExceptionエラーになります。
インスタンスもできていると思うし特に問題はなさそうです。

質問なのですが、なにか根本的に間違っていますか?

class M{
Initialize initialize;
Disp disp;

class Initialize{
private void once(){disp.isVal = true; }
}
class Disp{ boolean isVal; }

private Initialize mkInit(){
return initialize; }
private Disp mkDisp(){
return disp; }

public static void main(String[] args){
M m = new Majang();
Initialize initialize = m.mkInit();
Disp disp = m.mkDisp();

initialize.once();
}
}
424デフォルトの名無しさん:2008/05/26(月) 12:55:15
m.initializeに誰も何も代入していない (初期値nullのまま)
425423:2008/05/26(月) 13:08:14
早速の返答ありがとうございます。
ってことは
Initializeのコンストラクタでなにかの値を指定すればOKなのでしょうか。

//getClass()を使ったほうが可読性が高いですね。すみません。
426デフォルトの名無しさん:2008/05/26(月) 13:24:37
>>425
Initializeオブジェクトを生成してinitializeに代入しないといけないだろうということ
要するに
× Initialize initialize;
○ Initialize initialize = new Initialize();
427423:2008/05/26(月) 13:38:20
>>426
なるほど。
ありがとうございました。
428デフォルトの名無しさん:2008/05/26(月) 17:44:13
>>423
ねぇアレやっていい?アレ
ガッ!やっていい?
429デフォルトの名無しさん:2008/05/26(月) 18:39:26
>>423
内部クラスにするのはそれなりの設計理由があってすることで、
分離することが決まっているのなら、最初からきちんと分けて設計すべき。
クラス間の依存度が高いまま単に分けるだけなら分ける意味はあまりないし、
依存度が低くなるように最初の設計でインタフェースをきちんと決めて別々にした方がいい。
あとから制約を増やすのは面倒事になることが多い。
430デフォルトの名無しさん:2008/05/26(月) 19:20:09
失礼します.
クラスからインスタンスを配列で作った際,Ins[0],Ins[1]…
Ins[n]内のメソッドから,Ins[n-1]内の変数をいじりたいのですが,どのようにすればよいでしょうか?
431デフォルトの名無しさん:2008/05/26(月) 19:25:25
JavaのGuiツールの中でボタンを押したらシェルを起動するという処理を行いたくて
Runtime rt=Runtime.getRuntime();
try{
rt.exec("cmd.exe");
}catch(Exception e){
e.printStackTrace();
}

こういうのをactionPerformedメソッドの中に入れた所何故か起動しません。
プログラムをnotepadとかにすると起動するのにこれだと起動しないのは何故なのでしょうか?
またcmdまでのパスも通っているし、念のためフルパスでやったけれどダメでした。
432デフォルトの名無しさん:2008/05/26(月) 19:36:05
俺以外誰も423の5行目に反応すらしない・・・とは思わなかった今ではガッしたことに反省している
433423:2008/05/26(月) 21:04:41
>>429
ただ単純に、一緒にしてしまうとコードが複雑になるので、
表示系と処理系を分離したいと。
できれば、最終的には表示系は処理系から隠蔽してメソッドで呼び出すだけにしたいかな、と。

ただ、いっしょにしている方がコードを書くのには明らかに簡単でとりあえず動くことから目標にしているんですよ。
プログラムはズブの素人で経験はCP/M86上のFBASIC位・・・

>>432
本来のぬるぽですからねぇ。ふふふ
434デフォルトの名無しさん:2008/05/26(月) 21:12:24
文字が半角カタカナであるか判断する方法はありますか?
435デフォルトの名無しさん:2008/05/26(月) 21:46:44
文字コードで調べる。
436デフォルトの名無しさん:2008/05/26(月) 21:53:11
使用メモリーの増加に伴ってスレッド処理速度が落ちてしまうのはどうすれば回避できるでしょうか
437デフォルトの名無しさん:2008/05/26(月) 22:02:01
使用していないメモリを開放する
438デフォルトの名無しさん:2008/05/26(月) 22:05:02
おおっ
少し感動

どうやればいいですか
439デフォルトの名無しさん:2008/05/26(月) 22:07:17
GC弄るの?
440デフォルトの名無しさん:2008/05/26(月) 22:09:00
nio
のBufferとかどうかなと思ったんだけど
441デフォルトの名無しさん:2008/05/26(月) 22:11:32
newをできるだけ減らす(できるだけオブジェクトを使いまわす)とか、
アルゴリズムを工夫するとか
442デフォルトの名無しさん:2008/05/26(月) 22:15:23
それは
既にやってあるなあ
443デフォルトの名無しさん:2008/05/26(月) 22:33:14
使用メモリの増加に伴う速度低下がオブジェクトの生成にあるのなら
使用するオブジェクトをスタートアップの段階で全て準備してしまい
擬似的に静的に使用メモリを準備する
もちろんすべてひもつきのままにして破棄させない
一時的なオブジェクトの破棄に伴うGCの頻発による速度低下なら
メモリを積み込めるだけ積み込んでGCを停止する
444デフォルトの名無しさん:2008/05/26(月) 22:33:27
設計がうんこなんだろ
445デフォルトの名無しさん:2008/05/26(月) 22:33:42
メモリを積み増せば解決
446デフォルトの名無しさん:2008/05/26(月) 22:34:51
てst
447デフォルトの名無しさん:2008/05/26(月) 22:39:41
Oracle の JDBC ドライバ (V9.2.0 ) で Oracle DBMS に接続してるんだが。
クエリ投げて、SQLException 投げてきたときに、クエリのどの部分が違うのか、
あるいは、どの列が制約条件に違反してんのか、どうしたらわかるの?
教えてエロい人。
448デフォルトの名無しさん:2008/05/26(月) 22:46:04
>>443
サンキュ
ただ原因はスレッドがやってる作業そのものがデータの吸出しにあることだと思う
6000個のスレッドをpool使って逐次で動かしてるんだが作業が進むに従って重くなるんで
このデータを一時的に何とかしないといかんかも
449デフォルトの名無しさん:2008/05/26(月) 22:55:34
6000個のスレッドwww
どんなマシンでまともに動くのか教えて欲しいwww

>>447
SQLのエラーコードを取得して、Oracleのマニュアルを参照汁
getErrorCodeとかそんなメソッドある
450デフォルトの名無しさん:2008/05/26(月) 22:57:07
6000個もスレッドを使ってる時点で
何かがおかしいと思わざるを得ないのだが
コンテキストスイッチのコストだけでもバカにならないんじゃ
451デフォルトの名無しさん:2008/05/26(月) 22:57:59
6,000・・・Thredのコストだけでも500Mくらいつかってそうだな、おい。
どうせpoolの管理も自分でやっているんだろ
ExecutorServiceとか使えばサクサク動く予感
452デフォルトの名無しさん:2008/05/26(月) 22:59:12
6000台のPCに分散処理させれば解決(・∀・)イイ!!
453デフォルトの名無しさん:2008/05/26(月) 22:59:29
つかってる
454デフォルトの名無しさん:2008/05/26(月) 22:59:53
6000!
スレッドダンプが終わらん!
455デフォルトの名無しさん:2008/05/26(月) 23:03:20
public class Test {
public static void main(String[] args) {
char[] a = { 'ア', 'ア', 'あ', 'A', 'A' };
for (char c: a) {
System.out.println(Character.UnicodeBlock.of(c));
}
}
}

そりゃ、アもAも HALFWIDTH_AND_FULLWIDTH_FORMS に分類されちゃうよなー。
456デフォルトの名無しさん:2008/05/26(月) 23:03:54
本当に6000もスレッドを使わなければいけないのか、
よく考えるべきである
457デフォルトの名無しさん:2008/05/26(月) 23:07:45
>>453
減らすべし。大抵は多くても数十で十分のはず
他の言語なら大量に作って大量に捨てるような設計でも問題ないこともあるけど
Javaのスレッドは、基本的にそんな使い方はしない
458デフォルトの名無しさん:2008/05/26(月) 23:10:02
タスクが6万あったとしても、スレッドは数十で充分だろうな、たぶん。
459デフォルトの名無しさん:2008/05/26(月) 23:25:23
必要だから作っているんです
それにpool使って逐次動かしていますから問題はありません
データの吸出しを修正してみます
460デフォルトの名無しさん:2008/05/26(月) 23:25:43
>>449
サンクス。 getParameters() とかいうのがあるので、ちょいと試してみる。
461デフォルトの名無しさん:2008/05/26(月) 23:33:00
煽りとかじゃなしにプログラマとして6000個のスレッドがどういう状況で必要になるのか興味がある
462デフォルトの名無しさん:2008/05/26(月) 23:41:28
意味も解らず調べもせずに実装しているという状況なんだろう
463デフォルトの名無しさん:2008/05/27(火) 00:03:19
スレッド6000個ってnewするだけでもコスト高そうだな。
464デフォルトの名無しさん:2008/05/27(火) 00:08:16
ごめんタスクが6000で稼動してるのは10ほど

そっか言い方間違えたな

しかしボロカスだなあw
465デフォルトの名無しさん:2008/05/27(火) 00:11:35
もう少し詳しく言うとHTMLパースをMozillaJavaHTMLParserつかってさせるためのもの
466デフォルトの名無しさん:2008/05/27(火) 00:17:39
全部並列でって話ならば、そりゃ負荷かけすぎ
IOのように比較的長く待たされる処理がほとんどならば、6000タスクを並列にやって硬貨出るけど、HTMLのParseじゃ逐次処理の方が早いかもよ
467デフォルトの名無しさん:2008/05/27(火) 00:19:36
かもしれんねPoolサイズ3に絞ってやったら少し改善した
468デフォルトの名無しさん:2008/05/27(火) 00:21:56
このサイズをメモリーの状況に応じて自動変更できるとさらにいいなあ
469デフォルトの名無しさん:2008/05/27(火) 00:27:49
申し送れましたが
皆さん有難う
470デフォルトの名無しさん:2008/05/27(火) 00:34:12
HTMLのパースに10スレッドも使うか?
パースに1、JS実行に1、画像読み込みに1で3くらいじゃね?
471デフォルトの名無しさん:2008/05/27(火) 00:37:35
ページ数が多くて
472デフォルトの名無しさん:2008/05/27(火) 00:43:51
sageを覚えようね
473デフォルトの名無しさん:2008/05/27(火) 00:46:16
ああ
下げたほうが良いのか
了解
474デフォルトの名無しさん:2008/05/27(火) 00:59:23
javaの実行時間で質問です。
ある処理をSystem.currentTimeMillis()の差で調べたのですが
forで100回ぐらいまわした平均をとったほうが正確になるかと考えました。
すると1回のときとだいぶ違う時間になったのですがなぜかわかりますか?
475デフォルトの名無しさん:2008/05/27(火) 01:02:40
具体的にどう違ったのさ?
476デフォルトの名無しさん:2008/05/27(火) 01:09:10
>>474
JITが潰してくれたんでは
477デフォルトの名無しさん:2008/05/27(火) 01:09:17
何度も実行されるコードは高速化の価値があると判断&最適化されたりする。
478デフォルトの名無しさん:2008/05/27(火) 01:11:54
ほんまかいな
479デフォルトの名無しさん:2008/05/27(火) 02:08:19
最近の香具師はHotSpot知らんのか?
480デフォルトの名無しさん:2008/05/27(火) 12:05:53
>>478だけだろう
481デフォルトの名無しさん:2008/05/27(火) 15:02:12
昨日のスレッドの件有難う
大分よくなった

でも6600ページダウンロードしてパースする作業だけで15分はかかりすぎだよねえ
何とかならんものか
482デフォルトの名無しさん:2008/05/27(火) 15:44:39
ごめん下げだったよね

ついでにいいかな
Matplotlibって視覚化ツールがあるんだけど
これをjavaからコントロールした人居る?
483デフォルトの名無しさん:2008/05/27(火) 16:17:27
>>481
鯖に負荷掛かるから止めろ。
484デフォルトの名無しさん:2008/05/27(火) 16:37:28
そうそう
そのためにスレッド数は絞るようにはしてるんだけどね
ダウンローダーと基本的には接続の部分は一緒だから
嫌われるプログラムではあるよね
485デフォルトの名無しさん:2008/05/27(火) 16:48:54
XMLの読み込みなんですけど、xmlnsを読み込むのってどんなメソッド使ったらいいんですか?
486デフォルトの名無しさん:2008/05/27(火) 16:54:29
xmlns属性は普通報告されない
487デフォルトの名無しさん:2008/05/27(火) 16:56:31
xmlns属性の値を引っ張ってきて別のメソッドで使いたいんですけど・・・
488デフォルトの名無しさん:2008/05/27(火) 17:00:42
じゃあパーサーから出るDocumentのelementひっぱってきてatributeを見れば良いんじゃね
489デフォルトの名無しさん:2008/05/27(火) 17:06:07
若しくはHTMLの文字列をindexof(xmlns)で位置拾って""でくくられてるところをStringで拾うとか
てかあそこ値変わるのか
490デフォルトの名無しさん:2008/05/27(火) 17:12:50
ごめんなさい普通に>>488でできました。
ありがとうございました
491デフォルトの名無しさん:2008/05/27(火) 17:34:52
やっぱ
半値押しで粘りそうな感じもしないではないな
買い方逃げるとしたら次のリバだろうね
492デフォルトの名無しさん:2008/05/27(火) 17:36:06
誤爆ごめん
493デフォルトの名無しさん:2008/05/27(火) 17:37:32
誰かグラフ描写のJGraphというソフトを使ったことある人いませんか?

ダウンロードはできたんですが、そのあとのjarファイル等の操作がよくわかりません。

わかる方いれば、よろしくお願いします。
494デフォルトの名無しさん:2008/05/27(火) 17:46:50
JFreeChartのほうが機能多くていいぞ
495デフォルトの名無しさん:2008/05/27(火) 17:58:01
JFreeChartですか・・・

僕がやりたい(やらなければいけない)のは、「グラフ理論」なんです。
有向グラフとかノード、アークといったやつです。
496デフォルトの名無しさん:2008/05/27(火) 18:01:50
だったらJSCIのほうがいいかも
497デフォルトの名無しさん:2008/05/27(火) 18:44:58
JGraphを使えっていう指示があったんです(泣)
498デフォルトの名無しさん:2008/05/27(火) 18:50:01
そっかあ
わかんないなあ
誰か助けてあげてえ
499デフォルトの名無しさん:2008/05/27(火) 19:00:20
ディスクイメージなどのisoの中身を確認したり、抜き出したりするライブラリはありませんか?
500デフォルトの名無しさん:2008/05/27(火) 19:05:33
>>499
あまり知識がないもんで・・・
よくわからないです。
501デフォルトの名無しさん:2008/05/27(火) 19:08:09
WINRARをDllフックしてJINIでつなぐ
502デフォルトの名無しさん:2008/05/27(火) 19:10:29
>>501
そういうライブラリは存在しないのですかね?
ネイティブにしたくないので仕様書探します。
503デフォルトの名無しさん:2008/05/27(火) 19:12:43
あい
504デフォルトの名無しさん:2008/05/27(火) 19:22:34
webアプリ構築してます。
strats+hibernateです。マスターテーブルの存在チェックを複数件(1〜300)行いたいのですが一件づつselectしチェックを行うのと全件selectしてmapに格納して存在チェックするのではどちらがよいでしょうか
マスタの件数は150件ほどです
505デフォルトの名無しさん:2008/05/27(火) 20:40:05
>>481
あんまり馬鹿やってるとIPではじかれる
506デフォルトの名無しさん:2008/05/27(火) 20:44:53
>>505
そうなんか?
別にクラッキングじゃねえけど
507デフォルトの名無しさん:2008/05/27(火) 21:00:32
>>506
迷惑
508デフォルトの名無しさん:2008/05/27(火) 21:00:38
ご質問させて頂きます。
余りを出す演算子で%があると思うのですが
%以外で余り値を出す演算子とかはあるのでしょうか?

何か方法があれば教えて頂ければと思います。
宜しくお願い致します。
509デフォルトの名無しさん:2008/05/27(火) 21:02:56
まあいいやはじきたきゃはじきやがれ
脆弱サーバー入れて客の責任にしたきゃすればいい
510デフォルトの名無しさん:2008/05/27(火) 21:04:36
>>508
宿題を出された→%禁止→でも、あまりを使うアルゴリズムしか思いつかない→%以外に何かあるはずだ→質問しよう
と、エスパーしてみる

あまりを出す演算子って言われたら%しか思いつかない
511デフォルトの名無しさん:2008/05/27(火) 21:06:20
むかしBasicであったなMIDだっけ覚えてねえや
あれのこと?
512デフォルトの名無しさん:2008/05/27(火) 21:13:07
%っじゃなくても出せるような。

一桁ずつ2で割ってけばいずれ余りが出る。
ナベアツプログラム検索してるときにこの手の考え方が出てたよ。
513デフォルトの名無しさん:2008/05/27(火) 21:17:49
>>510
自分も%しか思い浮かばないので質問させて頂きました。

>>511
うーん、多分違うと思います。
すいません。

>>512
それは奇数なら大丈夫だと思うのですが偶数なら・・・。
と言うか、1桁ずつ2で割るという意味がちょっと自分は理解出来ないのですが
どういうことでしょうか?
%以外の演算子があるのでしょうか?
ちょっとナベアツプログラムでぐぐってきます。
514デフォルトの名無しさん:2008/05/27(火) 21:21:05
ていうか、質問は演算子だったんだろ。演算子なんて数が知れてるだろうに
515デフォルトの名無しさん:2008/05/27(火) 21:21:59
>>513
どうして%じゃだめなんだよ
516デフォルトの名無しさん:2008/05/27(火) 21:24:38
二つの整数値、8 と 3 の 『和』 『差』 『積』 『商』 『余り』 を計算して表示してください。(結果はすべてint型)
尚、『余り』に関しては 余り演算子 % を使用する場合と、しない場合の2通りの方法を考えてみましょう。

又、3ではなく、0で割るとはどうなエラーメッセージなのかも確認してみましょう。

という課題で出された為です。
自分は%以外の演算子を知らない為、質問させて頂きました。
517デフォルトの名無しさん:2008/05/27(火) 21:26:31
小学生なら余りを出すときは割られる数から商と割る数を掛けたものを引くだろうな
518デフォルトの名無しさん:2008/05/27(火) 21:27:09
大学の先生に聞け
519デフォルトの名無しさん:2008/05/27(火) 21:28:13
終了。次の質問どうぞ
520デフォルトの名無しさん:2008/05/27(火) 21:28:57
%以外の演算子は使っていいんだから-と/と*でできるじゃないか
521デフォルトの名無しさん:2008/05/27(火) 21:29:46
てか割り算できない人いるか
522デフォルトの名無しさん:2008/05/27(火) 21:31:01
馬鹿は際限がないということだ
523デフォルトの名無しさん:2008/05/27(火) 21:32:04
Modだったな
一文字違いじゃねえか
524デフォルトの名無しさん:2008/05/27(火) 21:46:19
皆様、お答え頂きありがとうございました。
525デフォルトの名無しさん:2008/05/27(火) 21:54:43
>>506
ファイナンス系は厳しいぜ
IPからプロバイダに垢停止迫ったりは普通
あまりしつこいと自宅に直接電話かかって来るからなw
526デフォルトの名無しさん:2008/05/27(火) 22:04:12
たった3スレッドでか?
ありえねえだろ
527デフォルトの名無しさん:2008/05/27(火) 22:18:45
あと普通は嫌ならロボットはじくスクリプト入れるよな
528デフォルトの名無しさん:2008/05/27(火) 22:32:28
あと普通はレイプされるのが嫌なら錠付き貞操帯を着けて鍵を飲み込んでおくよな
529デフォルトの名無しさん:2008/05/27(火) 22:54:59
プログラムの実行時間計測してるんですが毎回時間がばらついてしまいます。
なぜでしょうか??
530デフォルトの名無しさん:2008/05/27(火) 22:55:59
rdtscとかQueryPerformanceCounter()を使う
531デフォルトの名無しさん:2008/05/28(水) 00:31:03
運悪くGCが働いたか、何かの最適化が起こっている可能性がある
532デフォルトの名無しさん:2008/05/28(水) 01:14:46
>526
HTTP1.1 では、同時接続数上限は 2 ですよ、と。
さらに言えば、連続して接続するなら、単一接続にした方が良いと思います。
過ぎたるは及ばざるがごとし。てか、鯖にも許容量があるので。

HTTPヘッダに、Accept-Encoding: gzip を追加しましょう。
対応していれば、テキストが5分の1ぐらいに圧縮されます。
java.util.zip.GZIPInputStream で解凍できます。
533デフォルトの名無しさん:2008/05/28(水) 01:40:24
>532

どうせapacheを使うのだから、apacheでやらせた方が良くない?
534ume:2008/05/28(水) 04:13:44
>>516 8.0-(int)(8.0/3.0)*3.0 CとJavaでも。
535デフォルトの名無しさん:2008/05/28(水) 07:55:57
>>508
a%b=a-(a*(a/b))

※/演算子の結果が小数を返すものならintで丸める

または自作で余りを求める関数を作れ
っていう意味では?
536デフォルトの名無しさん:2008/05/28(水) 11:42:30
>>533

>>526 (のさらに元ネタの、スレッドを起こすプログラム書いている人)は、
Httpクライアント側じゃないの?
537デフォルトの名無しさん:2008/05/28(水) 11:54:52
そうだよ
クライアント側

2でいいなら2にして見るかな
何ももめるつもりで書いてるものでは無いからな
あと6600はひとつのサーバーに対してじゃないから
その辺は如何なのかなって気もするけどな

良くあるループの理論速度計算みたいに
スレッドの計算できる式ってあるのかな
538デフォルトの名無しさん:2008/05/28(水) 11:57:01


話全く変わるけどマルチっぽくてすまんが
OOOSDKのことで聞きたいんだが

たとえばJPanelにCALCのインスタンス貼るのはUNO使えば良いんだろうか
539デフォルトの名無しさん:2008/05/28(水) 16:44:11
final で宣言した変数にcloneで初期値を代入できんのやね。
そんなもんなのかなぁ。
540デフォルトの名無しさん:2008/05/28(水) 17:20:52
普通はできると思う。どういう初期化の仕方をしてできなかったの?
public class A implements Cloneable {
private final C c;
public A(C c) throws CloneNotSupportedException { this.c = (C)c.clone(); }
public static void main(String[] args) throws CloneNotSupportedException {
C c = new C();
A a = new A(c);
final C b = (C)c.clone();
System.out.println(c + ", " + a.c + ", " + b);
}
}
class C implements Cloneable { public Object clone() throws CloneNotSupportedException { return super.clone(); } }
541デフォルトの名無しさん:2008/05/28(水) 17:23:01
あ、Aの方のimplements Cloneableは余計
542デフォルトの名無しさん:2008/05/28(水) 17:29:56
こういうことをしたいんじゃないかと思う
public class A implements Cloneable {
 private final ArrayList list = new ArrayList();
 public Object clone() throws CloneNotSupportedException {
  A a = (A) super.clone();
  a.list = a.list.clone();    // ← できない
  return a;
 }
}
543デフォルトの名無しさん:2008/05/28(水) 17:39:03
それは普通に再代入だから
再代入を禁止したいからfinalを付けるのに付けた意味がないような
本当のところは実際にやろうとしたことを聞かないと分からないけど
544デフォルトの名無しさん:2008/05/28(水) 17:39:39
アプレットを表示するHTMLを作りたいのですが、
赤いXとアプレットのサイズの灰色の枠のみ表示されて、中身が表示されないんですが、

何が悪いのかわかりません。
545デフォルトの名無しさん:2008/05/28(水) 17:40:50
コードを書けコードを
こっちにだって何が悪いか分からん
546544:2008/05/28(水) 17:43:00
<html>
<head>
<title>11_4</title>
</head>

<body>
<h1>11の4</h1>

<applet code="s11_4.class" width="500" height="500"> </applet>

</body>
</html>
547デフォルトの名無しさん:2008/05/28(水) 18:05:38
>>546
そのHTMLと同じディレクトリにs11_4.classは存在するか?
他に必要なクラスファイルもすべて存在するか?
何か例外が発生していないかコンソールを確認してみたか?
s11_4のソースコードを見せてみれば何かわかるかもしれない
548デフォルトの名無しさん:2008/05/28(水) 18:21:38
.class 削ってみること。
549544:2008/05/28(水) 18:32:38
>>547
上三つはだいじょぶでした
アプレットビューワで見れてもHTMLに引っ張ってきただけじゃだめなんですね、、、、
550548:2008/05/28(水) 18:42:52
焦った、すまん。
551デフォルトの名無しさん:2008/05/28(水) 18:44:12
>549
appletviewer の引数って htmlファイルですよ、と。

他は大文字小文字とか。
552544:2008/05/28(水) 18:50:20
>>551
その意味がわからないのは申し訳ないです。
553デフォルトの名無しさん:2008/05/28(水) 18:58:09
appletviewerとブラウザでセキュリティ面で違いがあったりするから
それが原因かもとも思ったがブラウザでも例外は発生していないらしいからこれは違うか

>>552
どっちの意味が分からないのか分からないが
appletviewer hoge.html
で実行するものじゃないの?
またはコメントにappletタグを記述したソースファイルで
appletviewer Hoge.java
とか
大文字小文字を区別する環境なら合わせてやらないとクラスファイルを発見できない
S11_4.classでサーバに上げたのにs11_4.classを指定しているとか
554544:2008/05/28(水) 19:17:05
>>553
エクリプスで三角形おして動作を見てたから、ぴんと来ないです。

ほかの人のパソコンで見れたら委員だけど、エグゼファイルみたいなのに
することもできずテン
555デフォルトの名無しさん:2008/05/28(水) 19:30:02
jarファイルにエクスポートすればいいんじゃないか
appletタグもjarファイル使って

<applet archive="hoge.jar" code="s11_4.class" width="500" height="500">

みたいな感じで
556548:2008/05/28(水) 20:04:20
>アプレットビューワで見れてもHTMLに引っ張ってきただけじゃだめなんですね
C:\>dir
s11_4.class
hoge.html
2 個のファイルが見つかりました。
C:\>appletviewer hoge.html
と、入力してみる。三角ボタンじゃなくて。
557デフォルトの名無しさん:2008/05/28(水) 20:35:28
Swing とかで
youtubeの外部プレイヤー(小さいやつ)の音量設定のような、
マウスのせたらスライドバーがでてきて調整できる GUI 部品ってないんですかね?

もしくは作れるんでしょうかね?
558デフォルトの名無しさん:2008/05/28(水) 20:57:44
作れないものなどない
559デフォルトの名無しさん:2008/05/28(水) 22:36:26
だが、お前には作れない
560デフォルトの名無しさん:2008/05/28(水) 23:09:39
つまらん煽り
561デフォルトの名無しさん:2008/05/29(木) 00:33:06
タイマーで、描画を3秒ごとに進めようとしてるんですけど、
配列が保管されないんですけど、こういうものなんでしょうか。

java初めてです。
562デフォルトの名無しさん:2008/05/29(木) 00:46:51
ローカル変数にしてるオチの予感・・・
563デフォルトの名無しさん:2008/05/29(木) 00:47:06
配列の宣言位置がおかしいんじゃないでしょうか
564561:2008/05/29(木) 01:06:14
クラス
 …メイン
クラス
 …タイマー
 …グラフィックフレーム
クラス
 …画像描画
    …パブリック イント 多次元配列
    …描画のメソッド
       …配列に、値を入れる。
        ↓
タイマーでロードされると
配列の値が残っていない…。
565デフォルトの名無しさん:2008/05/29(木) 01:19:08
>564
私なら、配列の生成、変更箇所をたどっていく。
大体は、生成に問題がある。
配列でなければ、それを含むクラスの生成と運用に問題がある。
566デフォルトの名無しさん:2008/05/29(木) 01:58:34
import java.awt.*;
class R6_2
{
public static void main( String [] args )
{
R6_2_image window = new R6_2_image()
window.setSize(400,600);
window.setTitle("R6_2");
window.setVisible(true);
}}

import java.awt.*;
class R6_2_image extends ExitFrame
{
public void paint( Graphics g )
{
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image = toolkit.getImage("image.jpg");
g.drawImage(image,50,50,this);
}}

windowsVista、CPad for Java2 SDKの環境でjavaしています。
上のプログラムがR6_2.java,下がR6_2_image.javaです。
R6_2.javaファイルを実行すると、シンボルが解決されていないとエラーが出て、コンパイルできません。
image.jpgとExitFrameは同じディレクトリに入れてます。
567デフォルトの名無しさん:2008/05/29(木) 02:33:01
誰か来て…
568デフォルトの名無しさん:2008/05/29(木) 02:51:58
>566
ExitFrame は同じパッケージで、Frameを継承してるとして、
R6_2_image window = new R6_2_image()セミコロン抜け
569デフォルトの名無しさん:2008/05/29(木) 12:16:45
if(hairetu[j][i]==0 && hairetu[j][i+1]==0 && hairetu[j][i+2]==0){

をすると、なぜか例外になってしまいます。

if(hairetu[j][i]==0 || hairetu[j][i+1]==0 || hairetu[j][i+2]==0){

では起こらないんですが…


何が違うのでしょうか?
570デフォルトの名無しさん:2008/05/29(木) 12:35:43
範囲外参照の例外だろ? &&だったら全て満たさないといけないから条件全て実行する。||だったらどれか満たせばいいから一つでも満たしたら以降は確認しない。
571569:2008/05/29(木) 12:39:55
つまりその三つを満たしている場合がないから例外が出てるってことなんですか
572569:2008/05/29(木) 12:42:02
あ、いや、ちゃいますね。
配列の外をってことですね。
573デフォルトの名無しさん:2008/05/29(木) 12:48:51
>571
例外とは何か。条件を満たさないと起きる物なのか?
570 は、貴方の質問に答えただけで、貴方の疑問には答えていない。
それでも、十分に答えを見つけるだけのヒントは出ている。

というか、表示された例外クラスの事をちゃんと調べましたか?
574569:2008/05/29(木) 13:57:48
助かりました。arigatouございます
575デフォルトの名無しさん:2008/05/29(木) 14:56:46
swingプログラムを作ってるのですが、
Javaで多重起動防止する方法ってどういったものがあるのでしょうか?
WIn32APIのミューテックスみたいなのの他、
実行中のプロセス名を全部取得して自分のプロセス名があれば表示前に終了する
みたいなのを考えたのですが、Javaでのこういうのの実現方法が分かりません。
576デフォルトの名無しさん:2008/05/29(木) 15:00:20
ないからlockfile作るのが一般的じゃない?
577デフォルトの名無しさん:2008/05/29(木) 15:16:51
仮想マシン単位なら、createNewFile - deleteOnExit の連携かな。試してないけど。
何らかの理由で削除されない事に対応するには、
ロックファイル内容の書式に更新時間を記録するようにするか、ね。
578デフォルトの名無しさん:2008/05/29(木) 15:26:31
起動中は特定のポート握りっぱなししておいて、
起動時に特定のポート開けなかったら起動させないとか。
579デフォルトの名無しさん:2008/05/29(木) 16:16:30
よろしくお願いします。
VBで言うところのErr.RaiseしてOn Error Gotoに飛ばすようなことをしたいのですが
意図的にSQLException等の例外を引き起こすメソッドみたいなものはありますか?
というか考え方が間違っていますか?

try{
  //処理1
  if(!hoge()){
    例外に飛ばす処理
  }

  //処理2
  :

}catch{
  //ここに飛ばす
}
580デフォルトの名無しさん:2008/05/29(木) 16:23:03
>>575
起動するときファイルに自プロセスIDを書き込む
多重起動チェックのときそのIDのプロセスが生きていればエラー
JNI使うことになりそうだけど
>>579
throw new SQLException()
ただしgotoを実現するために例外を使うのは良くない
581579:2008/05/29(木) 16:38:40
>>580
物凄い勢いで答えていただきありがとうございました。
例外を使用しない方向で考えてみます。
582デフォルトの名無しさん:2008/05/29(木) 16:46:07
>579
仕様上、例外もしくはエラーである必要があるのならば、
適切な(なるべく既存の、必要であれば自作の)例外オブジェクトを生成し、throw すれば良い。

お勧めはしませんが、ラベル付き break, continue を使えば、疑似gotoは可能。
ttp://www.y-adagio.com/public/standards/tr_javalang/14.doc.htm#6842
583デフォルトの名無しさん:2008/05/29(木) 16:47:28
イベント駆動型アプリケーションて概念もあるけどな
584579:2008/05/29(木) 17:14:54
>>582,583
レスありがとうございます。

よくよく考えてみましたが、やはり仕様上例外である必要があるため
前言撤回で、throwを使わせていただきます。

リンクありがとうございます。今読んでいます。

>イベント駆動型アプリケーション
勉強します!
585デフォルトの名無しさん:2008/05/29(木) 19:46:41
preparedStatementを使ってて、
SQLのログ出力する時に、「?」部分に実際に値が入っている状態で出したいんだけど
どうすればいいですか?別々に出力させるしかないのでしょうか?
586デフォルトの名無しさん:2008/05/29(木) 21:06:52
JSpinner の中身を左詰で表示させたいんですけど
設定がわかりません orz
set〜 を探してもそれっぽいのないのですが。。。
587デフォルトの名無しさん:2008/05/29(木) 22:15:15
>>586
((JSpinner.NumberEditor) spinner.getEditor()).getTextField().setHorizontalAlignment(SwingConstants.LEFT);
588デフォルトの名無しさん:2008/05/29(木) 22:52:25
>586
似たような物をチュートリアルから
ttp://java.sun.com/docs/books/tutorial/uiswing/components/spinner.html#format
* キャスト前に instanceof でオブジェクトの型を確認。
* キャストに基底クラスの JSpinner.DefaultEditor を使用。
589デフォルトの名無しさん:2008/05/29(木) 23:09:58
590デフォルトの名無しさん:2008/05/29(木) 23:11:33
>585

?の部分にバインドするのはDBサーバだから簡単な方法はない気がします。
591デフォルトの名無しさん:2008/05/30(金) 00:24:34
バインドしたやつってDBサーバ側のクエリログとかはどうなん?
自分で確かめてないけど、バインドした結果のが残ってないん?
592デフォルトの名無しさん:2008/05/30(金) 01:28:45
6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催
ttp://system-trading.jp/news/index.php?ID=39
5月22日より登録受付開始、6月2日よりグランプリ開始の予定。


ttp://www.fx-gp.com/
●社長特別賞(シストレソフト買取価格) 10,000,000円
●シストレソフト部門賞 1位300万円 2位100万円 3位50万円
●トレード部門賞 1位300万円 2位100万円 3位50万円
●前期MVP賞 50万円
●後期MVP賞 50万円
https://www.click-sec.com/corp/guide/demo/
593デフォルトの名無しさん:2008/05/30(金) 01:36:19
>>590
String#formatを使えるなら、それほど難しくない気もする。
594590:2008/05/30(金) 01:44:29
>593

それだと、DBで実行しているものと同じとは言えないと思うのですが。。。

簡単かどうかは人によって違うとは思うのですが、JDBCのパラメータをいじるだけでは出来そうもないという意味で、簡単ではないと書きました。
595デフォルトの名無しさん:2008/05/30(金) 02:54:48

JGraphについてです

JGraphはsourceforgeからダウンロードしましたが(初心者なんで)使い方がわかりません。
環境はVistaでj2sdk2.4です。

どなたかJGraph使い方わかる人はいませんか?(ファイルの移動、コンパイル方法など)
596デフォルトの名無しさん:2008/05/30(金) 07:12:39
j2sdk2.4?
597デフォルトの名無しさん:2008/05/30(金) 07:53:32
>>596
すみません、眠たくてぼけてました
j2sdk1.4.2_17です。
598デフォルトの名無しさん:2008/05/30(金) 09:54:13
>>590,593,594
ありがとうございました。
ざっとString#formatも調べてみましたが、
これはこれで使いこなすのに時間がかかりそう・・・
でも参考になりました。ありがとうございました。
599585:2008/05/30(金) 12:05:14
>>591
すいません、抜けていました。
レスありがとうございました。
600ぬこぬこダンス ◆QQgpZ/Znz. :2008/05/30(金) 12:34:58
Hoge [] array = new Hoge[100];
for( int i = 0; i < array.length, ++i )
{
  array[i] = new Hoge();
}

このようにしてメモリを確保した場合

for( int i = 0; i < array.length, ++i )
{
  array[i] = null;
}

array = null;

ってやるのが正しい方法でしょうか?

それとも

array = null; だけでOKなんでしょうか?
601デフォルトの名無しさん:2008/05/30(金) 12:44:00
>>600
何もしなくてOK
nullを代入する必要は通常ない
602デフォルトの名無しさん:2008/05/30(金) 12:44:59
null代入イラネ
603デフォルトの名無しさん:2008/05/30(金) 12:47:43
>>601-602
ありがとうございました
604デフォルトの名無しさん:2008/05/30(金) 13:35:34
exec("explorer")を呼び出す際に引数を付けて任意のディレクトリを開くようにしたいのですが、
他のプログラムのようにexec("explorer C:/")というようにやっても
シェルからexplorer C:/と入力するような動作はしません。
これって何が問題なのでしょうか?
605デフォルトの名無しさん:2008/05/30(金) 13:54:07
exec("explorer C:\\") としないとダメとか?
606デフォルトの名無しさん:2008/05/30(金) 14:07:11
>604
XP です。シェルが何か分かりませんので cmd で確認。同じ動作をします。
単なる入力ミスor確認不足じゃないですか?

もちろん、意図した動作は 605 でしょうけど。
607604:2008/05/30(金) 14:49:27
>>605で出来ました、レスありがとうございます。
Javaの中のパス指定は/でいいけど外部プログラムに渡す時は\じゃないとダメなんですね。。
608デフォルトの名無しさん:2008/05/30(金) 15:22:57
java.sql.SQLNonTransientConnectionException: バッチエレメント # のエラーです0: 通信エラーが検出されました: Software caused connection abort: recv failed。

これって何が原因ですか
対処方法も分かったら教えてください
609デフォルトの名無しさん:2008/05/30(金) 18:02:07
Javaで perlやphpのcryptみたいな物ってあるんでしょうか・・?
DESでsalt2文字で暗号化したいんですが・・

http://www.dynamic.net.au/christos/crypt/UnixCrypt.txt
だとちょっと結果が違うみたいで

javax.cryptoを使うのは方式が違う感じ?

何か良いものがあれば教えてください〜
610デフォルトの名無しさん:2008/05/30(金) 18:07:26
>>609
「みたいな物」 が欲しいだけで 「同じ物」 が必要じゃないなら、別にちょっとくらい結果が違ってもいいんでないの?
611デフォルトの名無しさん:2008/05/30(金) 20:40:46
randomの乱数生成ですが
0から乱数が始まるみたいですが
最低値と最大値を 5〜10 のように指定した乱数の出し方がわかりません。
教えてください。
612デフォルトの名無しさん:2008/05/30(金) 20:51:37
>>611
new Random().nextInt(6) + 5;
613デフォルトの名無しさん:2008/05/30(金) 20:58:29
>>612
わかりました。サンクス
614デフォルトの名無しさん:2008/05/30(金) 21:13:26
インスタンスを生成したときの内部のメモリ状態について質問です。

クラスは、変数とメソッドで構成されていると思うですが、
インスタンス生成の度にメモリ上に確保されるのは、
変数だけなのでしょうか?
それとも、変数とメソッドなのでしょうか?

私は前者だと思っていたのですが、
会社の先輩が後者だと言って譲りません。
恐い先輩なので、私が悪いことにしてその場を治めましたが納得できません。
どちらが正しいのでしょうか?
615デフォルトの名無しさん:2008/05/30(金) 21:22:36
メモリ状態なんてJVMの実装依存でしょ
616デフォルトの名無しさん:2008/05/30(金) 22:15:46
>>614
OpenJDKのソースを斜め読みした限りじゃインスタンス変数だけと思われ。
617デフォルトの名無しさん:2008/05/30(金) 22:42:02
一般的なJVMの実装ならば変数だけだろ
メソッドはどのインスタンスでも同じ振る舞いするわけで、わざわざインスタンス毎に作成するメリットはほとんどないわけだから
メソッド変数という意味ならば変わるけどな
618デフォルトの名無しさん:2008/05/30(金) 22:46:27
>>614
> 恐い先輩なので、私が悪いことにしてその場を治めました
これは正しい。

> が納得できません
これは正しくない。
619614:2008/05/30(金) 22:50:13
>>615-617
レスありがとうございます。
やはり常識的に考えて、生成されるのはインスタンス変数だけですよね。
恐い先輩に頭ごなしに否定されたので、自分が間違っているような気になっていました。
620デフォルトの名無しさん:2008/05/31(土) 00:26:19
GUIでウェブブラウザ作ってるんですが・・・
下のif文の中に入ってくれません。
どなかか考えうる理由など教えていただけると嬉しいです。
必要であれば、ソースすべて載せます。
はじめて質問するので、なにか不束な点があると思いますが、
許してください。。。
JButton ret; //戻るボタン

public void actionPerformed(ActionEvent ae) {
Object obj = ae.getSource();

//この条件の中に入ってくれません
if(obj == ret){
System.out.println("test4");
System.out.println("test4");
System.out.println(address.getText());
list.removeLast();
this.setUrl(list.getLast());
}
else if (obj == address) {
System.out.println("test2");
System.out.println(address.getText());
list.add(address.getText()); //ジャンプするURLを格納
this.setUrl(address.getText());

}}
621デフォルトの名無しさん:2008/05/31(土) 00:37:49
retをローカル変数で定義しているとか?
下のelse if は入るんだよね?
622デフォルトの名無しさん:2008/05/31(土) 00:46:36
printデバッグするにしても、"test4"とか固定文字列を表示するんじゃ
なくて、ifの前にobjとかretを表示してみるとかー。

623デフォルトの名無しさん:2008/05/31(土) 01:13:40
二つの文字列を表示する時
一つめの文字列を表示させたあと
2秒ほど間を開けて
二つめの文字列を表示するにはどうすればいいですか?
624デフォルトの名無しさん:2008/05/31(土) 01:17:34
>>623
簡単に言うと、間に Thread.sleep(2000); を挟む。
625デフォルトの名無しさん:2008/05/31(土) 01:22:30
JNIでCと連携してるんだけど、特定のnativeメソッドを使用した時に
UnsatisfiedLinkErrorが投げられてしまう。

環境変数は通っているし、
ヘッダファイルが最新の状態で問題なくビルドできたのに、
そのメソッドだけ蹴られる。
ためしに問題の部分をコメントアウトして実行したら、問題なく動いた。
だから他のnativeメソッドは、たぶん普通に呼び出せてるんだよね。

DLLの中身をのぞいて見ても、件のメソッドは他のメソッドと同じようにちゃんと存在している。

これはいったいどういうことなんだろう…?
626620:2008/05/31(土) 01:30:52
>>621
ローカル変数では定義してませんね・・・
下のelse if文には入ります

>>622
obj表示してみました。
今もうその文字列のcontainsメソッド使ってごり押しでif文に入りました!


ただなんで前の状態じゃ入れないか疑問に残って仕方がない・・
627デフォルトの名無しさん:2008/05/31(土) 01:40:57
>>624
やってみます、ありがと
628デフォルトの名無しさん:2008/05/31(土) 01:47:32
>>626
ありそうなのは、JButton ret;と、実際に追加されているボタンが異なるケース。
同名のローカル変数が追加されて、メンバのretに値が入っていない。
JButton ret=new JButton();とかやってないか?

629620:2008/05/31(土) 02:42:15
>>628
ぁぁぁ・・・ご名答です・・
コンストラクタでやってしまってました・・・
わざわざありがとうございます。

今ブラウザの戻る、進む、ホームに戻るが作成できました。
あとは履歴とブックマークくらいしたいなー。
他なにか機能ないかなー。

なんか学校の課題とはいえ、がっつり便利なブラウザ作ってみたいなー。
630デフォルトの名無しさん:2008/05/31(土) 02:50:40
>>629
> がっつり便利なブラウザ作ってみたい
ってことは今使っているブラウザに不満な点があるということだから、
その不満を解消する機能をつければいい。
既にあるものを再生産するのは詰まらんだろう。
631デフォルトの名無しさん:2008/05/31(土) 03:08:05
>>629
そういうミスを防ぐために、メンバ変数に特殊な命名規則を導入するス
タイルもある。
m_ret
mRet
f_ret
fRet
ret_
または常にthis.retで使うとか。
632デフォルトの名無しさん:2008/05/31(土) 03:58:37
short と byte[] の相互変換ってどうやるんですか?
private byte[] ShortToByte( short s )
{
byte [] b = { (byte)((s >> 8) & 0xFF), (byte)((s >> 0) & 0xFF) } ;
return b;
}

private int ByteToShort( byte []b )
{
return ((b[0] & 0xff) << 8) | (b[1] & 0xff);
}

こんなのを作ってみましたけど 上手く行きません

short s = -1;
System.out.println( s );
System.out.println( ByteToShort( ShortToByte( s ) ) );

結果
-1
65535
633デフォルトの名無しさん:2008/05/31(土) 04:10:17
>>632
それshort返してねえよ int返してる
634デフォルトの名無しさん:2008/05/31(土) 04:28:20
あ^^;色々変更して試しにint返してみてそのままでした

private short ByteToShort( byte []b )
{
return (short)((b[0] & 0xff) << 8) | (b[1] & 0xff);
}

でも同じ結果です
635デフォルトの名無しさん:2008/05/31(土) 04:33:27
private byte[] convertShortToByte(short s) {
byte[] b = new byte[2];
((ByteBuffer)ByteBuffer.allocate(2).putShort(s).rewind()).get(b);
return b;
}
private short convertByteToShort(byte[] b) {
return convertByteToShort(b, 0);
}
private short convertByteToShort(byte[] b, int offset) {
return ByteBuffer.allocate(2).put(b, offset, 2).getShort(0);
}
636デフォルトの名無しさん:2008/05/31(土) 05:24:53
そんなややこしい方法でしか無理ですか?
637デフォルトの名無しさん:2008/05/31(土) 06:07:55
ここでエスパー参上
short 返してねえよ。int 返してる
638デフォルトの名無しさん:2008/05/31(土) 06:13:47
>>637
>>634です
639294:2008/05/31(土) 12:09:33
Aクラス=(appletをextendsしたクラス)でBクラス=(frameをextendsしたクラス)ではなく
Bクラスを使用しないでAクラスでBしたクラスがする処理をしたらappletとしてうごきました。
ところでappletではファイルの読み書きとかが出来ないらしいけど、
何が出来て何が出来ないかということはどうやって解るんですか
640デフォルトの名無しさん:2008/05/31(土) 12:53:26
>>639
↓に載ってるものは出来ない
http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/security/permissions.html#PermsAndMethods

ただし↓のファイルに書いてあれば許可される
C:\Program Files\Java\jre1.6.0_06\lib\security\java.policy
641デフォルトの名無しさん:2008/05/31(土) 13:13:04
>>640
ありがとうございます。
とてもよく知ってますね。
そういう知識はどこで覚えたんですか?
なんでそんなに詳しいんですか?
どこかで習ったりしたんですか?
642デフォルトの名無しさん:2008/05/31(土) 13:32:07
>>641
公式サイトのドキュメント↓読んでれば見つかる
http://java.sun.com/javase/ja/6/docs/ja/
ここの 「セキュリティ」 と書いてあるリンクを辿っていけばセキュリティについて書かれている
さっきのページは 「セキュリティ」 → 「Java 2 SDK におけるアクセス権」
片っ端から全部読むには量が多すぎるが、必要なときに必要な情報だけ探して来れば十分
643デフォルトの名無しさん:2008/05/31(土) 14:11:40
>>636
static short ByteToShort(byte[] b)
{
  return (short)((b[0] << 8) | b[1]);
}

static byte[] ShortToByte(short s, byte[] b)
{
  b[0] = (byte)((s >> 8) & 0xFF) ;
  b[1] = (byte)(s & 0xFF) ;
  return b;
}

public static void main(String[] args)
{
  short s = -1;
  byte b[] = new byte[2];
  System.out.println( ByteToShort( ShortToByte( s, b )));
}
君のメモリー(思い出は((無い
644デフォルトの名無しさん:2008/05/31(土) 14:51:39
synchronizedブロックだとメソッドから復帰するとモニタも解放になりますが、
メソッドから復帰してもロック・オブジェクトのモニタを持ちつづけるにはどうすればいいのでしょうか?
645デフォルトの名無しさん:2008/05/31(土) 15:06:20
>>644
それ用のスレッドを作ってモニタを持ち続けさせるか、
特にオブジェクトのモニタである必要がないなら java.util.concurrent.locks.ReentrantLock あたりを使う
646デフォルトの名無しさん:2008/05/31(土) 15:08:02
やはり少し手間がかかるんですかありがとうございます。
647デフォルトの名無しさん:2008/05/31(土) 15:15:55
>>645
イテレーションが目的であって、要素が途中で変更されると困るときはどうするんでしょうか。
例えばjava.util.Vectorのsynchronizedは取得時のみでイテレーション中は変更される可能性があるわけで、これとは少し意味が違いますよね。
648デフォルトの名無しさん:2008/05/31(土) 15:22:30
>>647
使う側が必要なだけsynchronizedかける

例:
Vector v = ....;
synchronized (v) {
 Iterator i = v.iterator();
 while (i.hasNext()) {
  ...
 }
}
649デフォルトの名無しさん:2008/05/31(土) 15:28:45
ああ、そうですね。
650デフォルトの名無しさん:2008/05/31(土) 15:30:06
先頭のスーペースはもしかしてnbsp;をタイプしてるんですか?
651デフォルトの名無しさん:2008/05/31(土) 15:32:36
専ブラが変換してくれるので自分でタイプしてはいない
652デフォルトの名無しさん:2008/05/31(土) 15:35:43
>>648
それだと違うインスタンスのロックにならないから、
例えば別のVectorインスタンス(クローンとか)から内部を変更されてしまい、
要求する仕様を満たさないよ。そういうのは見つけにくいバグになるんじゃないの?
653デフォルトの名無しさん:2008/05/31(土) 15:39:59
>>652
違うインスタンスって何
内部って何の内部
要求する仕様とやらをはっきりさせてくれ
654デフォルトの名無しさん:2008/05/31(土) 15:42:13
↑自分が答えられる範囲を超えるとこのように暴走しますw
655デフォルトの名無しさん:2008/05/31(土) 15:43:12
パッケージについて質問します。
デスクトップ上にTestフォルダを作成し
その中にメインの "Test.java" と "DirTestA.java" を置きました。
別階層からTest.javaのオブジェクトを作るため
Test.javaに package Test; と書いてimportして作成できたのですが
そうするとTest.javaで 同じ階層内にいるDirTestA.javaのオブジェクトを作ろうとしたら
DirTestAのシンボルを解決できません。とでます。

試しに DirTestA.javaにも package Test; と書いて
Test.javaで import Test.DirTestA; と書いても
解決しません。
どうすれば、同じ階層内でも参照できますか?
656デフォルトの名無しさん:2008/05/31(土) 15:43:39
なんだ。>>653は親切そうだったけど実はすぐ発狂するキチガイだったのかww
657デフォルトの名無しさん:2008/05/31(土) 15:56:13
>652
良く分からないなら無理に指摘しなくても大丈夫です。
問題が起きてから騒いでください。

>655
コンパイルする場所が間違ってるかも
Testフォルダがあるフォルダでコンパイルしてますか?
(パッケージ名は小文字推奨です。クラス名と区別が付かない等の為)
あとは、変更前のclassファイルが残ってる可能性も。
658653:2008/05/31(土) 15:58:45
別に暴走も発狂もしてないけど・・・
質問に答えるために必要な追加情報を求めてるだけだよ
(言い換えると質問が意味不明)
659デフォルトの名無しさん:2008/05/31(土) 16:04:25
>>655
ひとつ上のディレクトリから
javac Test/Test.java
ってやってみるとどう?
660デフォルトの名無しさん:2008/05/31(土) 16:05:46
Hoge{
 private int n;
 
 Hoge( int i ){
  n = i:
 }
}
Hoge hoge = new Hoge( 10 );:


これに新しい値を入れたい場合

hoge = null;
hoge = new Hoge( 100 );
でないとダメですか?

null代入せず上から直接
hoge = new Hoge( 100 );
した場合はどうなりますか?
661デフォルトの名無しさん:2008/05/31(土) 16:08:20
>>660
直接入れても一緒。
null代入は不要。
662デフォルトの名無しさん:2008/05/31(土) 16:17:35
ですよね、ありがとうございます
663デフォルトの名無しさん:2008/05/31(土) 16:19:26
C++のnewのイメージとごっちゃになりました
たしかC++だと落ちますよね?
664デフォルトの名無しさん:2008/05/31(土) 16:33:30
C++のnewはdeleteしないと落ちはしないけどメモリリークになる
JavaのnewはGCが自動的に解放してくれる
665デフォルトの名無しさん:2008/05/31(土) 16:53:54
>>658
確かに不明部分があるけど、やってれば分かるようなこの程度のことを詳細に書いてもらったとしても、君程度の技術じゃ答えられないでしょうにww
ところで君はその質問にちゃんと答えられる自信はあるんですか?
666デフォルトの名無しさん:2008/05/31(土) 16:55:43
教えてください。
以下のようなソースを書いたのですが、
☆のところで怒られてしまいます。
[アクセス可能な型 Swing_main のエンクロージング・インスタンスがありません。 型 Swing_main のエンク ロージング・インスタンスで割り振りを限定する必要があります (たとえば x.new A() で、x は Swing_main のインスタンス)。]

★は怒られないのに何で☆はだめなのというところが知りたいのですが、

public class Swing_main extends JFrame{
public static void main(String[] args) {

//コンストラクタでFrame作成
new Swing_main("test");
//メソッドでFrame作成
Swing_test();
}
//コンストラクタ
Swing_main(String title){
super(title);
★addWindowListener(new WindowEventHandler()
};
//メソッド
public static void Swing_test(){
JFrame frame = new JFrame("Jframe1") ;
☆frame.addWindowListener(new WindowEventHandler());
}
//WindowListener
class WindowEventHandler implements WindowListener{
public void windowActivated(WindowEvent e) ・・など
}
}
667デフォルトの名無しさん:2008/05/31(土) 17:05:34
>>666
WindowEventHandlerはstatic classじゃないので、外側のクラスSwing_mainのインスタンスが必要
★はコンストラクタ内なのでthisが存在するが、☆はstaticメソッド内なのでインスタンスが存在しないからエラー
668デフォルトの名無しさん:2008/05/31(土) 17:12:54
>>653
>>658
こうやってすぐ叩かれるから無駄口を吐かない方がいいよ。
669デフォルトの名無しさん:2008/05/31(土) 17:19:39
>>667さん
回答ありがとうございます!
WindowEventHandler をstaticにしたところ怒られなくなりました。
ただ、☆にはframeというインスタンスがあるんですが、
これだと駄目という部分が理解できません。
そもそもこういうつくりは駄目だということでしょうか

670デフォルトの名無しさん:2008/05/31(土) 17:25:55
>>669
そのframeはJFrameであって、Swing_mainじゃないし。
もし
Swing_main frame = ..... ;
であるなら、
frame.new WindowEventHandler()
のように書ける。
671デフォルトの名無しさん:2008/05/31(土) 17:26:24
JAVAにはOpenCVのような画像処理を扱うAPIはありますでしょうか。
OpenCVの移植があれば最高なのですが、ぐぐっても出てこないということは無いのですかね。。
672デフォルトの名無しさん:2008/05/31(土) 17:29:21
駆け出しのプログラマなんだけど、休日とか、書類作成メインの日とか、コーディングしない日があるのが怖い
コードを書かないと実力が落ちそう

そこで、将棋でいう「詰め将棋」みたいに、シンプルなプログラミングの問題を掲載したサイトとか本とか無い?
673デフォルトの名無しさん:2008/05/31(土) 17:32:29
674デフォルトの名無しさん:2008/05/31(土) 17:33:58
>>652
そのVectorに関しての質問です。
cloneで生成したインスタンスから、clone元のインスタンスを操作する方法を教えてください。
よろしくお願いします。
675デフォルトの名無しさん:2008/05/31(土) 17:39:38
Vectorの質問というよりもJavaコレクションフレームワークの全体像から勉強しなおした方がいいんじゃないの?
676デフォルトの名無しさん:2008/05/31(土) 17:41:34
>>674
?
677デフォルトの名無しさん:2008/05/31(土) 19:31:14
http://wisdom.sakura.ne.jp/system/java/swing/swing2.html
ここを見て勉強していたのですが、
awtでは描画処理をpaint()をオーバーライドして行っていたのに、
swingではpaint()のオーバーライドは推奨されていない、と書かれています。
何故使ってはマズいのかということと、
swingでGraphicsクラスのオブジェクトを得て描画処理するのはどういう風にやるのが普通なのか教えて下さい。
678デフォルトの名無しさん:2008/05/31(土) 19:41:32
>>677
paintは、そのコンポーネント自身だけでなく、ボーダーや子コンポーネントも描かないといけないのだけれど、
オーバーライドするとそれが行われなくなってしまうのでマズイ。
swingでは、代わりに protected void paintComponent(Graphics g) をオーバーライドしてください。
679678:2008/05/31(土) 19:53:30
あぁ、ただし JApplet には paintComponent はありません。
paintComponent を持ってるのは JComponent の子孫だけ。
JApplet に直接描きたい場合は paint をオーバーライドするしかない。
普通は中に swing コンポーネントを配置したいから JApplet を使うのであって、JApplet に直接描くのはあんまりしないと思う。
680デフォルトの名無しさん:2008/05/31(土) 20:10:30
じゃ、なんでJAppletをswingのパッケージに入れたんでしょうか。混乱しませんか?
681デフォルトの名無しさん:2008/05/31(土) 20:16:11
javax.swingパッケージにはコンポーネント以外のクラスもいっぱい入ってるよ
ActionとかTimerとかSwingWorkerとか
↓みてみ
http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/package-summary.html
682デフォルトの名無しさん:2008/05/31(土) 21:08:23
Cよりjavaから先に勉強した方がいいの?
683デフォルトの名無しさん:2008/05/31(土) 21:18:08
>>682
初心者のためのプログラミング言語ガイド Part9
http://pc11.2ch.net/test/read.cgi/tech/1210941509/
684デフォルトの名無しさん:2008/05/31(土) 21:19:38
興味がある言語からやればいい
685デフォルトの名無しさん:2008/05/31(土) 22:15:20
JFrameにJAppletをaddすべきかどうかいつも悩むんですけど・・
AWTでは全く問題ないのにswingはpaint関連を知っていると、少し変な設計なんですがどう思いますか?
686デフォルトの名無しさん:2008/05/31(土) 22:55:57
>>685
まぁ別にいいんじゃない?
気になるならFrameの上にJAppletを置けば
687デフォルトの名無しさん:2008/05/31(土) 22:59:36
てか、JAppletの上にJPanelを引いてなにかするべきだろ?
そうすれば同じようにJFrame上でも動作可能になる。
688デフォルトの名無しさん:2008/05/31(土) 23:05:56
>>686
そうするとSwingのUIから外れちゃいませんか?
689デフォルトの名無しさん:2008/05/31(土) 23:11:27
JPanelにLinkedList<JLabel>を配置したい場合はどうしたらよいでしょうか?
690689:2008/05/31(土) 23:13:42
スイマセン、やっぱりもうちょっと自分で考えてみます。
691689:2008/05/31(土) 23:16:52
自己解決しました。スレ汚し&連投失礼致しました。
692デフォルトの名無しさん:2008/05/31(土) 23:32:25
>>688
そういう細かいことが気になるんなら、687 の言うように JPanel 上にすべてを構築して、
アプレットの場合はそのパネルを JApplet の中に置き、
アプリケーションの場合はそのパネルを JFrame の中に置くようにすればいいよ
693デフォルトの名無しさん:2008/05/31(土) 23:32:43
正規表現を使ったプログラムを作っているのですが、
pattern = Pattern.compile("^Java.*");
matcher = pattern.matcher("JavaでHello World");
boolean b = matcher.matches();
System.out.println(b);
pattern = Pattern.compile(".*World$");
matcher = pattern.matcher("JavaでHello World");
boolean c = matcher.matches();
System.out.println(c);
このとき同じ文字列に1回1回compileとmatcherを使ってしまいます
この場合ならPattern.compile("(^Java.*|.*World$)");とまとめれば済みますが
これをもっと多数(50とか60とか)に増やすときにはものすごく長くなってしまうと思います
なんとかスッキリまとめる方法はないですか?
694デフォルトの名無しさん:2008/05/31(土) 23:39:28
正規表現はそれだけで1冊の本が出るように別の言語と思え
695デフォルトの名無しさん:2008/06/01(日) 00:09:19
50個追加していき
"ab"+"cd"+"ef"...
とやればよい。

そのUIってのは、Menuとかがswingらしくなくnative依存という事だと思うんだけど。
で、>>687はそういうことを言ってたのか。オレの強力なエスパー使っても分からなかった・・
696デフォルトの名無しさん:2008/06/01(日) 00:16:22
>>695
つまりPattern.compile("^Java.*"+".*World$");というように記述すればいいのですか?
697デフォルトの名無しさん:2008/06/01(日) 00:48:02
>>693
その質問内容だと、「愚直に|で繋げ」、としかアドバイスできないと思
う。長い正規表現の記述が長くなるのは当たり前。

やりたいことをもっとハイレベルに書けば、正規表現とは違ったスマー
トな解決方法もあるかもしれない。

698デフォルトの名無しさん:2008/06/01(日) 01:16:19
>>693
ふと思ったのだが、文字列を1行にしようとしてないか?
 "(^Java.*"
+"|.*World$)"
って2行にして書いてもコンパイル時にまとめられるから"(^Java.*|.*World$)"と同じ事だぞ。
699デフォルトの名無しさん:2008/06/01(日) 01:46:22
用途を拡張したいということだろ
ただつなぐだけなら誰でも分かる話
700693:2008/06/01(日) 02:18:15
やりたいのはテキストファイルを読み込んで1行ごとにパターンマッチしてるかを
判定していくプログラムですね
ただ、パターンが大量にあるのでそれをソースコードの中に全部書いていくのは
無駄が大量なのではないかと疑問に思ったしだいで
チェックしたいパターンを別のファイルに記述しておいて
そのファイルを読み込むという方法も考えましたが、改行文字の処理が面倒そうですし
701デフォルトの名無しさん:2008/06/01(日) 02:20:24
>>700 for ループでぶん回せば?
702デフォルトの名無しさん:2008/06/01(日) 02:56:43
ほとんどの場合に最初の方のパターンでマッチするから、後のパターンは無駄になる事が多いって事かな。
なら、
>チェックしたいパターンを別のファイルに記述しておいてそのファイルを読み込む
でもいいと思うけど。配列にした方が早いかも知れんが。

>改行文字の処理が面倒そう
これが良くわからん。BufferedReader#readLine()で1行ずつ読むだけだと思うのだが、何かまずいのか?
703デフォルトの名無しさん:2008/06/01(日) 03:04:30
そこまで考えてやることもないだろう。
704デフォルトの名無しさん:2008/06/01(日) 03:08:40
>>702
1行ごとに
^Java.*
みたいなのを書いていったファイルを読むと考えていますが
readline()は改行文字を読まないんでしたっけ?
それなら1行呼んでそれに+していく方法に問題は無いんですが
705デフォルトの名無しさん:2008/06/01(日) 03:11:50
APIドキュメントを読むのは基本
基本が出来ないやつはいつまでたっても馬鹿
706デフォルトの名無しさん:2008/06/01(日) 03:19:06
>>705
申し訳ございません
このような愚行でスレを汚してしまったことを深くお詫びします
>704は無視していただいて構いません
707デフォルトの名無しさん:2008/06/01(日) 03:35:11
ファイル名とかは含まず、画像内容そのもののダイジェストを求めたくて、
↓作ったけど、もうちょっと最適化できないでしょうか?
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=30326

ファイル名とかパスを除くための、
特に46〜50行目ぐらいの↓が無駄な気がするけど、いい案が思い浮かばないです。
// (1)Normalize
BufferedImage bimg = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_3BYTE_BGR);
Graphics g = bimg.createGraphics();
g.drawImage(icon.getImage(), 0, 0, null);
ImageIcon normalize_icon = new ImageIcon(bimg);
708デフォルトの名無しさん:2008/06/01(日) 04:33:04
パス or URLが示す(画像)ファイルに含まれるデータのハッシュを使わない理由は?
709デフォルトの名無しさん:2008/06/01(日) 04:49:01
>>708
圧縮形式の違いは無視したい。
PNGやBMPとか、クリップボードから取り込んだイメージとかとか

デコード済みの画像から作りたいです。
710デフォルトの名無しさん:2008/06/01(日) 05:08:05
どういう最適化を望んでいるのかによる。
711デフォルトの名無しさん:2008/06/01(日) 09:55:50
無駄なコードや、性能とか

ImageIconからシリアライズ可能なイメージ情報だけ取得したり
できないのかなと思ったのだが、無い?
712デフォルトの名無しさん:2008/06/01(日) 10:18:26
>>709
java.awt.image.PixelGrabber つかって画素データ取り出してから
画素データのハッシュ値計算すりゃいいんでは?
713デフォルトの名無しさん:2008/06/01(日) 12:16:44
>>707
これでどう

static byte[] getImageHash(String path) { return getImageHash(ImageIO.read(new File(path))); }
static byte[] getImageHash(URL url) { return getImageHash(ImageIO.read(url)); }
static byte[] getImageHash(BufferedImage image) {
 int[] pixels = new int[image.getWidth() * image.getHeight()];
 image.getRGB(0, 0, image.getWidth(), image.getHeight(), pixels, 0, image.getWidth());
 return MessageDigest.getInstance(HASH_ALGORITHM).digest(pixels);
}
714デフォルトの名無しさん:2008/06/01(日) 13:50:51
型変換についてなんですが
スーパークラスA, それを継承しているサブクラスBがあるとして
明示的なキャスト変換以外に
型をスーパAからサブBに変換する方法はありますか?
715デフォルトの名無しさん:2008/06/01(日) 13:58:25
>>714
Visitorパターン、またはダブルディスパッチ
716デフォルトの名無しさん:2008/06/01(日) 18:45:11
>>713
その手があった。サンクス
Officeサンプル画像のBlue hills.jpgで50回ほどベンチマークしてみたけど
(JDK 1.6.0_05-b13)で比較したら、new int[];BufferedImage.getRGBのほうが
残念ながら、2割ほど遅かった。
(new int[]とそこへのコピーがオーバーヘッドになっちゃうのかな?)

http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=30328

>>712
PixelGrabber、考えて見まつ

717デフォルトの名無しさん:2008/06/01(日) 23:26:06
testフォルダをルートとして
その中にtestaとtestbのフォルダを作って
testaフォルダの中にあるjavaファイルから
testbのフォルダの中にあるファイルデータaa.textを
ロードする場合の指定は
testb/aa.textでいいでしょうか?
実行すると
java.lang.NullPointerException
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
という例外が出るんですが
718デフォルトの名無しさん:2008/06/01(日) 23:35:26
フォルダ云々じゃなくてまずはパッケージの概念と実行する時のクラスパスに関して勉強して来い
お前の質問じゃ、それでもいいともそれではダメともどちらでも取れる
719デフォルトの名無しさん:2008/06/02(月) 00:11:45
>>717
釣りなのか?なんか笑える
720デフォルトの名無しさん:2008/06/02(月) 00:32:34
>>717 説明の文章だけ読むと ../testb/aa.txt
721デフォルトの名無しさん:2008/06/02(月) 03:38:56
     * Returns a shallow copy of this <tt>ArrayList</tt> instance.  (The
     * elements themselves are not copied.)

    public Object clone() {

        ArrayList<E> v = (ArrayList<E>) super.clone();
        v.elementData = Arrays.copyOf(elementData, size);

これ、ディープ・コピーじゃないんですか?
以前のソースがないので分かりませんが、clone()の実装がバグってるんでしょうか。
722デフォルトの名無しさん:2008/06/02(月) 05:41:04
>>721
6のArrayListの実装?
どうみてもシャローコピーなんだが。
super.clone()
は継承元ではオーバーライドされていないからObject#clone()呼び出しと同義だし、
v.elementData = Arrays.copyOf(elementData, size);
は単に各要素への参照値をクローンしたArrayListの方にコピーしているだけでしょ?
コメントにも要素自身はコピーされないって書いてあるやん。
723デフォルトの名無しさん:2008/06/02(月) 07:56:08
v.elementData = Arrays.copyOf(elementData, size); 

これでしょ問題なのは。

v.elementData = this.elementData

シャローコピーといえば、普通はこうじゃないの?
オブジェクト(クラス)がArrayListだから、クラスの意味からすれば
オブジェクトのフィールドにある配列の内容の方もコピーするってのは分からなくもないけど、
シャローコピーは配列の参照だけコピーで内容はやんないんじゃなかったか。
724デフォルトの名無しさん:2008/06/02(月) 07:57:04
> v.elementData?=?this.elementData
>
> シャローコピーといえば、普通はこうじゃないの?

コピーになっとらんがな。
725デフォルトの名無しさん:2008/06/02(月) 08:05:34
>>723
そもそも
> * Returns a shallow copy of this <tt>ArrayList</tt> instance.
をわざわざ引用していたり
> clone()の実装がバグってるんでしょうか
などと言っているところからみて
> ディープ・コピーじゃないんですか?
は配列のコピーうんぬんの話でなく
ArrayList#clone()のことを質問してるんじゃないの?
726デフォルトの名無しさん:2008/06/02(月) 08:08:25
>>724
要素が変更されたらおかしくなるし、確かにコピーになってない。
そうするとコレクションに限っては、cloneの仕様を満たすのは、やっぱこれでいいじゃないの?
727デフォルトの名無しさん:2008/06/02(月) 08:10:54
これだとコンストラクタと同じだし、cloneを実装したSUNの意図がイマイチわからん。
継承しても、cloneを再実装しようかどうか迷うじゃん。
728デフォルトの名無しさん:2008/06/02(月) 08:17:41
>>727
インスタンスメソッドである事に意味があるんじゃね?

コンストラクタは型わかってないと呼べないし。
729デフォルトの名無しさん:2008/06/02(月) 08:25:07
>>728
インスタンスなら、キャストしないといけないから結局はキャスト先の型がわかんないとダメでしょ。
リフレクト使うのもいいけど、そうれなら全て継承元の(ArrayList)のキャストになってしまう。
型分かってんなら、継承していてもいなくても、ArrayListのコンストラクタでいいでしょ。
イマイチわかんないな。
cloneが実装されている標準のクラスはあまりないから馴染みないけど、どういうときに使うんだ?
730デフォルトの名無しさん:2008/06/02(月) 08:41:41
>>729
(T)arraylist.clone() のキャスト先の型Tは
T extends Cloneable & List みたいちょっとだけでも抽象化できる。
コンストラクタ呼ぶ時ほど具体的な型名は必要ない。
731デフォルトの名無しさん:2008/06/02(月) 08:58:55
>>727
配列の clone() と似た動作を目指しただけだと思うが。

片っ方を変更したら、もう片方も変更されるようなものが欲しければ
List#subList(int, int) 使えって言われるだろうし。
732デフォルトの名無しさん:2008/06/02(月) 14:58:40
インスタンスメソッドでArraylListであることは最低限保証できるってことだと思う。
それなら、cloneじゃなくてdupとか別の名前でもいい気がしたけど
Vectorのころにcloneを実装しちゃったからその名残かな。
733デフォルトの名無しさん:2008/06/02(月) 15:10:46
Appletが起動したらTextFieldにカーソルが点灯している状態にしたいのですが
教えてください。FrameやWindowはつかってません。
734デフォルトの名無しさん:2008/06/02(月) 15:53:18
>v.elementData = this.elementData 

シャローコピーならこれでコピーされてるでしょ。
どうせコピー元が変更されたり追加されて内部の配列の参照が変更されても、
コピー先はその時点での状態がコピーできればいいんだし。
コピーになってないとかいって、意味わかんないな。

v.elementData = Arrays.copyOf(elementData, size);  

でも実質同じだから冗長と言えなくもない。
735デフォルトの名無しさん:2008/06/02(月) 16:21:15
>>733
検索した
ttp://www.alles.or.jp/~torutk/oojava/maneuver/1998/swing/swing_ja.html
>また、フォーカスを持つコンポーネントをプログラム中から指定することもできます。JComponentクラスのメソッド、requestFocus()です。

これでいい?
736デフォルトの名無しさん:2008/06/02(月) 17:24:05
sample.jsp

<%@ page contentType="text/html;charset=Shift_JIS" %>
<%! String a=""; %>
<%
//↓これを書くとjsp:paramで何故かエラー
request.setCharacterEncoding("JISAutoDetect");
a=request.getParameter("nam");
%>
<html>
<head>
<title>sample</title>
</head>
<body>
<jsp:include page="include.jsp">
<jsp:param name="param" value="<%=a %>" />
</jsp:include>
</body>
</html>
737736:2008/06/02(月) 17:26:02
include.jsp
<div align="right">
<%= request.getParameter("aaa") %>
</div>


実行結果:
org.apache.jasper.JasperException: An exception occurred processing JSP page /sample.jsp at line 16
(16行目は<jsp:include page="include.jsp">の行です)


何故かjsp:includeでUnsupportedOperationExceptionになるんですが。
<jsp:include page="include.jsp" />と閉じると何事も無く実行され、
request.setCharacterEncoding("JISAutoDetect");をコメントアウトしても実行できます。

なぜでせう?
738デフォルトの名無しさん:2008/06/02(月) 18:15:28
>>734がすごいことを言っている件
739デフォルトの名無しさん:2008/06/02(月) 18:24:31
super.clone();使ってるから
v.elementData = this.elementData 
の代入すら必要ないんじゃないの?
740デフォルトの名無しさん:2008/06/02(月) 18:28:47
何かアプリケーションを作りたいと思ってJavaで開発用エディタを作ったのですが、
これを個人毎に文字の色とかコンパイラのURIとかの各種情報を保存して
起動時に設定するようにしようかと思ったのですが、
こういう設定の保存ってどういう形式で行うのが普通なのでしょうか?
「設定.txt」とかいう形で保存するのも何か変な気がします。
741デフォルトの名無しさん:2008/06/02(月) 18:54:04
サンプルプログラムでは、*.propertiesが多いね
742デフォルトの名無しさん:2008/06/02(月) 19:11:39
そのclone()についてなんですけど、java.lang.NumberやStringなどはclone()実装されてないのがよく分からないんです。
コレクションの方はclone()あるのに、値の方はなんでないんでしょうか。

それもthis用のコンストラクタとでも言うのか、それ用のコンストラクタすら用意されてないのもあり、
もしコピーするならかなり遠回りな操作をしなければならないですよね。
イミュータブルだとしても、classもfinalのも多く、設計上に意図としてはインスタンスのコピーはするなってことなんですか?
743デフォルトの名無しさん:2008/06/02(月) 19:22:01
> イミュータブルだとしても、classもfinalのも多く、設計上に意図としてはインスタンスのコピーはするなってことなんですか?
Immutableなオブジェクトのコピーとって何したいの?
744デフォルトの名無しさん:2008/06/02(月) 19:31:05
内部が変更できるかどうかじゃなくて、インスタンスのコピーの話なんですけど、ごっちゃにしてませんか?
745デフォルトの名無しさん:2008/06/02(月) 19:33:23
何したいとかじゃなくて、そもそもそのAPIがないなら何も出来ないでしょw
746デフォルトの名無しさん:2008/06/02(月) 19:40:30
>>740
サラッとスゴい事をおっしゃる。
747デフォルトの名無しさん:2008/06/02(月) 19:47:31
>>742
cloneを実装してないのは、たぶんイミュータブルなインスタンスをコピーできても、うれしいことが特に無いからじゃないかな
finalは、イミュータブルな性質を維持するために必要なことだから、仕方ない
748デフォルトの名無しさん:2008/06/02(月) 20:02:07
>finalは、イミュータブルな性質を維持するために必要なことだから、仕方ない 

こういうこと平気で書いちゃうあたりが、イミュータブルとかextendsとかを分かってないんだろうね。
インスタンスとcloneも同じく、ごっちゃにしてるんだろうw
749デフォルトの名無しさん:2008/06/02(月) 20:02:09
>>742
もし仮にNumberやStringをコピーできるとしたら、それがどんな場面で役に立つ?
750デフォルトの名無しさん:2008/06/02(月) 20:04:22
>>741
ありがとうございます!
propertiesをキーワードにググって実装してみたところ出来ました!

>>746
すいません、やっぱり.txtで保存するのはおかしいですよね;
直感的に変なのは分かるのですが、テキストファイルだとデータと値の関係がないとか、
そういうことが.txtを用いない理由なんでしょうか?
751デフォルトの名無しさん:2008/06/02(月) 20:29:52
>>749
仮にも何も、もう設計上出来ないんだよ。
まあ書いてもいいんだけどね(笑)
インスタンスをコピーするってことはどういうことなのかをよく理解すればいいんじゃないの?
752デフォルトの名無しさん:2008/06/02(月) 20:30:47
>finalは、イミュータブルな性質を維持するために必要なことだから、仕方ない  

こういうこと平気で書いちゃうような人だしなぁw
753デフォルトの名無しさん:2008/06/02(月) 20:58:23
>>751
俺がバカだからか、よくわからないので教えてほしい。
インスタンスをコピーするってことはどういうことなんだ?
コピーなんかせずに同じインスタンスを使えばいいじゃないか?
754デフォルトの名無しさん:2008/06/02(月) 21:00:45
>>750
いや、スゴい事ってのは
>Javaで開発用エディタを作ったのですが、
の部分。
質問するより答える立場の人でしょ。
755デフォルトの名無しさん:2008/06/02(月) 21:01:58
>>721に戻ると、
・これは普通shallow copyと言わないのでは?

という話だよね。たしかに「オブジェクトのshallow copy」とは言えない。
フィールドにぶらさがったものを複製しているからね。
でも、「(このオブジェクトが表している/保持している)配列のshallow copy」ではあるでしょ。
参照の羅列としての配列を複製しているだけで、配列の要素をいちいち複製していないから。
〜 完 〜

てことじゃないのかい
756デフォルトの名無しさん:2008/06/02(月) 21:04:53
> 配列の要素

配列にぶらさがっているオブジェクト
と言った方がいいか
757デフォルトの名無しさん:2008/06/02(月) 21:21:20
clone()したくローン先の方で変更したら、クローンもとのオブジェクト
でも変わる事が期待されるでしょ。
o2=(...) o1.clone ();
o1.set (1,val)
シャローコピーって書いてあるなら、このときo2, o1の保持してるvalは同じであってほしいよね。
今さらだから、APIドキュメントの方をそう書き直せばすむんじゃないの?
確かVector.clone()の記述はそんな風に書いてあった(jdk 1.5だけど)。
ドキュメントにうそ書いてあると、実装するとき困るんだよ。
758デフォルトの名無しさん:2008/06/02(月) 21:25:47
>>757
> clone()したくローン先の方で変更したら、クローンもとのオブジェクト
> でも変わる事が期待されるでしょ。

クローンを殴ったらクローン元も痛みを共有するわけですね、わかります
759デフォルトの名無しさん:2008/06/02(月) 21:43:53
>>721
> (The elements themselves are not copied.)

って但し書きの意図を汲めば、まー、まず迷わないと思うんだけどどうよ。
でも、ここで「elements」を「参照」ではなく、「参照先のインスタンス」だと解釈しなければならないってのが、
微妙といえば微妙なのかな。ふつうわかるんじゃね?名前を書き写さずに何が名簿のcloneなのかっていう。

>>757
> シャローコピーって書いてあるなら、このときo2, o1の保持してるvalは同じであってほしいよね。

全然思わない。(一応言っておこうw)
760デフォルトの名無しさん:2008/06/02(月) 21:58:51
ああ、わりい。飯食ってた

>clone()したくローン先の方で変更したら、ローンもとのオブジェクト 

気がつかなったかけど笑えるね。たぶん自己破産の相談なのかな?

>全然思わない。(一応言っておこうw) 

長年使ってると、全然思うのが、まあ普通なんだけどw
その挙動がArrayListにふさわしくないなら、clone実装すんなってこと。もしくはAPI DOCのバグを書き直せ。
どうせ翻訳の人も見てんだろうしSUNに言っといてよ。頼むよ。
761デフォルトの名無しさん:2008/06/02(月) 22:03:40
>>754

>Javaで開発用エディタを作ったのですが、 

実はTextAreaをaddしただけでも、偉そうに言えばこうもいえるんじゃないの?
どう凄いのかわかんないんだけど。
762デフォルトの名無しさん:2008/06/02(月) 22:25:02
>>760
一応言うだけ言ってみるけど、トリップつけてくれないかな
763デフォルトの名無しさん:2008/06/02(月) 22:27:39
なんで?
764デフォルトの名無しさん:2008/06/02(月) 22:28:17
無視したいから
765デフォルトの名無しさん:2008/06/02(月) 22:34:36
>>760
>長年使ってると、全然思うのが、まあ普通なんだけどw

悪いけど風呂入ってくるから、全然思わないにもう一票入れておいてよ
766デフォルトの名無しさん:2008/06/02(月) 22:39:21
>>754,>>761
開発用「エディタ」なので、ホントIDEみたいに立派なもんじゃないです><;
インテリセンスとかキーワード色分けとかオートインデントとか
IDEの中で自分が欲しい部分だけ取って軽く書きたいときに使う用に作った程度です。

普段はC/C++畑でJavaは全然なので、勘違いさせてすいません。。
767デフォルトの名無しさん:2008/06/02(月) 22:56:37
質問です。
Component.createImage(int width, int height);
でcreateImageしたのですが、これに透過色を設定したgifファイルをdrawImageすると透過される(ハズ)の部分が白で塗りつぶされた状態になってしまいます。
試しにcreateImageを使わないでただgifファイルをdrawImageすると透過はされていたのでgifファイルには問題がないように思います。
また、createImageしたImageにgifファイルを書き込まずImageをdrawImageしても白で塗りつぶされてしまっています。
768デフォルトの名無しさん:2008/06/02(月) 23:06:34
>>767
component.getGraphicsConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
でイメージを作って、gifを乗せる前に
((Graphics2D)g).setComposite(AlphaComposite.Src);
するといいよ
769デフォルトの名無しさん:2008/06/02(月) 23:17:10
>>757
> clone()したくローン先の方で変更したら、クローンもとのオブジェクト
> でも変わる事が期待されるでしょ。
期待されない。

> 確かVector.clone()の記述はそんな風に書いてあった(jdk?1.5だけど)。
書いてない。
> Returns a clone of this vector. The copy will contain a reference to a clone of the internal data array,
> not a reference to the original internal data array of this Vector object.
770デフォルトの名無しさん:2008/06/02(月) 23:20:26
>>768
ご丁寧にどうもありがとうございます。
無事透過したまま書き込むことができました。

それにしても他のソースで使ってるコードなのに突然動作が変わるなんてなんだか怖いです。
精進します・・・。
771デフォルトの名無しさん:2008/06/02(月) 23:25:59
>>757 
> clone()したくローン先の方で変更したら、クローンもとのオブジェクト 
> でも変わる事が期待されるでしょ。 
それをしたいなら、o2=o1;でいいよーな。
772デフォルトの名無しさん:2008/06/03(火) 00:31:41
charにnullが代入できない。
納得いかない。

char test1 = '';

char test2 = null;

どっちも駄目なんだよな。
773デフォルトの名無しさん:2008/06/03(火) 00:33:58
納得いかないかもしれないが、そういうものだと思って使うしかない。
774デフォルトの名無しさん:2008/06/03(火) 00:37:25
新しいプログラミング言語が生まれることを期待したい!!
775デフォルトの名無しさん:2008/06/03(火) 00:39:37
新しいプログラミング言語はすでに色々あると思うけど・・・
C#などはいかが?
776デフォルトの名無しさん:2008/06/03(火) 00:52:21
>>772
> char test1 = '';

これはないでしょw
Unicodeだっつってんだからその範囲内でなんとかしようよ
777デフォルトの名無しさん:2008/06/03(火) 00:57:35
Character c = null;
778772:2008/06/03(火) 01:13:41
返信ありがとう。

int型にもnullを代入できないや・・・。
昔は代入できたよね?
勘違いかな?
779デフォルトの名無しさん:2008/06/03(火) 01:23:15
>>772
あそうか、「何charにnull突っ込んでんのww」と未熟者に突っ込む機会喪失問題か
780デフォルトの名無しさん:2008/06/03(火) 01:23:41
違ったらしいなw
781デフォルトの名無しさん:2008/06/03(火) 01:30:42
782デフォルトの名無しさん:2008/06/03(火) 01:32:05
web.xmlの<servlet>タグでサーブレットのクラスを指定すると、それまでアクセスできてたjspにアクセスできなくなるんですけど、、なんで!?
783デフォルトの名無しさん:2008/06/03(火) 02:19:38
>>778
nullは参照型のリテラルであり参照型からプリミティブ型への暗黙の型変換は
プリミティブ型のラッパークラスからのauto-unboxingによるもの以外にない
784778:2008/06/03(火) 02:37:23
>>783
暗黙の型変換を使えば、プリミティブ型にnullを代入出来るって言ってるのかな?
ちょっと判り難かったから・・・すみません。
とりあえず有難う。
もう寝なきゃ・・・。
785デフォルトの名無しさん:2008/06/03(火) 02:39:33
>>769
君、しつこいよ。荒らしと同じだよ。
そういう君独自の解釈はもういいから、早くSUNの翻訳担当の人に言っといてよ。
786デフォルトの名無しさん:2008/06/03(火) 02:41:40
>>783
場を和ませたい人がいるのか、たぶん釣りだと思うんだがww
787デフォルトの名無しさん:2008/06/03(火) 02:42:52
>>785
ごめん、これで最後にするけど、>>764以降漏れは無視してるから
788デフォルトの名無しさん:2008/06/03(火) 02:59:29
>>787
一日中2CHに張り付いてんですか…邪魔する気はありませんけど、ホント、ご苦労なことですね…
789デフォルトの名無しさん:2008/06/03(火) 03:29:09
>>784
釣りじゃなくてマジ?
プリミティブ型にはそもそもnullという概念自体存在しない。
790デフォルトの名無しさん:2008/06/03(火) 05:58:03
もしSQL流のNULLがJavaにあったらキッツイ気がするな
791デフォルトの名無しさん:2008/06/03(火) 10:57:57
>>772
charに無効な値を入れたいなら、U+FFFFというソレ用のコードポイントがある。
792784:2008/06/03(火) 11:35:32
>>789
大マジまんだけど、でもようやく理解できた。
int型にnullへのポインタ突っ込むのは無理があるもんな。(遠い昔C言語をやっていた頃の記憶を呼び起こした。間違ってるかも。)


>>791
それ使える。
int(Unicode補助文字)ならU+FFFFFFFFって訳ね。
793784:2008/06/03(火) 11:43:15
>>784
>>791
感謝の言葉を忘れていた。
ありがとう。
794デフォルトの名無しさん:2008/06/03(火) 16:40:14
nullは-1でいいのか?0がいい感じの気がするけど。
795デフォルトの名無しさん:2008/06/03(火) 17:55:27
796デフォルトの名無しさん:2008/06/03(火) 17:57:04
一貫してれば具体値は何でもイイよ。
797デフォルトの名無しさん:2008/06/03(火) 20:16:55
質問させてください。
Eclipseの使用を考えています。
そのためには、どの程度のPC性能が必要ですか?

現在使用中のPCは、
CPU Pentium4 3.0GHz
MEM 1Gbyte
です。

798デフォルトの名無しさん:2008/06/03(火) 20:20:14
どなたかご教授願います。
-------------------------------

class sample1
{
public static void main(String args[])
{
double ans3 =(double)5/3;

System.out.println("5÷3は" + ans3 + "です。");

}
}

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

上のようなソースがあるとして、
5/3の前に(double)の表記を入れる理由というのはなぜなんでしょうか?
すでにdouble ans3 のところでdoubleと書いてあるのでans3には、
ちゃんと小数点が含まれた答えが表示されると思うのですが。
もしかしてアホすぎる質問でしょうか
799デフォルトの名無しさん:2008/06/03(火) 20:20:52
>>797
大丈夫だと思うが、とにかく落としてきて軽く動かしてみ
どのぐらいが「快適に動かせる」と感じるかは、個人差がある
800797:2008/06/03(火) 20:34:03
>>799
> 大丈夫だと思うが、とにかく落としてきて軽く動かしてみ
とりあえず動くようで安心しました。さっそく、インストールしてみます。
回答ありがとうございます。
801デフォルトの名無しさん:2008/06/03(火) 21:21:38
>>598
5/3するときにはそれがdouble型に代入されるなんて気にしちゃいない。
つーか、思ってるだけじゃなく、キャストのありなしで結果が違うことくらいは試せ。
802デフォルトの名無しさん:2008/06/03(火) 21:34:41
>>798
http://www.lcv.ne.jp/~kenmio/yomimono/yomimono4.htm
ここの「5割る2は2?」って所を見ると良いよ。
803デフォルトの名無しさん:2008/06/03(火) 21:46:15
>>802
ありがとうございました。
これで寝れそうです。
804デフォルトの名無しさん:2008/06/03(火) 21:48:18
>>803
マルチ先にも断っとけよ。
805デフォルトの名無しさん:2008/06/04(水) 01:39:53
設計に関して質問があります。

今作っているソフトの中でJButtonやJTextなどのオブジェクトが多数出現します。
こうした場合配列にしておくと
JButton button[]=new JButton[BUTTONNUM];
for(int i=0;i<button.length;i++)
{
button[i].〜
}
みたいに一括で処理できるものもあるので便利なのですが、
個別の名前(例えばdeletebutton)を付けた場合に比べて
button[1]、button[2]では何のボタンか分かりづらい面があります。

こういう場合、一般的にor皆さんの場合どうしているか教えてください。
806デフォルトの名無しさん:2008/06/04(水) 01:43:31
ちなみに今現在の処理方法ですが、
HashtableとgetIndex(String)という関数を作って、

Hashtabel hash=new Hashtable();
hash.put("delete","0"");
hash.put("prev","1");
・・・
public int getIndex(String buttonname)
{
return Integer.parseInt((String)hash.get(buttonname));
}
button[getIndex("delete")]という風にしています。
807デフォルトの名無しさん:2008/06/04(水) 03:46:46
自分では使ったことのない機能:
enum MyButton { DELETE, ... }

... button[MyButton.DELETE] ...
(いきなり質問の条件を無視してみる)
808デフォルトの名無しさん:2008/06/04(水) 04:08:34
>>806
そういうハッシュテーブルの使い方をするくらいなら、
間接的に配列のインデックスなんかに結びつけるんじゃなくて、
HashMap<String, JButton> buttons = new HashMap<String, JButton>();
buttons.put("delete", new JButton());
buttons.put("prev", new JButton());
...
buttons.get("delete").〜
みたいに名前とインスタンスを直接結び付けておいてもいいような。
>>805のように一括して処理したいようなループを回すときは、
for (JButton button : buttons.values()) {
button.〜
}
のようにできるし。
809デフォルトの名無しさん:2008/06/04(水) 04:30:13
>>807
たぶんそれコンパイルできない
Cの列挙型ではないからもしやるならbutton[MyButton.DELETE]でなくbutton[MyButton.DELETE.ordinal()]だ
810デフォルトの名無しさん:2008/06/04(水) 08:03:06
>>805
個別の名前をつけて配列にも入れておけばいいじゃない
JButton deleteButton = new JButton();
JButton prevButton = new JButton();
...
JButton button[] = { deleteButton, prevButton, ... };
811デフォルトの名無しさん:2008/06/04(水) 08:45:22
ボタンいくつ貼り付けてるの?
812デフォルトの名無しさん:2008/06/04(水) 11:26:13
>>810
たぶん、そういう生成もループで済ませたいんじゃないかな。わかんないけど。
たしかに「多数」ってどのくらいなのか気になるw
813デフォルトの名無しさん:2008/06/04(水) 12:11:24
>>805
一括に処理したいというのと個別に名前で指定したいという要求はバッティングするんじゃ?

本当に希望しているのは、個別に指定したいけど、コード量は減らしたいってだけじゃないの?

それなら、
private JButton getButton(String name,...){}
JButton delete = this.getButton("削除",...)
みたいなビルダーメソッドを作ればいいのでは
814805:2008/06/04(水) 12:57:50
皆さんありがとうございます!
ですね、一括で処理したいのは生成も含めて、
パネルへの追加とかフォントの指定とかまとめて共通の処理を行う部分で、
個別に判断する所というのはActionListenerを実装したりする部分なんかです。
色んな方法を聞けて勉強になりました、列挙体に至ってはJavaであることを知らなかった…。
今日学校からやってみます、本当にありがとうございます!

ちなみにリネーマ&ファイル整理用のプログラムなのでボタンは今は
プレビュー、リネーム、ファイル検索、削除、移動、ディレクトリ表示くらいですが、
テキストフィールドの方が
ワイルドカード、正規表現、前方一致、後方一致、ユーザ定義用etcとたくさん指定出来るように作ってあって11個くらいといった感じでしたw
815デフォルトの名無しさん:2008/06/04(水) 17:03:17
>>57-58を見て思った。

>>57のような意味不明なレスをすると自分のレス番号が該当になったとき
>>58のように「おかしい」とおもわないといけない儀式でもあるのか?

おかしいと思ってる>>58まったく理解できないのだが。
別の意味でおかしいとは思うけどさ
816デフォルトの名無しさん:2008/06/04(水) 17:07:34
君がThreadとか理解してるなら気にしなくていいんじゃない?
817デフォルトの名無しさん:2008/06/04(水) 17:09:58
結局ビルダーパタンで落ち着いたのね。
せいぜいそれぐらい(11個)とか思ったけど、チェックボックス(とラベル)が100個超えてるUIのパターンもあるから。
それならソースコード11行とか100行にわたり書けばいいんじゃないかと思うけど。
818デフォルトの名無しさん:2008/06/04(水) 17:27:06
ここで聞くことかどうかわからんが。

大昔、いろんなラベルがついた箱が線でくっついて
うにゃうにゃ(バネモデルか何かで)動くデモってのを見た記憶があるんだが、
うまく見つけられなくて困り中。

誰か在処か名前をご存じでしたら教えてください。
819デフォルトの名無しさん:2008/06/04(水) 17:39:42
スレッド番号100から、スレが経った日付を列挙してみた。
100 2007/03/31
101 2007/04/30
102 2007/05/29
103 2007/06/27
104 2007/07/27
105 2007/08/28
106 2007/09/19
107 2007/10/18
108 2007/11/07
109 2007/11/25
110 2007/12/15
111 2008/1/13
112 2008/2/8
113 2008/3/1
114 2008/4/5
115 2008/5/12
Javaスレの進行速度は月1ペースか。今から4年ほど前はスレが50くらいだったのに
急激にスレの消費速度が加速していって2007年3月末の時点で100になったときは
そのスレッドの消費速度の速さには驚いたものだ。

Java登場当初にはAppletの影響でJavaは遅いなどと言われC/C++プログラマの間でも
不評が多く、プログラム板、プログラマ板で頻繁にJava叩きが行なわれていたにも関わらず、
これほどにまでJavaの知名度の人気が上がるとは誰が予想しただろうか。M$が2000年にC#を発表した
とき、一部の者やM$の関係者は、「これからはC#が普及し、Javaは衰退する」と言っていたにもかかわ
らず、あれから8年経った今でもJavaは衰退する様子を見せず、後から登場したC#はほとんど普及し
ていないという有様。

気がつけばJava関連の求人も毎年毎年増え、Javaだけでも食うに困らない状況にまでなった。
書店のコンピュータ関連書籍コーナーにはJavaだけで占められた本棚が大きく占有していった。
今では書店ではAjaxやWeb関連書籍が多いが、WebにJavaを利用することはもはや当たり前に
なった感がある。M$のC#を揺るがした背景にはGoogleの影響が少なからずあるのではないかと思えてくる。
820デフォルトの名無しさん:2008/06/04(水) 17:40:44
この調子で行けば、2010年にはスレは
スレは12月で122、2009年1月で123、2010年1月で135、2011年1月で147、
2012年1月で159、2013年1月で171、2014年1月で183、2015年1月で195、
2016年1月で207、2017年1月で219、2018年1月で231、2019年1月で243、
2020年1月で255にまで伸びるだろう。

その頃までに、2chがあるのか、今の2chが存在しうるかどうかはわからないが。
blogなどの外部のコミュニティに徐々に質問者が移行するときがやってくるだろうか?

Javaは何十年経っても古いプログラムを動かすことができる。
だからその頃にこのスレがなくなってもJavaは相変わらず健在だろう。
821デフォルトの名無しさん:2008/06/04(水) 17:41:45
>>815
なんか口に出さないで指指された気分になるじゃん。
m9(^Д^)
822デフォルトの名無しさん:2008/06/04(水) 17:43:24
懐かしいAAだな
823デフォルトの名無しさん:2008/06/04(水) 18:25:57
4年も張り付いてるみたいだしw
824デフォルトの名無しさん:2008/06/04(水) 18:29:03
月に50万円稼ぐ派遣の狼君が捕まっただろ。
人殺し食っちゃったんだっけな?

C++/C#好きで、宗教(GNU?)狂信者だって噂だよw
そんなやつと同じにされてもね。
825デフォルトの名無しさん:2008/06/04(水) 18:32:36
どこかのIT記事で「天才20歳(何々賞受賞!)」とかの奴もいたけど、似たような狼君じゃないの。
826デフォルトの名無しさん:2008/06/04(水) 18:35:07
>>818
JDKに付いてるデモなら多くないんだから順番に試していけばいいじゃないかw
たぶんアプレットのデモの中のGraphLayoutかな?
827デフォルトの名無しさん:2008/06/04(水) 18:44:38
>>808>そういうハッシュテーブルの使い方をするくらいなら、 

そういうひねくれた方法を見つけるほうが実は凄いんだけどね。(実用でもないし、使わないけど)

>>806
828デフォルトの名無しさん:2008/06/04(水) 18:53:39
>826

おお、まさしくコレだ。
てっきりLayoutManagerがらみかと思ってスルーしてた。スマン&&ありがとう。

829デフォルトの名無しさん:2008/06/04(水) 19:08:37
>>827
どういう意味だ??
830デフォルトの名無しさん:2008/06/04(水) 19:18:13
バグの元になるでしょ。
831デフォルトの名無しさん:2008/06/04(水) 21:42:25
>>824
おいおい、マジかよ。なんでそこまで知ってるんだ。
どこかのスレで話題になってるのか?
832デフォルトの名無しさん:2008/06/04(水) 21:44:50
>>808 >>827見て思った。

>>808のコードは
ハッシュでボタンを区別しているようだが・・・

これこそ、enumを使うべきじゃないかね
833デフォルトの名無しさん:2008/06/04(水) 21:54:06
> するくらいなら
だから本当は>>808みたいなのもアレだけどハッシュならハッシュで別に添え字を値にしなくてもってことじゃない?
しかも整数値でなくてわざわざ文字列を値にしているし
834デフォルトの名無しさん:2008/06/04(水) 21:56:54
>>831
板違いの話題だからマ板池
835デフォルトの名無しさん:2008/06/04(水) 22:27:38
>>833
誰かみたいに死体の肉を食べちゃったわけじゃないし、まーいーじゃん。
836デフォルトの名無しさん:2008/06/05(木) 02:26:21
>>823
張り付くってどういう意味か。久しぶりにJavaスレを見たんだけどな。
気がつけばスレがここまで進んで驚いているんだよ。

2chで初めてJavaスレに書き込みをしたのは
もっと前だけどな。
837デフォルトの名無しさん:2008/06/05(木) 02:26:56
>>834
なんとなくどこのスレかはわかったが。
誘導スレを紹介してくれないか
838デフォルトの名無しさん:2008/06/05(木) 02:48:44
ここはスルー?
助言求む!
839デフォルトの名無しさん:2008/06/05(木) 03:41:54
>838
おまい誰だよ。煽りとかじゃなくてマジで
840デフォルトの名無しさん:2008/06/05(木) 05:33:41
誤爆か?
841デフォルトの名無しさん:2008/06/05(木) 10:52:56
つまんねー
842デフォルトの名無しさん:2008/06/05(木) 12:28:45
swingプログラムの中でメニューやボタンから別のウィンドウを表示させる際に
class Window2{
Window2(String title){
JFrame frame2=new JFrame(title);
・・
frame2.setVisible(true);
}
}
こういう風にもう一つのクラスを作ってnewした場合、
setCloseOperation(JFrame.EXIT_ON_CLOSE)を設定すると
呼出し元のウィンドウも含めてプログラム全体が終わってしまいます。
WindowListenerで設定しようかと思ったのですが、
明示的に破棄するウィンドウを指定するにはどうしたら良いのでしょうか?
843デフォルトの名無しさん:2008/06/05(木) 12:30:56
DISPOSE_ON_CLOSE のこと?
844デフォルトの名無しさん:2008/06/05(木) 12:37:46
DISPOSE_ON_CLOSE 相当の処理を自分でやりたいってことなら、
DO_NOTHING_ON_CLOSE にして windowClosing で dispose を呼ぶ
845デフォルトの名無しさん:2008/06/05(木) 12:38:43
>>843
あああすいません、それですね!
何かハンドル渡してウィンドウ指定して破棄みたいなやり方かと思ったらあったのかorz
846デフォルトの名無しさん:2008/06/05(木) 12:46:56
>>833
添え字というかなぜかStringになってるところが
かなりヤバイね
847デフォルトの名無しさん:2008/06/05(木) 14:45:25
JSONみたいにXMLのマージを行うことの出来るJavaのライブラリってある?
848デフォルトの名無しさん:2008/06/05(木) 16:22:02
eclipseでJavaの開発を始めたばかりのひよっこです
JUnitの使用に慣れておけ、と言われました
明日一日使ってJUnitの勉強をするつもりですが、参考になるサイトがあったら教えてくださいです
849デフォルトの名無しさん:2008/06/05(木) 16:29:20
いった奴に責任があるからそいつに聞いておくんなさいまし。
850デフォルトの名無しさん:2008/06/05(木) 16:44:22
サンのJDKとOPENJDKってやつは同じものなの?
どっちもフリーで使える?
851デフォルトの名無しさん:2008/06/05(木) 17:00:39
>>721
今更だけど。。もしそこで内部の配列をコピーしなかったら、
要素が増えて拡張されたときに一方の配列がとりかえられて、泣き別れになるよね。
852デフォルトの名無しさん:2008/06/05(木) 17:02:46
ていう以前に要素数のカウンターが別管理になるか
853デフォルトの名無しさん:2008/06/05(木) 17:17:00
JUnitとか意味ない
854デフォルトの名無しさん:2008/06/05(木) 17:30:02
大体、単体テストツールの使い方なんて
教えてくれるもんじゃないの?
855デフォルトの名無しさん:2008/06/05(木) 17:30:12
>>721 >>851
というかEffective Javaを読めとしか
856デフォルトの名無しさん:2008/06/05(木) 17:30:47
>>848
@ITとJUnitでググレ
857デフォルトの名無しさん:2008/06/05(木) 17:33:07
JUnitの使い方だけ覚えてもServletやDBやHTTPセッションのテストは
容易ではないからなあ。

JUnitだけでなくJakarta Cactus、DBUnit、HTTPUnit、MockObjectの
使い方まで覚えないといけない。

どうせならTestNGも覚えておくことをお勧めしておく。
JUnitはJUnit4が出たのでそれも覚えておくことをお勧めしておく。
ついでにAntやMavenからJUnitを起動する方法も覚えておくことをお勧めしておく。
858デフォルトの名無しさん:2008/06/05(木) 17:41:39
JUnitとかのテストツールの使い方覚えるよりも、テストの書き方覚えたほうがいい。
859デフォルトの名無しさん:2008/06/05(木) 17:57:11
テストの書き方はチーム内のルールがあるのでは?

「JUnitに慣れておけ」と言った当事者に質問しろ
860デフォルトの名無しさん:2008/06/05(木) 18:45:34
つまり名目的なJUnitのパターンを研究すれば回避の道が開けるかもしれないわけか
861デフォルトの名無しさん:2008/06/05(木) 19:50:54
Cactus や HttpUnit は、めんどくさいだけで
あまり意味がないと思うのが本音。

テストケースを通すばかりのクラスになり、画面を見れば一目瞭然の問題の
エラー、あるいは仕様的にグレーだけど明らかに改善したほうがいい問題
に気がつかないことが多い。
テストケースの作り方が悪いのだろうけど。あと見た目の問題とか。

顧客に「テストの時間一杯取ったのに、こんなのにも気づかなかったの?」と怒られる。

うちのチーム(Webアプリ)は、Unit テストは Serviceクラス、Utility クラス、DAO まで。
UI レイヤ(Struts だったら、Actionクラス、ActionForm、jsp)は、Excel でテスト仕様書起こして
手でやっている。

ケントベックの言う、「いつでも、再帰的にテストをできるようにする」はUIレイヤでは実現できてないけど、
このやり方が、かけるコストと、目的に対する効果が一番バランスが取れていると思っている。

テストクラスの実装にいつも時間がかかるのをどうにかしたいと思っていて、
slenium とか fitness という単語は知っているのだけど、まだ試してみてない。

というわけでみなさんどうしてますか?

862デフォルトの名無しさん:2008/06/05(木) 21:44:52
ほぼ>861と同様だけど、DAOは検索系しかやらんな。
S2Daoなり使っていると特に。
逆に画面系は入力チェック系だけはHttpUnitとか使う
863デフォルトの名無しさん:2008/06/05(木) 22:24:21
>>861
一番面倒くさいのはCactusだな。

そんでみんなしてMockObject使って
HttpServletResponseとHttpServletRequestオブジェクトを偽装して
Servletのテストしているんだよな。
864デフォルトの名無しさん:2008/06/05(木) 22:28:04
>>861
Seleniumでググってみたら
これはなかなか使い勝手がよさそうだ
865デフォルトの名無しさん:2008/06/05(木) 22:37:29
あんこ1
あんこ2

あんこ3
あんこ4


あんこ5
あんこ6

あんこ7

このようなテキスト構成のときに
以下のように、改行が2つ続くとき改行したいのですが
どのような制御をすればよいでしょうか

あんこ1、あんこ2、あんこ3、あんこ4
あんこ5、あんこ6、あんこ7
866デフォルトの名無しさん:2008/06/05(木) 22:52:48
テキストはファイルからか?
readLineで空文字だったらフラグを立てる
次も殻文字だったら改行する
ってループではどうかね
867デフォルトの名無しさん:2008/06/05(木) 23:55:37
>>865
とりあえず、マルチポストはやめとけ
868デフォルトの名無しさん:2008/06/06(金) 00:35:42
あんこってなんだ?
うんこのオマージュか?
869デフォルトの名無しさん:2008/06/06(金) 02:51:18
マルチ氏ね
870デフォルトの名無しさん:2008/06/06(金) 07:14:34
はわわー
871デフォルトの名無しさん:2008/06/06(金) 12:56:12
基礎的な質問で申し訳ないのですが
HTTPURLConnectionのtimeout,wait,retryの上手なやり方が有ったら教えていただけ無いでしょうか
TimeoutExceptionを活用すべきなのかどうかも分からない素人です
どうかお願いします
872デフォルトの名無しさん:2008/06/06(金) 13:12:56
まずTCP/IPとHTTPを学んで来い話はそれからだ
873デフォルトの名無しさん:2008/06/06(金) 13:48:52
あるjavaアプリがあって、一連の処理がどのようなクラスのメソッドを実行してきたかをダンプしたいと思っています。
Linuxでいうところのstrace見たいなものです。
プロファイルというものを知りましたが、使用されてメソッドのサマリの表示だけで、
呼び出し順番がわかりません。
実行した順番に呼ばれたメソッドをダンプできる方法はありますでしょうか。
874デフォルトの名無しさん:2008/06/06(金) 13:54:14
872
分からないなら無駄な返答は不要です
875デフォルトの名無しさん:2008/06/06(金) 13:59:24
>>872
Thread.currentThread().getStackTrace() を使う。
あとはデバッガで起動するとか。
876875:2008/06/06(金) 13:59:52
失敗。>>873 ね。
877871:2008/06/06(金) 14:14:13
あさっての答えが返ってきたかと思ってびっくりしたよ
気をつけてね
878デフォルトの名無しさん:2008/06/06(金) 14:23:23
Java "execution trace"
みたいな話じゃないの。
879デフォルトの名無しさん:2008/06/06(金) 15:41:03
JavaでWinのexplorerみたいなのを作りたいのですが、
どうしたら実装出来るでしょうか?
左の方はJTreeで頑張れば出来そうなのですが、
右の選択したディレクトリの中身が表示される部分がよく分からないです。
880デフォルトの名無しさん:2008/06/06(金) 15:44:44
JListでいいんじゃ?
881デフォルトの名無しさん:2008/06/06(金) 15:50:28
>>875
それは可能なのですが、ダンプをしたいまま差にそのときの、になってしまいます。
一連の処理(時間)の間に呼ばれたメソッドの履歴が取得したいです。
詳しくは解かりませんが、下記のページで実行結果からシーケンス図を作成しています。
イメージとしては、これのメソッドリストがほしい感じです。

AA.aa()
BB.aa()
AA.bb()
882デフォルトの名無しさん:2008/06/06(金) 17:39:39
eclipse に ajdt というプラグインを入れて、
AspectJ というのを使って関数の前後でログ出力をするようにしてみたのですが、
eclipse でデバッグするのがやりづらくなりました。

ブレークポイントをはりつけても目的の処理でブレークするのが
うまく出来なくて困っています。

AspectJ を使ってもデバッグしやすい方法があったら教えてください。
883デフォルトの名無しさん:2008/06/06(金) 20:51:32
>>881
デバッガに詳細トレースログを取る機能が無いか確認。
無いなら JPDA 使って自分でデバッガを作る。
884デフォルトの名無しさん:2008/06/07(土) 17:16:33
OpenJDK って Sun の JDK の代わりとして充分使える?
885デフォルトの名無しさん:2008/06/07(土) 20:16:22
886デフォルトの名無しさん:2008/06/07(土) 20:42:09
javaのGuiにおけるレイアウトがさっぱりで全然やりたいレイアウトに出来ないので質問させてくださいorz


画面を縦三分割にしたいのですが、それぞれ等隔ではなく真ん中は広く、
またそれぞれの横幅を縮めたり伸ばしたりするレイアウトにしたいのですが
こういうのってどうしたら出来るのでしょうか?
887デフォルトの名無しさん:2008/06/07(土) 21:10:25
真ん中は引き延ばすってこと?
それならBorderLayoutでも十分そうだけど・・・
手打ちならGridBagLayoutとかSpringLayout使えばかなりのレイアウトは実現できるよ。
888デフォルトの名無しさん:2008/06/07(土) 21:34:42
それは、レイアウトじゃなくてコンポーネントじゃないか?
889デフォルトの名無しさん:2008/06/07(土) 21:45:03
>>887
レスありがとうございます。
そうです、幅は1:3:1くらいで真ん中だけ大きくしたくて、
かつブラウザのサイドバーみたいに横幅を調整出来るようにしたいのです。
GridBagLayout、難しそうだけどググりながらちょっとやってみます。

>>888
すいません、正直どういう意味か分からないですorz
890デフォルトの名無しさん:2008/06/08(日) 00:45:31
境界をつまんでサイズ調整できるやつはJSplitPaneな。
891デフォルトの名無しさん:2008/06/08(日) 02:26:34
>>890
ありがとうございます!!
頭悪すぎてこんな時間までかかってしまいましたがなんとか出来ました!

しかしJavaはC/C++に比べて簡単にGui部品が使えるのに、
レイアウトだけは非常にやっかいですね…。
892デフォルトの名無しさん:2008/06/08(日) 02:38:36
レイアウトの簡易さはC#にかなわないなJavaは
893デフォルトの名無しさん:2008/06/08(日) 02:53:33
C#に限ったことではないが、固定配置+Dock/Anchor方式は
直感的に自由度の高いレイアウトが出来るからな
894デフォルトの名無しさん:2008/06/08(日) 04:49:43
しかし一度は位置したコンポーネントを動的に動かしたりは出来ない。
895デフォルトの名無しさん:2008/06/08(日) 06:19:46
NetBeans6のレイアウト機能はほぼ直感的にレイアウトできるようになっている
896デフォルトの名無しさん:2008/06/08(日) 09:14:21
ま、レイアウトは言語そのものの問題じゃないから。
897デフォルトの名無しさん:2008/06/08(日) 10:05:09
一度配置?
898デフォルトの名無しさん:2008/06/08(日) 11:58:01
C#というか.NETも、Swingのような窓サイズに合わせた動的配置のコンポーネントが用意されたよ。Ver.2.0くらいから。
しかしあまり使われていないようだ。
899デフォルトの名無しさん:2008/06/08(日) 22:18:36
javaじゃ動的レイアウトがあたりまえだからなぁ。
900デフォルトの名無しさん:2008/06/09(月) 01:46:45
C#はあくまでもjavaの模造品の域を超えてないからなあ
Cの方は次に期待だよな
901デフォルトの名無しさん:2008/06/09(月) 02:05:54
X-WindowsやTKをベースに考えるなら動的レイアウトなのは自然だよね。
WindowsFormのDockプロパティはオマケみたいなもので、
動的レイアウトはWPFで全面採用になってる。
ただ動的レイアウトはポトペタ系のツールが作りづらいのが難点。
902デフォルトの名無しさん:2008/06/09(月) 02:47:39
それで最終的にはCUIに仕上がるんですね。わかります。
903デフォルトの名無しさん:2008/06/09(月) 11:16:33
cは廃れるだろうね
904デフォルトの名無しさん:2008/06/09(月) 12:23:20
X-Windowsにはつっこんでいいの?
905デフォルトの名無しさん:2008/06/09(月) 13:00:21
sのあるなしだけだったらつまらないからほってたほうが
他にあるならどぞ

CはC++と互換の無いC99はいらない
906デフォルトの名無しさん:2008/06/09(月) 14:24:58
あるTextFieldに入力するとタイプ毎に任意のJLabelにその文字に
規定の変換がされたものを表示されていくプログラムを作ろうと思ったのですが、
何故かタイプとラベルに表示される文字に時間差があります。

具体的にはこういうコードを書くと、

public void keyTyped(KeyEvent e) {
System.out.println("タイプされた文字:"+e.getKeyChar());
System.out.println("表示文字:"+example.getText());
exlabel.setText(example.getText());
}

出力はこうなります。

タイプされた文字:a
表示文字:
タイプされた文字:b
表示文字:a
タイプされた文字:c
表示文字:ab
タイプされた文字:d
表示文字:abc

これってどうしてなのでしょうか?
907デフォルトの名無しさん:2008/06/09(月) 14:53:41
>>906
keyTyped()が呼ばれたときには、まだexampleへのキー入力処理が実行さ
れていないから。
908デフォルトの名無しさん:2008/06/09(月) 15:57:20
うむ
909デフォルトの名無しさん:2008/06/09(月) 17:07:45
>>907
なるほど、タイプ→フィールドに追加だからですね。
意識したことがなかったので気づきませんでした。
exlabel.setText(example.getText()+e.getKeyChar());
これでいけました、ありがとうございます。
910デフォルトの名無しさん:2008/06/09(月) 17:57:49
>>909
「文字」と「文字列」を区別したほうがいいと思うけど、それはともかく
DocumentListener
というものはご存知かな
911デフォルトの名無しさん:2008/06/09(月) 18:07:37
Javaのjava.util.regex.Patternの動作について質問です。
正規表現に文字クラス"[a-z0-9&&[3-8]c-h]"を与えたところ、
この文字クラスにマッチする文字は 'c'、'd'、'e'、'f'、'g'、'h'の6字になるんです。
これってどういう仕様なのでしょうか?
以下は、マッチする文字を表示するサンプルです。参考に他の文字クラスも表示していますが
"[a-z0-9&&[3-8]c-h]"を渡した場合の挙動だけが、なぜそうなるのか良くわからないのです。
-----
import java.util.regex.Pattern;
public class RegexTest {
public static void main(String[] args) {
printMatchingChars("[a-z0-9&&[3-8]c-h]");
printMatchingChars("[a-z0-9&&[3-8][c-h]]");
printMatchingChars("[a-z0-9&&[3-8]&&[c-h]]");
}
private static void printMatchingChars(String regex) {
Pattern p = Pattern.compile(regex);
StringBuilder buf = new StringBuilder();
for (int cp = 0; cp < Character.MAX_CODE_POINT; cp++) {
if (p.matcher(new String(Character.toChars(cp))).matches()) {
buf.append((char) cp);
}
}
System.out.println(regex + ":" + buf + ':');
}
}
-----
出力結果
[a-z0-9&&[3-8]c-h]:cdefgh:
[a-z0-9&&[3-8][c-h]]:345678cdefgh:
[a-z0-9&&[3-8]&&[c-h]]::
P.S.代理レスでの書き込みなので、返信が遅れるかもしれません。
912デフォルトの名無しさん:2008/06/09(月) 18:54:29
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/regex/Pattern.html
>文字クラス
>[abc] a、b、または c (単純クラス)
>[^abc] a、b、c 以外の文字 (否定)
>[a-zA-Z] a 〜 z または A 〜 Z (範囲)
>[a-d[m-p]] a 〜 d、または m 〜 p:[a-dm-p] (結合)
>[a-z&&[def]] d、e、f (交差)
>[a-z&&[^bc]] b と c を除く a 〜 z:[ad-z] (減算)
>[a-z&&[^m-p]] m 〜 p を除く a 〜 z:[a-lq-z] (減算)

> 文字クラス演算子は、次の順で優先順位が高くなります。
> 1 リテラルエスケープ \x
> 2 グループ化 [...]
> 3 Range a-z
> 4 論理和 [a-e][i-u]
> 5 論理積 [a-z&&[aeiou]]

これを見る限り、
[α-ω[...]]
はともかく、
[[...]α-ω]
の形がどうなるのかは書かれていない(=例外でもおかしくない?)ように見えるけど、どう?

>正規表現構文の動作の詳細については、『Mastering Regular Expressions, 2nd Edition』
> (Jeffrey E. F. Friedl 著、O'Reilly and Associates、2002 年) を参照してください。

だそーですが
913デフォルトの名無しさん:2008/06/09(月) 19:38:14
>>911-912 BUG-BUG-SunMicro に報告、、ってどうやるの?
914デフォルトの名無しさん:2008/06/09(月) 20:38:32
>>911
とりあえず現象だけ見ると、
[a-h0-8&&[3-9]c-z]
[a-h0-8&&[あ-ん]c-z]
[a-h0-8&&[3-9][あ-ん]c-z]
[a-h0-8&&c-z]
は、同じく
[c-h]
と等価になっちゃうっぽいね
915デフォルトの名無しさん:2008/06/09(月) 20:57:52
>>912-914さん、返信ありがとうございます。
>>914さん、
&&の前の文字セットと、&&の後ろの定義済みあるいは[]で閉じられていない文字セットを論理積してるみたいですね。
&&の前後の文字セットの結果は無視されているような。

そして否定が付くと、(ますます良くわからないのですが)

[a-zあ-ん&&[3-8]c-h]:cdefgh:
[^a-zあ-ん&&[3-8]c-h]:: (何もマッチしない)

となります。
こんな面倒な構文使わなければいいと思われると思いますが、
正規表現からそれにマッチするランダムな文字列を生成するクラスを作っていまして
生成した文字がPatternで必ずマッチするようにしたいのです。
916デフォルトの名無しさん:2008/06/09(月) 20:58:02
[a-h0-8&&[c-z]]
この基本形を入れとくべきか
917デフォルトの名無しさん:2008/06/09(月) 21:08:45
>>915
「ちゃんと例外をスローしてもらわないとなあ」というのが私の感想ですがw
918913:2008/06/09(月) 21:51:26
[^a-z&&[3-8]c-h]
[[^a-z]&&[3-8]c-h] 否定は問題ない
919デフォルトの名無しさん:2008/06/10(火) 02:57:34
>>912
そのオライリーの本、
「正規表現 第二版」のことだよね。

ちゃんと日本語訳された本があるからそっち紹介してもいいんじゃないかと

920デフォルトの名無しさん:2008/06/10(火) 09:48:31
[...][...]&&[...]&&[...][...]&&[...][...]&&[...]&&[...]
[...[...]]&&[...]&&[...[...]]&&[...[...]]&&[...]&&[...]
[...[...]]&&[...&&[...[...]&&[...[...]&&[...&&[...]]]]]

[...][...]&&[...]&&[...][...]&&[...][...]&&[...]&&[...]
[[...]...]&&[...]&&[[...]...]&&[[...]...]&&[...]&&[...]
[[[[[[...]...]&&...]&&[...]...]&&[...]...]&&...]&&[...]
921デフォルトの名無しさん:2008/06/10(火) 17:20:25
>>912
正規表現 第3版 出てる。
922デフォルトの名無しさん:2008/06/10(火) 19:59:46
そういえばそうだったあね
923デフォルトの名無しさん:2008/06/11(水) 17:44:49
スレ違いかもしれませんが、JAVAのことで質問です。

JAVAを使える無料レンサバは何故少ない(というか無い)
んでしょうか?
924デフォルトの名無しさん:2008/06/11(水) 17:50:27
Perlではなくて?
925923:2008/06/11(水) 17:57:15
>>924
はい、JAVA(できればstruts)で作ったWEBアプリをレンサバ
で動かそうにも無料のがなく、有料だと高くて…。

確かにPerlもみかけませんよね。phpはどこでも使えるのに・・・ orz
926デフォルトの名無しさん:2008/06/11(水) 18:15:47
>>925
無料では見たことがないな。
927デフォルトの名無しさん:2008/06/11(水) 18:22:02
自分でサーバーたてちまえ
928デフォルトの名無しさん:2008/06/11(水) 18:22:44
ただで鯖使おうって根性が間違ってる。
929デフォルトの名無しさん:2008/06/11(水) 18:27:48
そんなに大変じゃないだろ
930デフォルトの名無しさん:2008/06/11(水) 18:58:12
>>926-929
そうですね、やっぱり自鯖をたててみます。
レス有難う御座いました。
931デフォルトの名無しさん:2008/06/11(水) 19:03:33
サーブレットとかってwww鯖の申請通ればあとはアパッチとかの設定だけだしな。
932デフォルトの名無しさん:2008/06/11(水) 19:15:03
>有料だと高くて…
Tomcatでいいんだろ?月500円でも高いのか?
http://www.easytone.jp/
無料なのがないのはJavaだと自由度が高すぎてセキュリティに問題が起きる可能性が高いからだと思うけどな?
それにJavaはphpなどに比べれば難しいから需要も少ないってこともあるだろうなあ?
933デフォルトの名無しさん:2008/06/11(水) 19:22:10
質問です

public void paint(Graphics g) {
g.drawImage();
}

上記の場合、アプレットだと public void paint(Graphics g)のgの部分はブラウザから
受け取るとあるのですが、アプリケーションの場合、オブジェクトのgはどこで作られるのでしょうか?
自分でオブジェクトgを作らなくても動くのですがどうしてでしょう?

 
934デフォルトの名無しさん:2008/06/11(水) 19:28:23
>>932
金払ってるのに何のセキュリティが問題になるんだよwアホかおまえは
935デフォルトの名無しさん:2008/06/11(水) 19:31:34
別に鯖缶に文句は無いけど、客を選んでるようじゃそのうち縮小していって、淘汰されるだろうよ
936デフォルトの名無しさん:2008/06/11(水) 19:36:57
>>934
無料の場合の話だろ(wアホはおまえじゃ(w
937デフォルトの名無しさん:2008/06/11(水) 19:37:45
>>933
ブラウザっていうか,sunの中の人がGraphicsオブジェクトを作って
それを引数に指定してpaintを呼び出すようなコードを書いてて,裏ではそれが動いてる
アプリケーションも一緒
938デフォルトの名無しさん:2008/06/11(水) 19:40:05
>>932
あ、こんな安いレンサバあるんですね。
なるほど、ありがとうございます。
939デフォルトの名無しさん:2008/06/11(水) 19:43:50
>>938
使ったことはないんでいいかどうかはわからないよ。
無料10日間お試しコースってのがあるから試してみたら?
940デフォルトの名無しさん:2008/06/11(水) 19:46:26
JTreeのTreeWillExpansionListenerを使い展開時に
DefaultMutableTreeNode型のインスタンスからそのノードに至るまでの
ルートからのパスを取得したいのですが、どうやったら良いのでしょうか?
941デフォルトの名無しさん:2008/06/11(水) 19:52:31
>>937
paintを呼び出す時に自動的に、Grapnicsオブジェクトが作られる
という事でしょうか?
942デフォルトの名無しさん:2008/06/11(水) 19:57:15
>>936
セキュリティが問題になるとかいいのがれじゃん。無料とか言って話しをそらすなw
943デフォルトの名無しさん:2008/06/11(水) 20:02:08
JSpinner で

普段は浮動少数(double)

〜〜dB(デシベル) と手打ちした時は
自動で対応する値に変換
(6dB -> 2、20dB -> 10)

というのをやりたいのですが、どんな感じで実装するのがスマートなんでしょうか?
944デフォルトの名無しさん:2008/06/11(水) 20:07:46
>>941
違う
中の人が作って呼んでる
945デフォルトの名無しさん:2008/06/11(水) 20:33:51
>>933
>自分でオブジェクトgを作らなくても動くのですがどうしてでしょう?

初心者的にはまあごもっともな疑問だと思う。ちょっとかみ砕いてみる。

「paintメソッドを作る」ということは、
「もし「ここに自分の姿を描いてね」と言われたらこう描く(こう対応する)、と決める」ということ。
何をどう描くかは決められるけど、何に描くべきかは外から指定される。

「paintメソッドを呼ぶ」ということは、
「「ここ(=Graphicsオブジェクト)に自分の姿を描いてね」と頼む」ということ。
どういう絵ができるかは相手次第だけど、「描く場所」はちゃんと用意してから注文する。

ふつうは、アプレットとは別に画面作りの本部(中の人)みたいなのが動いていて、
必要なときに(paint/updateを呼ぶ前に)Graphicsオブジェクトを用意する、
と考えていればいいと思う。

それ以外にも、画像に描画するGraphicsオブジェクトを生成してpaintに渡せば、
その時の表示内容を画像にできたり、というような使い方もできる。
946デフォルトの名無しさん:2008/06/11(水) 20:36:56
>>940
JTreeの展開のどの部分のパスなのかしら?
947945:2008/06/11(水) 20:40:48
ごめん、読んでなかったw

>アプリケーションの場合は

かw
948デフォルトの名無しさん:2008/06/11(水) 20:57:47
>>945
文句は無いんだけど、もし君が学校か何かの講師ならイマイチ。
安物のJava教本を読んだほうがいいかな
949デフォルトの名無しさん:2008/06/11(水) 21:05:08
ageるな厨房
950デフォルトの名無しさん:2008/06/11(水) 21:10:47
>>946
すいません、C:\Program Files\Adobeとかいう階層があったら、
Adobeを開いた時にC:\Program Files\Adobeという絶対パスを取得してFileに渡したいという感じです。
一応ググったりしながら下のようにやってみたのですが、関数で既にそういうものが用意されていたりするでしょうか?
TreeNode paths[]=konode.get(i).getPath();
String path="";
for(int j=0;j<paths.length;j++)
path+=paths[j]+"\\";
951945:2008/06/11(水) 21:11:07
>>948
個人的にはイマイチ講師程度ならうれしいよw
952デフォルトの名無しさん:2008/06/11(水) 21:50:03
こういうアホ講師は得意げになっていって、後々面倒になるんだよね・・
953デフォルトの名無しさん:2008/06/11(水) 22:13:24
>>949
怒るとすぐこんなふうになるし、こいつは短気なんだろw
954デフォルトの名無しさん:2008/06/11(水) 22:28:56
>>950
JTreeが実際に何を象徴しているか、JVMは知らないんじゃないかしら?
955デフォルトの名無しさん:2008/06/11(水) 22:34:36
>>939
丁寧にdクス。
956デフォルトの名無しさん:2008/06/11(水) 23:03:20
>>940
TreeWillExpandListenerに渡されるTreeExpansionEventから引っ張れる、これ
http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/event/TreeExpansionEvent.html#getPath()
とは別のもの?
957933:2008/06/12(木) 06:07:03
ありがとう
958デフォルトの名無しさん:2008/06/12(木) 14:33:54
すいません、最近javaをはじめた者です。
buf[i+1]<<8|buf[i]&0xFF
これの"|"は何を意味しているのですか?
959デフォルトの名無しさん:2008/06/12(木) 14:36:55
論理和
960デフォルトの名無しさん:2008/06/12(木) 14:55:12
>>958
ビット単位のOR
961デフォルトの名無しさん:2008/06/12(木) 15:20:06
たぶんバグw
962デフォルトの名無しさん:2008/06/12(木) 15:39:46
jsp:invokeの意味が全然わからないんだが、
これって要するに他言語で言うeval?

jsp:doBodyとのちがいもわからん
963デフォルトの名無しさん:2008/06/12(木) 15:58:14
>>958
他のは分かるけど、ということ?なんか不自然な気が
964デフォルトの名無しさん:2008/06/12(木) 16:29:31
>>962
JSPはほとんど知らないけど、
http://java.sun.com/products/jsp/syntax/2.0/syntaxref2017.html <jsp:doBody>
http://java.sun.com/products/jsp/syntax/2.0/syntaxref2021.html <jsp:invoke>
このへんざっと見る限り、
・doBodyは、そのタグで囲まれた部分全体を(フツーのJSP文法で?)解釈して処理する
・invokeは、タグの中身に複数のfragment(attributeの一種らしい)があるような複雑な構成で、
 個々のfragmentを指名して、その内容をdoBody的に処理
みたいな感じ?とすれば「全部eval」と「一部eval」ということになるかもしれんね。
965デフォルトの名無しさん:2008/06/12(木) 17:28:58
会社の経費精算システムがjavaアプリで作られており、Windowsマシンで動いております。
作りが悪くて各項目ごとに、出発・到着・金額はいいとして、国や日本円とかをいちいち
入れなくてはならず、毎回入れる項目はだいたい同じなのでスクリプトで自動入力させたいのですが
javaアプリのフォームにデータを入れてボタンをクリックさせるツールとか方法は
あるのでしょうか?
vbscriptとか自動入力クリックツールとかはjavaアプリは全然動かすことができません。
966デフォルトの名無しさん:2008/06/12(木) 17:31:53
何の作りが悪いって?
967デフォルトの名無しさん:2008/06/12(木) 18:12:26
入力した整数を自動的に因数分解するプログラムを作るにはどうすればいいのでしょうか
968デフォルトの名無しさん:2008/06/12(木) 18:16:28
>>967 自分が手計算で因数分解するときの手順をそのままプログラムで書けば良い
969デフォルトの名無しさん:2008/06/12(木) 18:19:53
>>967
1は任意の整数xの約数であるから、x=1・xと因数分解できる。■

Java 素因数分解
でぐぐるとか?
970デフォルトの名無しさん:2008/06/12(木) 18:29:02
■は一体何の意味?
971デフォルトの名無しさん:2008/06/12(木) 18:31:17
>>968
>>969
すみません。もう少し勉強しなおしてきます。
972デフォルトの名無しさん:2008/06/12(木) 18:43:19
>>965
作った業者に改良を依頼したらいいと思うよ
973デフォルトの名無しさん:2008/06/12(木) 18:48:38
>>970
D.Q.N.(「父さんこのイモ何のイモ?」の略)
974デフォルトの名無しさん:2008/06/12(木) 18:49:35
int x = 9801;
java.util.Map<Integer, Integer> map = new java.util.TreeMap<Integer, Integer>();
int f = 2;
while (x >= f) if (x % f == 0) {x /= f; if (map.get(f) == null) map.put(f, 1); else map.put(f, map.get(f) + 1);} else f++;
System.out.println(map);
975デフォルトの名無しさん:2008/06/12(木) 19:04:54
整数xの約数
とあるけど、-23*1とか0*1でもいいのかな
君のプログラムはどういう仕様になってるの?
976デフォルトの名無しさん:2008/06/12(木) 21:54:56
>>967の問題が素因数分解であるなら、入力は正整数だから>>975は心配無用
アルゴリズムは基本的に>>974の方法で良いが、細かいことをいうと

y = ⌊√x⌋ とすると、
ループ継続条件は x > 1 かつ f ≤ y
(ループ終了時 x > 1 なら、その x が最後の素因数)
977デフォルトの名無しさん:2008/06/12(木) 23:20:23
>>962 >>964
jspは実行前にコンパイルされるはずだからevalというには語弊があるな。funcallとかapply?
978デフォルトの名無しさん:2008/06/13(金) 00:29:13
質問です。
JAVAで、指定したフォルダをエクスプローラで開くことは出来るでしょうか?
Windows以外で動作しなくても構いません

ひょっとしたらRuntimeやProcessで出来るかとも思ったのですが、
あれはexeやjarファイル等の起動しか出来ないようで……
979デフォルトの名無しさん:2008/06/13(金) 00:31:08
Windowsに限るならexplorer.exe使えばいいよ。
オプションはスレ違いなので調べてちょ。
980デフォルトの名無しさん:2008/06/13(金) 00:37:28
>>979
即答ありがとうございます
何とかなりそうです
981デフォルトの名無しさん:2008/06/13(金) 00:37:42
>>978
JDK6以降なら java.awt.Desktop#open(java.io.File) でも開けるっぽい。
982デフォルトの名無しさん:2008/06/13(金) 00:53:22
>>978
explorer C:\Program Files
みたいに引数つければRuntimeでいける。
983デフォルトの名無しさん:2008/06/13(金) 01:18:47
>>981
こんなのがあったのか……
JDKのバージョンにこだわりはないので、エクスプローラの引数指定よりこっちの方がスマートですね
色々試してみます。
回答ありがとうございました
984デフォルトの名無しさん:2008/06/13(金) 05:28:52
>>976
少し苦しいけど許してあげるよw
以後軽率な発言は控えるように
985デフォルトの名無しさん:2008/06/13(金) 07:56:30
y = ⌊√x⌋ ? y equal box root x box ♪
986デフォルトの名無しさん:2008/06/13(金) 08:44:23
floorか。
987デフォルトの名無しさん:2008/06/13(金) 15:10:50
>>923
昔Java BoFで無料でServletを公開できるサービスがあった。

あと、海外のサイトでも無料でServletやJSPをアップロードできるサービスがあった。
が、メモリを大量消費するServletでは扱いにくいのなんので
それに加えてデフォルト設定ではJSPファイルを更新するたびTomcatの再起動が必要と、
PHPと比べ不便な点が多かった。それでついにはサービスを中止してしまったそうだ。
ブラウザ上からTomcatの再起動ができるのは魅力的かと思ったが。
PHPのようにはいかないのさ。
かくユーザごとにTomcatをインストールし、各ユーザの数だけ
メモリを大量に増設しなければならんのだから。それにJSPコードをJavaに変換したソースコード
とコンパイルしたバイトコードを置くためのディスク容量を確保するためのHDD領域も余分に必要だ。

一人当たりメモリ10GB使うとしよう、
そのレンタルサーバに1000万人が登録して使用すると、
そのサーバに必要なメモリは10000000GB = 9765.6TB=9.5PB(9.5ペタバイト)にもなる。
とんでもない数字だ。これではサーバ運用コストが馬鹿にならない。
だからJAVAを使える無料レンサバは少ない。

その反面、PHPは非常に少ないメモリでプログラムを簡単に書けるのが売り。
Javaとはまったく正反対の言語だ。だからJavaアプリケーションサーバで
無料でレンタルしているところはほとんど無いに等しい。

どうしてもやりたかったら自前でサーバ構築するのが望ましい。
988デフォルトの名無しさん:2008/06/13(金) 15:19:24
2つのスレッドで、1つのコレクションクラスを操作したいと考えています。
1つは常に追加、1つは常に取り出し。
取り出し側は何かが追加されている状態のみ処理したく、
collection.get(0);の呼び出しで、他から追加されるまではブロックされるイメージを望んでいます。
自作で同期を取ればよいのですが、
データが登録されるまでブロックするコレクションクラスがあれば使いたいと思っています。

コレクションクラスにはこだわっていないので、近いものがあれば教えていただけないでしょうか。
JDK1.6です。
989デフォルトの名無しさん:2008/06/13(金) 15:23:10
>一人当たりメモリ10GB使うとしよう

こういうのを信じちゃう人は、頭おかしいんだろうなw
業者乙ところですか(笑い
990デフォルトの名無しさん:2008/06/13(金) 15:24:42
典型的なProducer-Consumerパターン
BlockingQueueインターフェースを実装したクラスを使う
991デフォルトの名無しさん:2008/06/13(金) 15:25:43
>>988
java.util.concurrent.LinkedBlockingQueue
992デフォルトの名無しさん:2008/06/13(金) 15:40:46
indexOf()のアルゴリズムはBM法のようなものですか?
参考になりそうなサイトがあったら教えてください。
993デフォルトの名無しさん:2008/06/13(金) 16:00:37
直接ソースを見るのが一番

・・・・・・というわけで斜め読みしてみたが
単純に頭から一つずつずらしているように見える
とても質素だ。まあ確認してみて
994デフォルトの名無しさん:2008/06/13(金) 16:05:03
>>993
すみません、どこで見ることができますか。
javaのフォルダ内を見てるのですが見付からなくて。
995デフォルトの名無しさん:2008/06/13(金) 16:18:48
次スレ立てるか
996デフォルトの名無しさん:2008/06/13(金) 16:23:07
だめだった
997デフォルトの名無しさん:2008/06/13(金) 17:53:14

【初心者】Java質問・相談スレッド116【歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1213347130/
998デフォルトの名無しさん:2008/06/13(金) 17:55:54
うめ
999デフォルトの名無しさん:2008/06/13(金) 17:59:35
1000デフォルトの名無しさん:2008/06/13(金) 18:02:21
ふんがー
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。