【初心者】Java質問・相談スレッド115【歓迎】at TECH
【初心者】Java質問・相談スレッド115【歓迎】 - 暇つぶし2ch2:Javaが初心者
08/05/12 03:06:45
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

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


3:Javaが初心者
08/05/12 03:07:10
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 7
スレリンク(tech板)l50
■ SWT は --
Java 高速GUI SWT 3
スレリンク(tech板)l50

■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part16
スレリンク(tech板)l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 7
スレリンク(tech板)l50

■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 64 ★★
スレリンク(tech板)l50

**** 開発環境が必要の場合は ****
■ J2SE 1.4.0
URLリンク(sdc.sun.co.jp)
■ J2SE 5.0 (1.5.0)
URLリンク(java.sun.com)
■ Java SE 6
URLリンク(java.sun.com)

**** 実行環境だけが必要の場合は ****
■ Java ソフトウェアのダウンロード
URLリンク(www.java.com)

4:デフォルトの名無しさん
08/05/12 03:39:10
>>1


5:デフォルトの名無しさん
08/05/12 03:55:12
>>1
おつ


6:デフォルトの名無しさん
08/05/12 04:36:14
javaを勉強するなかで、私はまずjavaで簡単なゲームを作ることにしました。
アプレットを作る方法を勉強すればいいと思うのですが、
javaでできるのはアプリケーションとかサーブレットとかもあるがそれはしないつもりなのか?と突っ込まれました

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

いろんな本やサイト見ても、そもそもjavaで出来るのはこれこれで、それはこういうものだっていう説明は中々見つかりません
いきなりプログラムの書き方について(クラスとかメソッドとか)ってのが多くてこの疑問がなかなか解決しなくて困っています

7:デフォルトの名無しさん
08/05/12 05:08:40
JDKのドキュメント見てわからないなら何見ても一緒
Sunの米国サイトに行っても概要は分かるはず
jakartaなども覗いて見るといいだろう

8:デフォルトの名無しさん
08/05/12 10:29:10
>6 javaにはたくさんのクラス、メソッドがあり全てを覚えきって
使いこなすには今生では無理。java.utilパッケージを使いこなすのは必須事項だけど
javaで何がやりたいか?(サーブレット、アプレット,swing etc)を決めて
それのエキスパートになるのが良いと思うよ。

9:デフォルトの名無しさん
08/05/12 10:52:16
String[] allTokens = line.split(" ");
for (String token : allTokens)
この意味を教えてください。

10:デフォルトの名無しさん
08/05/12 11:11:42
age

11:デフォルトの名無しさん
08/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になります。

なぜでしょうか?

12:11
08/05/12 11:44:10
すいません、自己解決しました。
falseで合ってますね、失礼しました。

13:デフォルトの名無しさん
08/05/12 11:49:53
>>9
jdk5以降のjavadocの新機能の章、拡張for文のところを嫁

14:デフォルトの名無しさん
08/05/12 12:14:42
>>13
thx

15:デフォルトの名無しさん
08/05/12 14:29:49
>>6
ただ漫然とエキスパート目指してもその類の人間はごまんと居る
君のように何が出来るのかを考え大枠を作り出す能力こそが非常に重要


16:デフォルトの名無しさん
08/05/12 16:51:17
javaでUSBバスパワーのON/OFFや
電圧制御などはできますか?
USB扇風機をプログラムで制御できないものかと考えたのですが・・・

17:デフォルトの名無しさん
08/05/12 17:13:13
JavaUSB


18:デフォルトの名無しさん
08/05/12 17:40:55
>>17
kwsk

19:デフォルトの名無しさん
08/05/12 18:06:54
>>18
ぐぐれ

20:デフォルトの名無しさん
08/05/12 19:10:38
質問なんですがjavaにもMSDNライブラリみたいなサイトってあります?

21:デフォルトの名無しさん
08/05/12 20:03:27
sunのページが山ほどあるだろ

22:デフォルトの名無しさん
08/05/12 20:05:05
>>19
ありがとうございます。
色々検討してみます。


23:デフォルトの名無しさん
08/05/12 20:10:18
>>21
あ なるほど・・ありです!

24:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/12 20:23:25
何の回答?

26:24
08/05/12 20:30:28
>>25
すみません、言葉足らずのようでした。
どうしたら解決できるのでしょうか?
プログラムとしては間違っていないようなのですが・・

URLリンク(www.javadrive.jp)
こちらのサイトのサンプルプログラムでも同じようなエラーが出てしまいました。

27:デフォルトの名無しさん
08/05/12 20:44:53
正常に動くようだけど?ただし不等号が逆

28:デフォルトの名無しさん
08/05/12 20:46:46
java.util.Scanner
Since:
1.5

29:24
08/05/12 20:50:28
>>27
気付きませんでした。ありがとうございます。

>>28
今使ってるのが1.4.2でした・・・。
新しいバージョンのでやり直してみます。ありがとうございます。


30:デフォルトの名無しさん
08/05/12 21:33:21
質問です

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

また無かったら、どの様にして終端を判断するのか教えてください

31:デフォルトの名無しさん
08/05/12 21:39:29
size()


32:デフォルトの名無しさん
08/05/12 21:43:35
ArrayListの長さならsize()
Stringの長さならlength()





33:デフォルトの名無しさん
08/05/12 21:55:13
>>31-32
ありがとうございます

34:デフォルトの名無しさん
08/05/13 00:18:55
javaを勉強してる学生です。
win+ECLIPSEでやってるのですが、ECLIPSEがちょっと重たい。
いいツールないですか?オススメあったら教えてください。

私、普段macなんですが、macでjavaを勉強しようと思ったらどういう環境がいいですかね?やっぱりECLIPSEですか?OS10.5です。

35:デフォルトの名無しさん
08/05/13 00:24:47
vim + Makefile は軽いよ! 当然ながら。

36:デフォルトの名無しさん
08/05/13 00:54:31
>>34
個人的な意見だが、MacOSXのSWTはやたら遅いので、
MacでやるならNetBeansのほうがサクサク動いてお勧め。

37:デフォルトの名無しさん
08/05/13 01:17:39
>>35,36
vimは先生が使うなって言ってたんです。
なんでかわかりませんが。

MacだとNetBeansですか。。
ちょっとチャレンジしてみます!

38:デフォルトの名無しさん
08/05/13 01:21:57
vim 使いの俺に対する挑戦か・・・その先生はw
まあ、初心者には敷居高いわな。

39:デフォルトの名無しさん
08/05/13 01:24:26
>>38

にゃはは。敷居が高いって言ってました。うちの先生。
NetBeansでいろいろしてからvimにチャレンジしてみます!

40:デフォルトの名無しさん
08/05/13 01:45:06
プログラムでも何でもないんだけど
良いスレ見つからなかったので
簡単な質問させて下さい。

私はローテクアニオタゲーマーでブロック崩しとか
好きなんですけど、JAVAのブロック崩しって
マウス操作がおもくそ引っ掛かりませんか?
ノートだろうがハイスペックデスクトップだろうが
同じような頻度で同じように引っ掛かって
ちゃんと操作してるのにカーソルが動かなくて
玉をロストってのがめっさムカつきます。
これってJAVAゲーの仕様なんですか?
どうしようもないことなんですか?
それ以外は作り手さんが色々な工夫を
し易いみたいで面白いんですが、アレだけは
本当に嫌なんです。どうにかなりませんか?

41:デフォルトの名無しさん
08/05/13 02:08:06
>>40
板違い
ここはプログラミングするひとの板です
そのゲームプログラムを>>40が改造してもっとよくしたいとかなら
>>40が作成したソースを示すことで相談に乗れる人もいるでしょう

42:デフォルトの名無しさん
08/05/13 02:34:37
作り手の質の問題だよね
そんなひどい品質のゲームを出すこと自体センスを疑う

43:デフォルトの名無しさん
08/05/13 04:48:09
Integerの配列のデータをintの配列のデータに入れようとしたらエラーがでます。
(int)でIntegerの配列のデータをキャストしようとしたんですが無理でした。
なんで?

44:デフォルトの名無しさん
08/05/13 04:54:57
43です。
自己解決しました。
Integer-int変換なんだから自動で処理してほしいですね

45:デフォルトの名無しさん
08/05/13 06:15:08
>>44
Integer[] i = ...;
int[] j = ...;
j[0] = i[0];
みたいにIntegerとintの間ならauto-boxing, auto-unboxingしてくれるはずだが?
どんな代入を行おうとしたんだ?

46:デフォルトの名無しさん
08/05/13 06:19:35
使ってるのが1.4以下だったならこの言語仕様はないから真面目に変換を書かないとだめだが

47:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/13 07:33:13
JDK1.6入れろよ

49:デフォルトの名無しさん
08/05/13 16:11:23
>>47
>ぷらっとフォームを確認したら
PCショップか。

50:デフォルトの名無しさん
08/05/13 21:04:29
あれはぷらっとホーム

昔、営団がホームドアを導入したとき、Home Doorと英表記してたのを思い出した。


51:デフォルトの名無しさん
08/05/13 21:09:54
swingスレか迷ったのですが、
コマンドプロンプトを起動+コマンド入力→実行
をJavaプログラム内から行いたいのですが、こういうのは可能なのでしょうか?

52:デフォルトの名無しさん
08/05/13 21:20:05
Runtimeクラスを調べてごらーん

53:デフォルトの名無しさん
08/05/13 22:14:05
Web系の仕事をしてまもない若輩者です。

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

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

よろしくお願いします。

54:デフォルトの名無しさん
08/05/13 22:47:42
もしかしてResultSetってクエリの結果をオブジェクト内に保持しているんじゃなくて
getXxx()する度にDBに結果を取りに行ってるんですか?

55:デフォルトの名無しさん
08/05/13 22:54:58
1レコード取得するたびにRDBMのカーソルが動くと思っておけばいいんでない?


56:デフォルトの名無しさん
08/05/13 23:04:16
どうせでっかいがちがちのフレームワーク使うことになると思うよ。

57:デフォルトの名無しさん
08/05/13 23:04:50
>>53

58:53
08/05/13 23:08:17
>>57
なんですか!?なにかおかしかったですか??

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

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



59:デフォルトの名無しさん
08/05/13 23:11:55
>>53
お前にはまだ早いというのが上司の判断だろう

60:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/13 23:24:02
>>58
状況がよく分からんが・・・・・

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

一般論としてマルチスレッドプログラミングは、概念を理解した上で行わないと危険
しくじると簡単にデータの整合性を破壊したり、パフォーマンスを劣化させてしまう
おまけにバグが再現しにくいので修正も簡単じゃないことがある

62:デフォルトの名無しさん
08/05/13 23:26:04
単なる釣りだろ

63:デフォルトの名無しさん
08/05/13 23:26:34
まあJavaでWebならデフォでマルチスレッドだからな

64:デフォルトの名無しさん
08/05/13 23:33:53
サマータイムになったらどうすればいいの?おしえてちょ

65:デフォルトの名無しさん
08/05/13 23:40:51
何がしたいの?

66:デフォルトの名無しさん
08/05/13 23:55:28
質問です

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

調べてもAppletに関することばかりで困ってます

67:デフォルトの名無しさん
08/05/13 23:58:48
appletで出来るのなら
親をJFrameにすれば?

68:デフォルトの名無しさん
08/05/14 00:00:39
フレームにAppletを貼ったあとinitとstartを呼び出すのも忘れずに。

69:デフォルトの名無しさん
08/05/14 00:14:30
>>67
いえ
Appletでも出来ないんです


70:デフォルトの名無しさん
08/05/14 00:16:26
ということはここでアプリケーションに関する情報を得たとしても作れないってことだ
素直に宿題スレへ行け

71:デフォルトの名無しさん
08/05/14 00:25:08
申し訳ありませんでした
もう少し勉強してきます

72:デフォルトの名無しさん
08/05/14 00:26:03
>>69
で、どこまで調べた?

73:デフォルトの名無しさん
08/05/14 00:32:19
そういや>>68っていう手があったな。
アプレットなんてもう何年も使ってないから忘れてた。

74:51
08/05/14 00:44:12
>>52
すいません、寝ちゃって返事が遅くなってしまいました!><
ちゃんと引数まで付けて実行出来るとは、正にやりたかったことです!
おかげさまで非常に助かりました、本当にありがとうございます!!

75:デフォルトの名無しさん
08/05/14 00:58:52
ぐぐればすぐ出てきそうなもんだろうに…<<66

76:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/14 01:34:33
>>78
やってみました、
num = で、1~53までのランダム整数が永久ループで表示され続けます。
フラグ初期値falseがどんな数値でもtrueになってしまっているようで、
それでいてnnが加算されないのが永久ループの原因のようです。
うう、どうしてかわからない・・・。

80:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/14 01:44:02
>>80
すません、まだJAVAならいたてのど素人なので
そこらへんは・・・

(int)(Math.random(x + 1))で、0~Xまでの数値のランダムというのを
ネットで発見したのでそれを使ってやろうと考えています。

82:80
08/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)でいいじゃん

83:53
08/05/14 02:08:44
たびたびすみません。>>53です。みなさん、レスありがとうございました。

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

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

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

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

どうか、よろしくお願いします。

84:53
08/05/14 02:10:08
上司の物言いが軽かったので、真偽のほどをおしえてもらいたいんです。

すみませんが、軽く答えていただければいいのでよろしくお願いします。

85:デフォルトの名無しさん
08/05/14 02:15:59
その辺のめんどくさいことはアプリケーションサーバがやってくれるので、
意識しなくてよいはずです。
そのためのアプリケーションサーバですから。
せっかく本を買ったのなら、アプリケーションサーバのベンダの人達は、
こんなめんどくさいことやってるんだなあ、と考えながら読みましょう。

86:デフォルトの名無しさん
08/05/14 02:17:01
明示的に使う使わないに関わらずjava技術者ならスレッド全般の知識はあって当然
目先のことに囚われて勉強しなくていいやなんて思っているなら死んだ方がまし

87:53
08/05/14 02:26:06
>>85
まいど!やんなくていいですか。ありがとうございます。
せっかく買ったのでやってみようとおもいます。ありがとうございました。

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

みなさん、回答どうもありがとうございました。多謝です。

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


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

すいません、説明不足でした。表示する内容を右揃えする制約があったので、
substringを利用して右揃えをする部分ですこれ。

89:デフォルトの名無しさん
08/05/14 03:45:49

◆6月にマネージャパン、月刊アスキー、週刊アスキーの3誌が賞金総額2000万円の「シストレFXグランプリ」を開催
URLリンク(system-trading.jp)

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


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

▼賞金総額
■社長特別賞(シストレソフト買取価格) 10,000,000円
●シストレソフト部門賞 1位300万円 2位100万円 3位50万円
●トレード部門賞 1位300万円 2位100万円 3位50万円
●前期MVP賞 50万円
●後期MVP賞 50万円

90:デフォルトの名無しさん
08/05/14 05:35:57
すみません、別のプロジェクト内のクラスのインスタンスを作ることって可能なんでしょうか?
教科書にスタックの考え方を再現したJAVAプロジェクトと、前置記法のアルゴリズムを再現したJAVAプログラムがあり、
そのうち前置記法のプロジェクトが当然のようにスタックのプロジェクト内のクラスのインスタンスを作っているのですが。
エクリプス上でその部分に赤線が引かれており、実行してもエラーが出ます。
また、別のクラスを呼び出すために「Javaのビルド・パス>プロジェクト」と「プロジェクト参照」の設定」とやらも試してみたのですが、
そうすると赤線部分はなくなったのですが、実行しても何も起こりません。
前置記法のプログラムの最初にはimport java.io.*; とあるのですがそれが関係しているのでしょうか?


91:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/14 11:42:50
エラー

93:デフォルトの名無しさん
08/05/14 14:25:20
>>91
スタックトレース
例外が投げられた時点でどういうメソッドが呼ばれていたのかの情報
下の行のメソッドが上の行のメソッドを呼んでいることを表す
その場合は例外は一番上のjava.net.URLClassloader$1クラスのrunメソッドで投げられた

94:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/14 17:01:05
>>94
renameTo()を呼ぶ前に、file.getName()とnew File(args[0]+"/"+newfile).getName()
を表示して確認。



96:デフォルトの名無しさん
08/05/14 20:11:53
質問です。
左右マウスホイールって使えないんですかね?
(一般的にはチルトホイールという?)
少し調べたんですけど、全然出てこないですね。

97:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/14 21:09:43
>>97
たいていの場合はヘッダにデータ部の長さが入っているので、そのぶん
だけ読めばよろしい。

他、気になるところ:
・HTMLからのフォームPOSTでも、データがMIMEで送られることがあるので、データが1行とは限らない
・データがバイナリのこともあるので、基本的にReader類は使ってはダメ
・chunked-encodingのこともあるので、以下略


99:デフォルトの名無しさん
08/05/14 21:27:47
private InputStream is;
private InputStreamReader in;
これらを使って文字列を読んでるんですが、ファイルが終端に達したかを調べる方法ってありますか?


100:デフォルトの名無しさん
08/05/14 21:32:32
>>99
readメソッドの戻り値がー1

101:デフォルトの名無しさん
08/05/14 21:40:13
>>100
ありがとうございます

102:デフォルトの名無しさん
08/05/14 22:50:49
スレチかもしれませんが教えてください。
いまSQL Serverとjavaを繋げる勉強をしています。
INSERTした時間を後で取り出し
after()メソッドで比べたいのですが、そういった処理は可能ですか?
もし可能なら詳しく教えてください。


103:デフォルトの名無しさん
08/05/14 23:01:01
System.currentTimeMillis() または System.nanoTime()

104:デフォルトの名無しさん
08/05/15 00:19:56
ガベージコレクションは必要なくなったオブジェクトを自動的に開放してくださるそうですが、ストリームも自動開放してくれるのでしょうか?

また、どのタイミングでしてくれるのですか?

105:デフォルトの名無しさん
08/05/15 00:25:52
しません。

106:デフォルトの名無しさん
08/05/15 00:27:08
忘れてた。ファイナライザでクローズしちゃだめだよ

107:デフォルトの名無しさん
08/05/15 00:30:16
ストリームくらいちゃんと閉じろ、馬鹿者

108:デフォルトの名無しさん
08/05/15 00:33:55
void hoge() {
InputStream input = null;
try {
  // 略
} finally
  input.close();
  input = null;   // ←
}
}
これが必要か?って話ならばイラネ


109:デフォルトの名無しさん
08/05/15 05:30:00
無駄にnull突っ込むのはC#でもよく見かけるんだが、何でこんなに
流行しちゃったの?何か歴史的背景とかあんの?

110:デフォルトの名無しさん
08/05/15 08:45:43
>>103
ちょっと難しそうですけど、ありがとうございました。

111:デフォルトの名無しさん
08/05/15 09:38:05
>>109
nullを入れたほうがGCの取りこぼしが少ないとか、即座にGCされるから効率的だとか、そういう勝手な思い込みから

112:デフォルトの名無しさん
08/05/15 11:19:31
input.close();
input = null;
 System.gc();

しても実際3行目でメモリ解放するかはGCの実装依存なんだよね。

113:デフォルトの名無しさん
08/05/15 11:47:37
バグの原因になるからだよ
処理しないでそのまま流してしまうコードを書くおっちょこちょいが多すぎて
コンパイラがデフォでnullを入れてないコードをコンパイルするときにエラーをはくようになった



114:デフォルトの名無しさん
08/05/15 12:46:18
何言ってんだ?

115:デフォルトの名無しさん
08/05/15 14:52:45
public class A {
 public static void main(String args[]){
  static int i = 0; // int i = 0;ならエラーにならないのはなぜですか?

116:デフォルトの名無しさん
08/05/15 15:10:35
>>115
ローカル変数には static つけられないって言語仕様で決まってるから。

117:デフォルトの名無しさん
08/05/15 15:21:37
public class A {
 static int i = 0;
 public static void main(String args[]){
これならいいんですね。

118:デフォルトの名無しさん
08/05/15 17:27:21
>>117
それだとiはローカル変数ではなくなる。
staticはインスタンスでなくクラスに属する変数であるという意味だから、
クラスやインスタンス個別でなくスレッドごとに存在しているローカル変数に付けると
意味不明になってしまう。単に、>>115でstaticを外したように書けば、
ローカル変数iとして使えるし、コンパイルも通るはず。
それともクラス変数にしようとして書く場所を間違っただけ?

119:デフォルトの名無しさん
08/05/15 17:37:44
型の静的変換について質問です。
とあるObject型のobj、Sting型のstrがあるとして

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

以前やっていたCではペナルティがなかったと思うのですが、Javaだと「静的型変換に失敗した」という例外を投げてくれるようなので、おそらくなかでチェック機構が働いており、ペナルティがあるかなと思っているのですが

120:デフォルトの名無しさん
08/05/15 17:48:19
>>119
コードや実行環境によるとしか言えない。

例えばループ内で obj が再代入されないなら
JITコンパイラが String tmp = (String)obj; みたいなコードを
ループ外部に作成して、ループ内部では tmp.charAt(0) に変換、
みたいな事をする可能性はある。

121:デフォルトの名無しさん
08/05/15 17:49:55
>>119
あと、(String)obj は動的(実行時)型変換だよ。

静的(コンパイル時)型変換じゃない。

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

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

ありがとうございました。

123:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/15 18:17:38
>>123
int型が null になる事はない

125:デフォルトの名無しさん
08/05/15 18:21:49
>>124
そうですね。nullになりませんが、プリミティプの数値型は0で暗黙の初期化がされるらしいので
int i;
を書いてから、初期化を書かずに
if(i == 0){
を実行して真となることを確認したいのですが、そのようなソースは書けませんか?

126:デフォルトの名無しさん
08/05/15 18:23:40
>>125
ローカル変数は暗黙の初期化はされない。

127:デフォルトの名無しさん
08/05/15 18:24:46
>>125
書けません。
必ずローカル変数はその値を参照する前に初期化されていることが求められています。
そして、ローカル変数は初期化を省略した際のデフォルト値のようなものはないので、
自分で初期化しなければなりません。

128:デフォルトの名無しさん
08/05/15 18:27:37
>>125
int i;
と書いただけではiの値は確定していないので必ず初期化が必要。
iに値を代入するのがそんなに面倒?

129:デフォルトの名無しさん
08/05/15 18:29:52
public class A {
 static int i;
 public static void main(String args[]){
これならiは暗黙の初期化で0ですね。
ありがとうございました。

130:デフォルトの名無しさん
08/05/15 18:36:28
なにがやりたいのかわからん
ローカル変数とクラス変数では全然意味が違う
暗黙の初期化をしたいがためにローカルなものをフィールドに出したら
プログラムそのものの動作が変わってしまうだろ

131:デフォルトの名無しさん
08/05/15 19:15:37
暗黙の初期化なんて百害あって一利ぐらいだわ。
一般的なJavaプログラミングには必要ない。

むしろプリミティブ型の値範囲と精度に注目して欲しい。

132:デフォルトの名無しさん
08/05/15 19:58:21
なんか、Seasar2っていうのがいいらしい。

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

Seasar2っておもしろい??

133:デフォルトの名無しさん
08/05/15 20:13:25
まず働いて2000円の本位買える家計環境にしよう

134:132
08/05/15 20:50:48
>>133
働いています><; 一人暮らしでバイクのローンもあるから厳しいんです><;

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

Seasarのスレがあったのでみたら、閉店するそうなので
やめます><;

135:デフォルトの名無しさん
08/05/15 21:03:04
2,000円の本を買うのためらうくらいならネットで調べろ

136:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/15 21:15:23
なぜExceptionの詳細を書かないんでしょうか?
stacktraceくらい張ったらどうでしょうか?

138:デフォルトの名無しさん
08/05/15 22:24:48
>>136
ResultSet のカーソルは、初期状態では最初の行の前に位置付けられています。
メソッド next の最初の呼び出しによって、最初の行が現在の行になります。
2 番目の呼び出しによって 2 行目が現在の行になり、以降同様に続きます。

139:デフォルトの名無しさん
08/05/15 22:29:52
>>136
URLリンク(java.sun.com)
> A ResultSet object maintains a cursor pointing to its current row of data.
> Initially the cursor is positioned *before the first row*.

日本語版は誤訳だから気をつけろ


140:136
08/05/15 22:49:57
英語苦手なんでアレなんですが…

ResultSetのカーソル位置が最初0で、受け取ったデータは1から始まるって事でしょうか?

141:デフォルトの名無しさん
08/05/15 22:54:57
そう

142:デフォルトの名無しさん
08/05/15 23:02:39
把握しました。ありがとうございます。

<チラ裏>
言えない…ResultSetが単体のレコードを格納すると思ってたなんて言えない…
</チラ裏>

143:デフォルトの名無しさん
08/05/16 01:09:02
Cursorとかいう名前だったらよかったのにな。


144:デフォルトの名無しさん
08/05/16 08:31:41
>>140
可能です。
以上。
↓次の方どうぞ

145:デフォルトの名無しさん
08/05/16 08:35:28

質問です、文字列からColorクラスに変換することってできないでしょうか?つまり、
String colorname = "red";
のような色名を表す文字列を使って、setBackgroundやsetColorなどのメソッドの引数をつくる方法はないでしょうか?
色名を全部並べてif文とかで条件分岐をすればできるですが、それだととてもコードが長くなってしまうので・・・


146:デフォルトの名無しさん
08/05/16 08:38:52
>>145
java.awt.Color#getColor(String)

147:145
08/05/16 09:11:22
>>146
レスありがとうございます。やってみたのですが、たとえば
Color color;
color.getColor("red");
というふうにすると、コンパイルはできるのですが、ちゃんと色が出ませんでした。
redをblueやcyanに変えてみても、同じ黒っぽい色しか出ません。
どうしてなんでしょうか?



148:デフォルトの名無しさん
08/05/16 09:17:15
APIリファレンスすら読まないから。

149:145
08/05/16 09:29:15
一応読んではいるのですが・・・

150:デフォルトの名無しさん
08/05/16 10:16:27
質問です

2次元の配列データを、csvファイルにして(デスクトップなどに)出力したいのですが、どのような方法があるでしょうか。


151:デフォルトの名無しさん
08/05/16 10:29:14
自前でやるのが面倒なら commons-csv なりなんなり使え。

152:150
08/05/16 10:32:28
すみません、自前でできる方法をお願いします。

153:デフォルトの名無しさん
08/05/16 10:43:36
>>147
使い方としては、
Color color = Color.getColor("red");
だけど、ドキュメントを見るとシステムプロパティがどうとか書いてあっ
てよくわからんね。


154:デフォルトの名無しさん
08/05/16 10:49:05
>>152
自前でやるんなら、自分でCSV書き出すプログラム書くだけだよ。

155:デフォルトの名無しさん
08/05/16 11:40:26
>>152
for(data[] row : array){
for(data cell :row){
data.toString()と","をファイル出力
}}

156:デフォルトの名無しさん
08/05/16 12:41:17
>153
それはダメ。
その実体は new Color(int, int, int, int) の引数を結合した数値の文字列表現。
> 指定されたプロパティが見つからない場合、
> ***または整数値として解析できなかった場合***、null が返されます。

>145 の言う「名前から色」というのは、どこかで対応表を持つ必要があるから、
公開ライブラリには向かない、と私は思う。
要は、Map<String, Color> か何かで専門クラスを作りましょう、と。

157:デフォルトの名無しさん
08/05/16 12:45:53
>>145
javax.swing.txt.html.StyleSheet#stringToColor(String) とか?

158:デフォルトの名無しさん
08/05/16 12:47:53
>>155
改行してない。

159:デフォルトの名無しさん
08/05/16 18:00:57
アプレット初めて半年の初心者なんですが、
JToggleButton();で押下時のボタン色を変えるシンプルな方法はありますか?

メソッドをネットで検索しても見つかりませんでしたので、
JToggleButton();を継承して、オーバーライドしたクラスを作ったんですが、
ボタンのイベントの"actionPerformed()"が、使用されるアプリのほうが
自分より早く呼ばれてしまう為、旨くいきませんでした・・・

160:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/16 19:55:47
プログラミング初心者が最初に行き着く
プログラム言語のスレはココですか?

162:デフォルトの名無しさん
08/05/16 20:40:20
いえいえ、アッセンブラ~やCを長年経験した上での質問です・・・

163:デフォルトの名無しさん
08/05/16 22:35:26
若い女のプロ意識に脱帽編…

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

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

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

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

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

恐れ入りました。パチンコ屋のあの店員。

164:163
08/05/16 22:36:08
すまん。誤爆った。リロードされたら、プログラム板だった。すまそ。

165:デフォルトの名無しさん
08/05/16 22:39:49
クライアントの変更要求や追加要求に嫌な顔をして見せる奴は、パチ屋の
女性店員よりプロ意識が低いと言いたいわけですね?わかりますw

166:デフォルトの名無しさん
08/05/16 22:54:26
基礎からのJava
URLリンク(www.7andy.jp)

やさしく学ぶ Sun認定Javaプログラマ
URLリンク(www.7andy.jp)

この2つでどっちを買うか迷ってるんだけどどっちがオススメ?
もしくは他にオススメある?
一応研修でざっと習って「やさしいJAVA」ってのも貰った
基本をきっちり押さえつつも実践的な練習もできる本が欲しい
他のSUN認定の分厚いのや外人が書いた翻訳された本は見にく過ぎて無理だった
とりあえず逆引きの本は1冊買った
誰か助けて

167:デフォルトの名無しさん
08/05/16 23:12:15
>>166
「実践的な練習」がどのレベルを指してるのか分かんない。
1.実用的なプログラムを、とりあえず動くレベルで書けるようになりたい。
2.動けばいいレベルなら既に書けるから、より良いコーディングを学びたい。

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

もし2ならJavaの鉄則とJavaの格言は良い本だよ。読みやすいしね。


168:デフォルトの名無しさん
08/05/16 23:27:34
>>167
こんな時間にどうもありがとう!
明日その2冊を立ち読みしてみる

169:デフォルトの名無しさん
08/05/17 00:21:32
初歩的な質問ですみません
javaプログラミングをするのに優れたフリーのテキストエディターを教えて下さい。
できれば文字の色を変えてくれて、Tabで列を揃えてくれるやつがいいです。
OSはWindows XPです。
よろしくお願いします。

170:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/17 00:42:19
>>169
いくつもあるし相性があるって人もいるので、
ぐぐって出てきたのを使ってみれば?

あるいはEclipse、NetBeans等の統合開発環境とか
文法ミスを指摘してくれたり、デバッグ用の機能がそろってたりと何かと便利
大規模な開発にも耐えうるし、ひとつ持っておくのをお勧めする

172:デフォルトの名無しさん
08/05/17 00:48:44
>>171
なるほど、ありがとうございます。
早速ぐぐってみます。

173:デフォルトの名無しさん
08/05/17 01:17:27
>>168
Effective Javaがいいよ!

174:デフォルトの名無しさん
08/05/17 01:31:30
>>170
sync-List は、単にsynchronizedメソッドでラップされたインスタンスを提供してるだけ。
必要とされる同期化の手続きが、著しく改善されるわけではない。

iterator で返されるインスタンスは、ラップされたものとは違うので、
生成前に必要な手続きを行う必要がある。

175:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/17 02:24:22
>>145
Color c = (Color)Color.class.getField(colorname).get(null);

要try-catch

177:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/17 08:27:13
HTML(リンク)からJAVAサーブレットに情報を与えるにはどうすればいいのでしょうか。
リンク"A href=恐らくdoPostの値></A"で
データをJAVAサーブレットに送信したいのですが方法がわかりません。
リンクにdoPostの情報を与えるのもわかりませんがリンクからの情報をサーブレットに値を与えデータを返す方法もわかりません。

本にも載ってないのでどうすればいいかわかりません、教えて君になってしまいますがよろしくお願いします。

179:178
08/05/17 08:52:14
すみませんdoPostのところはdoGetです。

180:デフォルトの名無しさん
08/05/17 09:55:43
質問です。
現場のソースで、
List list = new ArrayList();と記述し、ArrayListのメソッドを
使っているソースを見かけたのですが、
ArrayList list = new ArrayList()とのメリット上での差異が分りません。
良い点があるから、List list = new ArrayList();と記述するのでしょうが、
その良い点が分りません。よろしくお願いします。
一応、sjc-p1.4の資格は持っていて、SJCPに合格するだけのインターフェースの知識は
あります。

181:デフォルトの名無しさん
08/05/17 10:01:33
どっちかというとHTMLの話になるわな。
そもそも、一覧から詳細にいくのに10個もパラメータいらんだろ?
なんかおかしな設計ではないのか?

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

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

POST/GETとFORMあたりがよく解っていないならば、まずはHTTPの勉強を汁。

182:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/17 10:12:13
あと、当然な話だけど、List list = new ArrayList();と書くよりもArrayList list = new ArrayList()と書くほうが、実装上の選択(メソッド)は増える。
極端な話、LinkedListなんて専用メソッドを活用しなきゃいらない子。

184:デフォルトの名無しさん
08/05/17 10:25:11
質問です。
swingでゲームを作ろうとして勉強しているものです

ゲーム中(ループ中)にJPanelを実装したクラスのコンストラクタでボタンを配置
別スレッドでループ処理する。このときアクティブレンダリングして描画命令
してるのですが、なぜかボタン隠れた状態で更新されてしまいます。
下にコードを書きますので、どなたかご教授ください

185:デフォルトの名無しさん
08/05/17 10:26:43
>>180
「選択肢があるなら、抽象データ型を使え」という指針がある
Listとおけば実装の詳細がより隠蔽される
例えば実装を交換したいという状況になっても、new ArrayList();の部分だけを取り替えてやればいい

・・・・一応、理論上はそういうことになってるようなのだが、
listのスコープが狭い場合はデメリットにしかならんような?使えるメソッド減るし

186:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/17 10:35:21
上記ソースを投稿したものです。
長くなりすみません。
どうもダブルバッファリングするとボタンがうまく配置しません。

paintComponentメソッドを使った描画処理ではうまくいきました。

192:デフォルトの名無しさん
08/05/17 10:51:46
>>180
trimToSize() も clone() も使う必要ない場合だと、5文字削れてラッキーとか。

メソッド境界以外では抽象型に拘る必要がないってのもわかるけど、
ArrayList と List にも拘るほど違いないから、ぶっちゃけどうでもいい。

193:デフォルトの名無しさん
08/05/17 11:23:53
自分でボタンを描画したいの?
それとも親(JPanel)にボタンを描画させたいの?

194:デフォルトの名無しさん
08/05/17 11:54:22
>>180
俺は、後でプロファイルを取ってListの実装を最適化する予定の時、よくそう書いておく

195:デフォルトの名無しさん
08/05/17 12:03:04
>>193

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

なのになぜか裏にいってしまうんだああああ!なぜだあああ!

196:デフォルトの名無しさん
08/05/17 12:31:26
dbImageのgraphicsを取得してJButtonのpaintに渡してdbImageにボタンを書き込む
dbImageを描画した後にrepaintして親を再描画させる
適当に考えてみたので見当違いだったらごめん

197:186
08/05/17 12:44:26
パネルにボタンを配置したあと
パネル上に描画処理をほどこすと、かぶるものなのでしょうか

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

うむうむ・・・・

198:デフォルトの名無しさん
08/05/17 12:47:16
ダブルバッファリングって書いてあるけど、バッファ1つだけじゃん……

199:186
08/05/17 13:07:34
>>188

描画する領域と、描画する前のサブ領域でダブルバッファリングでは?
参考サイトにはそうかいてあった

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

まぁ、いまどきは Window#createBufferStrategy() 使えば済む話だから
自前でダブルバッファリングする必要はあんましないはず。

201:デフォルトの名無しさん
08/05/17 14:25:11
JtextAreaに対して入力キー制限したいです
つまり、左右方向キーは入力を受け付けて上下方向キーは無視、のような
ただJtextAreaに直接KeyEentリスナーを加えてもダメみたいだたし
何かいい方法があればご教示下さい

202:201
08/05/17 14:26:47
言葉足らずだったので補足します

左右キーでカーソルを左右に移動、上下キーでは何も処理をいない、
というテキストアリアを実現したいと考えています

203:デフォルトの名無しさん
08/05/17 14:34:45
コンポーネントは描画されて表示している部品だから
その上から塗りつぶしたら見えなくなるよ

204:デフォルトの名無しさん
08/05/17 14:41:26
>>201
何が真っ先に呼ばれるんだろう
protected void processKeyEvent(KeyEvent e)かな・・・自信ない
上手くいったら報告プリーズ

205:186
08/05/17 14:49:13
>>203

ありがとうございます。
とすると、上のコードではどうなるのでしょうか
私も考えているのですがいまいち・・知識がたらず・・すみません

206:デフォルトの名無しさん
08/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)

207:206
08/05/17 14:57:03
間違って、送信してしまったorz
javaのプログラムをコンパイルしたいのですが・・・

URLリンク(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:デフォルトの名無しさん
08/05/17 14:59:46
gameRenderの
dbImage = createImage(WIDTH,HEIGHT);
以降で自身にaddされたコンポーネントを自分で描画する

209:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/17 15:08:49
>>204
本当ありがとう、processKeyEventメソッドを
オーバライドしてやったら上手くいったよ

昨日1日奮闘してダメだったことを30分で解決してくれるとは、、
もっと精進せねば

211:201
08/05/17 15:15:27
>>209
Keymapなんて使ったことなかったので勉強になります
この方法でも上手くいきました。ありがとうございます

212:186
08/05/17 15:41:54
>>208

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

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

一緒に描画というところがまだわかりません
自分で調べてみますが、よろしかったらご教授お願いします!

213:180
08/05/17 15:50:16
>>182,185
質問に答えていただいてありがとうございます。


214:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/17 16:21:52
>>214
全てのケースにおいて return するか例外投げるかしないとダメ。

具体的には rs.next() が true にならないケースと、
catch(Exception e) で例外捕捉したケースが漏れてる。
booleanの結果を戻すか、例外投げる必要がある。

216:デフォルトの名無しさん
08/05/17 16:31:00
>>214
SQLインジェクション

217:デフォルトの名無しさん
08/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);
}
とか。


218:214
08/05/17 16:44:04
>>215
あ、catchにもreturn書かないといけないんですね
なるほど!ありがとうございました!!

219:デフォルトの名無しさん
08/05/17 17:05:30
>>218
それはそれでマズイ

220:デフォルトの名無しさん
08/05/17 17:07:28
>>218
if (rs.next()) {
}
//ここじゃね?

221:214
08/05/17 17:40:53
>>218
マズいんでしょうか???

222:デフォルトの名無しさん
08/05/17 18:00:52
例外の握りつぶしでググレ

223:デフォルトの名無しさん
08/05/17 18:08:45
>>180
List list = new ArrayList();

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

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

これを、半端な知識のマと言ってしまうと、書き手は哀れw

224:デフォルトの名無しさん
08/05/17 18:44:13
>>223
無駄に短いスコープで抽象化するのは俺も反対だな
そもそもListに関して言えば、何も考えずにgetListとか作る方が問題となるわけで。

225:186
08/05/17 19:10:01
>>186 のコードのものです

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

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

gameRender内でaddで追加してもだめでした。
どなたかご教授お願いします

226:デフォルトの名無しさん
08/05/17 19:20:40
最初に具象クラスで書いておいて
「お、ここ、List で十分じゃん」と書き換えるのは抽象化って感じだけど、

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

そのような場合、生成部分は仕方ないけどそれ以外を
わざわざ List から ArrayList へ置き換えてやる必要があるのかどうか。
いくらスコープが狭くても面倒だし

227:デフォルトの名無しさん
08/05/17 19:21:18
eqlipseのページからEMF build 2.2.0が落とせない
どこか落とせるところ無いですか?

228:227
08/05/17 19:36:02
お騒がせしました、できました。

229:デフォルトの名無しさん
08/05/17 19:43:14
button.paint(dbg)

230:186
08/05/17 19:47:52
>>229

できました!
感激です!
スキです!

231:デフォルトの名無しさん
08/05/17 20:01:14
URLリンク(rg550.hp.infoseek.co.jp)

これをコンパイルしようとすると終盤でFigureTypeが見つけられないとでてしまいます
どこを修正・追加すればコンパイル可能になるでしょうか?

232:デフォルトの名無しさん
08/05/17 20:06:42
>>226
むしろ最初からListではなくArrayListで考えれば充分で、Listとして考える必要もないような気がする。

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

233:186
08/05/17 20:13:31
>>229

ボタン表示ができたのですが、ボタンとしての機能がなくなっていました!
コンストラクタでボタンをADDで貼り付けて、別スレッドでpaintで描画した結果、
addで貼り付けたボタンは結局うしろにいって、paintで描画したボタン(ボタンとしての機能なし)
が画面はじにでるだけでした!
こういうものなのでしょうか?

234:デフォルトの名無しさん
08/05/17 20:57:46
そりゃ下のコンポーネントにボタン置いてその上のコンポーネントにボタンのグラフィック描画しただけだから
クリックしたイベントが伝達されてないだけだと思う。
設計が悪い。

235:デフォルトの名無しさん
08/05/17 21:01:08
ボタンが押されたら押された状態を描画すればいい
バッファイメージを自分で作るってのはそういう事だよ。
ゲームなんだよね?
JButton使わずにパネル上のマウス位置とマウスイベントを拾ってボタンは画像にしたらどうだろう。

236:デフォルトの名無しさん
08/05/17 21:05:05
>>232
それは順序が逆だ。使う側が必要とするのは本来はListという概念を実現している何かであって、その実現手段は知ったこっちゃない。
しかし、Listの実体を生成するためには、具体的なモノを明示的に指定する必要があって、諸々の取捨選択の結果としてArrayListを用いることになるわけだ。
だから、ListでなくArrayListを型として用いるということは、利用側が必要としているのは「Listを実現した何か」ではなく「ArrayListという実装」である、という意志の表明になる。


237:デフォルトの名無しさん
08/05/17 21:06:41
>>232
まあ、どうでもいいんだけど

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

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

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


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

考えてみれば、仮引数とかに使うとかしなければ、そうそう必要ないねぇ。
でも、まあ、人間の頭の中では List を操作しているつもりなのに、
プログラムの中では操作している変数は ArrayList である
という剥離は気持ち悪い。プログラムは、人間が読むためのドキュメントであるべきなのだから。

238:デフォルトの名無しさん
08/05/17 21:45:36
>>236
その理論でいくならば、すべてのクラスにおいて具体的なモノとインターフェイスは別々に考えなければならないともとれる。
現実ではListとして考える≒ArrayList、諸所の取捨選択なんてほとんどない。

メソッド内とかクラス内で閉じるものに対して、「使う側」を意識するんか?
実体をつくるのも使うのも自分だろ。
そりゃ外部とのインターフェイスとしてはListが望ましいけどね。

239:デフォルトの名無しさん
08/05/17 22:24:21
まあどっちでもいいと思うのは確か
Listでも構わんし、ArrayListでも気持ち悪くもない。
>232も必要がないとしか言ってないわけでどっちでもいい的立場なんじゃね?

240:デフォルトの名無しさん
08/05/17 22:26:57
>>238
> その理論でいくならば、すべてのクラスにおいて具体的なモノとインターフェイスは別々に考えなければならないともとれる。
ある意味yes. 実装レベルでclassとinterfaceに分離するか否かは、モノの性質、作業工数、管理工数などを考慮して決めるけど。
あと、「使う側」って言うのは「List/ArrayListを使用しているコード」のこと。
それから、「表明」する主語は「コードを書いた人」で、「表明」している先は「そのコードを読むモノ(人だけじゃなくコンパイラも含む)」のこと。
つまり、List でなく ArrayList と書いたなら、そのソースコードを書いた人はそれを読むモノに対して、「ここでは (List ではなく) ArrayList である必要があるのだ」と主張しているのに等しい。

241:177
08/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タグにパラメータを埋め込めたら便利なんだけどなぁと思っているのですが…


242:177
08/05/17 22:47:30
hiddenのスペル間違えてる…お恥ずかしい…

243:デフォルトの名無しさん
08/05/17 22:54:05
>>241
行ごとにformを作るな、ページに1つでいいだろ

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

なんでもセッションに値を突っ込むのは奨励されないが、2画面以上遷移して値を保持しなければならない場合、セッションに積んだ方がいい。

244:デフォルトの名無しさん
08/05/17 23:04:57
Webサービスのライブラリって、axis2とJAX-WSのどっちがお勧め?

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

URLリンク(homepage2.nifty.com)
の「いろいろ問題」ってーのは具体的にどのあたりなんでしょ?

245:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/17 23:09:29
いがぴょんに聞けば良いじゃん。

ま、現状だと資料とか実装例とか豊富なaxis2でいいと思う。
チャレンジャーならばJAX-WS使ってみれば?

247:デフォルトの名無しさん
08/05/17 23:12:59
>245
問題は「当然、呼び側からは HashMap 型でアクセスしていた」ところ

248:244
08/05/17 23:19:44
>>246
おお、もうお返事がw
了解、さしあたりaxis2でもう少し掘り下げてみる。

いや、axis(1)のような、Wikipediaにまで載ってる明らかなダメがあるのかと思ってねw
>JAX-WS
URLリンク(ja.wikipedia.org)

249:245
08/05/17 23:20:49
>>247
その部品は、以下のようなメソッドが外部向けに定義されていた。

public Hashmap getMasterMap() { }

たしかにこのままでも、呼び側は Map map = HogeUtil.getMasterMap();
すればよかったんだけど、Javadoc に返却値の型が Hashmap と書かれていたので、
みんな Hashmap 型で取得していたよ。

250:デフォルトの名無しさん
08/05/17 23:25:23
ちげーよw
× public HashMap getMasterMap() { }
○ public Map getMasterMap() { }
あとHashMapだよ、Hashmapはないわ

251:デフォルトの名無しさん
08/05/17 23:27:28
>>244
xfire ( URLリンク(xfire.codehaus.org) )
あるいは、後継の
CXF ( URLリンク(cxf.apache.org) )

はどうだい?

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

まぁいまどきのデファクトという意味では、Axis2 でしょう。

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

検索条件は検索結果と詳細の間だけで持ちまわす物です。

253:デフォルトの名無しさん
08/05/17 23:42:34
普通は悩まない

254:170
08/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:デフォルトの名無しさん
08/05/17 23:51:14
やさしいJavaの本理解したら、会社で通用する?

256:デフォルトの名無しさん
08/05/17 23:51:46
>>252
JavaScript使って問題ないなら、
・必要なパラメータはhiddenで1組分だけ用意する。
・submitボタンは使わない。
・onClickハンドラで、hiddenのパラメータを書き換えてsubmit。


257:デフォルトの名無しさん
08/05/17 23:52:16
やさしいJavaの本理解したら、会社で通用しないことが理解できる

258:デフォルトの名無しさん
08/05/17 23:58:34
>>256
なるほど、
<Button onClick="">をwhileの中に入れて、JavaScriptの関数の中でhiddenを書き換えて渡せばいいということですね。
関数の引数で書き換えるデータは渡せそうだし、あとはhiddenの書き換えをどう実現するかですね。もしくは関数の中でパラメータを渡す処理をしても同じ動作いけそうです。

この路線で調べながらやってみます。ありがとうございました。

259:デフォルトの名無しさん
08/05/18 00:07:00
>>254
普通のArrayListは、サイズがキャパシティよりも増えるときにしかコピーはしない。
同じ配列を操作するので、複数のスレッドから同時にアクセスすると危険。

CopyOnWriteArrayListは、いかなる変更操作を行うときも元の配列のコピーを作ってそっちを操作し、最後に参照先を指し替える。
元の配列は決していじらずに捨て置くので、iteratorは変更操作に影響されず古いものを参照し続けることができるし、getなどの取得操作も影響を受けない。
変更操作同士は衝突することになるが、参照先の指し替えをAtomicReference#compareAndSetで実行し、失敗したら最初から(コピーを作るところから)やり直す、という方法でスレッドセーフを実現している。

260:デフォルトの名無しさん
08/05/18 00:14:05
>>254
てか、その辺のクラスでスレッドセーフを保証するよりも、Mapを持つクラスを作ってそのクラスが同期制御を管理する方が良い。

どんだけ排他制御が利いたMapにしたところで、Mapの参照を公開してしまうと一気に制御が難しくなる。
逆にHashMapでもあるクラスから外に参照を渡さず、HashMapにアクセスする公開メソッドの同期とれば良い。
並行処理の話ならば新APIの件もあるから、Java並行処理プログラミングって本を読むと良いよ。

261:デフォルトの名無しさん
08/05/18 00:48:55
Win98SEでjavaの勉強をしてるんだけど、コマンドプロンプトをもっと簡単に入力できるようにする設定方法を教えて
会社のPCだと「↑」キーで今まで入力したコマンドやファイル名を20個ぐらい出せるのに、家のPCだと会社と同じWin98SEなのにできない
「→」キーを押したら直前の入力だけなぞれるけど不便過ぎて困ってる

262:170
08/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.* のことですか?

263:261
08/05/18 01:21:29
doskeyで自己解決できた
下らない質問すんませんでした

264:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/18 01:40:37
もろに被ったな、読み比べて補完してくれw

267:170
08/05/18 01:51:25
>>264-265
レスどうもありがとうございます。

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

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

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

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

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

もっと勉強します。



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

Java 6 からVMの改良でsynchronized自体のパフォーマンスが上がってるので、
もしかしたら許容範囲になってるかもしれない (なってないかもしれない)。
不必要なsynchronizedを付けないに越したことはないけれど、
必要なsynchronizedを付け忘れてバグるよりはマシ、と思う。
synchronizedを外す (あるいは付けずに済まそうと企む) ときは、慎重に。

269:デフォルトの名無しさん
08/05/18 06:19:04
get で重要なのは(まあどっちも重要だが)原子性より可視性だろ。
VMの最適化で、まだ変数に入れてない値が既に他のスレッドから見えるとか、
そんな奇妙なことが起こりうる。

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

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


270:デフォルトの名無しさん
08/05/18 09:43:02
> 英語ができるなら、原本を読んだ方がいいのは言うにあらず

最後の一文が……

271:デフォルトの名無しさん
08/05/18 10:00:20
翻訳が~ってのは解らないでもないが、英語が読めてもスラスラと読める人間は少ないわけで。
非難するならお前が翻訳しろと。

272:デフォルトの名無しさん
08/05/18 11:57:09
いや、普通の感想だろw
金出して買ったものが酷いもんだったら文句いう権利はある。

273:デフォルトの名無しさん
08/05/18 12:09:23
>>267
もう辿り着いているかもしれないが、
スレッドセーフ性は「スレッドセーフか否か」と簡単に定義できるものじゃない。

Javaの理論と実践: スレッド・セーフの特性について
URLリンク(www.ibm.com)
(ただいまメンテナンス中)


274:デフォルトの名無しさん
08/05/18 16:05:21
Rubyで書かれたクラスを利用したいのですが、どうしたらよいでしょうか?

275:デフォルトの名無しさん
08/05/18 16:07:57
>>274
っ JRuby

276:デフォルトの名無しさん
08/05/18 16:22:28
JRubyの存在をすっかり忘れてました
とりあえずはなんとかなりそうです
ありがとうございました

277:デフォルトの名無しさん
08/05/18 20:32:59
URLリンク(rg550.hp.infoseek.co.jp)

このプログラムでどうしても線の描写だけ始点、挙動がおかしくなります
どこを変更すれば他の図形と同様にクリックした箇所を始点、ドラッグして話した場所を終点の線の描写になるでしょうか?

278:デフォルトの名無しさん
08/05/18 20:42:25
>>277
API docs をちゃんと読んでください。特に java.awt.Graphics を。

279:170
08/05/19 02:20:36
>>268-273
レスどうもありがとうございます。
>>273 の URL とか、「Java並行処理プログラミング」を呼んで勉強します。

これまでのいただいた情報を理解するのに精一杯で、しばらくここに質問をする
ことはないと思いますが、ひとまずお礼させていただきます。

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



281:デフォルトの名無しさん
08/05/19 07:55:44
>>280
final ついてたら単に再代入不可能なだけ。
Mutableなオブジェクトなら状態は変更できる。

282:デフォルトの名無しさん
08/05/19 08:59:30
>>280
final の上書き(再代入)はコンパイルエラーになるので、コーディングミスを減らせる。
メソッド引数やローカル変数にも適用でき、上書き禁止を明示することができる。
クラスやメソッドに適用しても、上書き禁止(継承禁止)の意味になる。

メソッド内で生成したクラスからの参照を保証する為に、当該ローカル変数を final にすることも。

283:デフォルトの名無しさん
08/05/19 11:38:06
ぐち。
クラスをfinalにするとユニットテストが書きにくくて困る。


284:デフォルトの名無しさん
08/05/19 12:55:11
そりゃそうだろうな

285:デフォルトの名無しさん
08/05/19 13:11:07
javaで作るゲームの本に、vistaでゲームを作るとき1/60秒に一回書き換える
ループを作ると誤差がでるから1/10秒で書き換えなさいとか書いてあるけど
1/10秒はカクカクして嫌なので、誤差を出ないように1/60秒で書き換えたいのです。
それなので、そのループを教えてください。

286:280
08/05/19 13:11:24
>>281-283
レスありがとうございます。
代入と状態の変更をごっちゃにしてしまっていたということなんですね。
すっきりしました!
どうもありがとうございました。


287:デフォルトの名無しさん
08/05/19 17:09:58
>>285は釣られていい餌?

288:デフォルトの名無しさん
08/05/19 19:04:35
腹が減っていたらどうぞ

289:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/20 02:12:10
JRE=j2re1.4.2_17=jre1.6.0_05=実行
JDK=コンパイル+実行

291:デフォルトの名無しさん
08/05/20 02:39:27
>>289
んむ。>>290の言うようにJDKへのパス通せ。
つかそういうJava以前のことは初心者用の本とかサイトに書いてないか?

292:デフォルトの名無しさん
08/05/20 02:42:25
テンプレに誘導が書いてある

293:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/20 12:35:33
javaアプリのmainの変わりにjavaappletのinitにしても
appleが動きませんでした
どうしたら動くのか教えてください

295:デフォルトの名無しさん
08/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 」という条件にすると全部の行を表示した後になぜかクライアントが落ちてしまうのです。
質問がわかりにくかったらごめんなさい、何かわかる方がいましたら教えていただけないでしょうか。





次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch