【初心者】Java質問・相談スレッド115【歓迎】at TECH
【初心者】Java質問・相談スレッド115【歓迎】 - 暇つぶし2ch150:デフォルトの名無しさん
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 」という条件にすると全部の行を表示した後になぜかクライアントが落ちてしまうのです。
質問がわかりにくかったらごめんなさい、何かわかる方がいましたら教えていただけないでしょうか。




296:デフォルトの名無しさん
08/05/20 12:41:08
>>295
落ちてしまうって何か例外でも出てるの?
それ捕まえてスタックトレース表示してみれば?

297:295
08/05/20 12:51:01
>>296
コマンドプロンプトでやってるんですが、落ちるっていうか全部の行を表示した後に何も表示されなくなるんです。
適当にキーを押しても一切反応せず、でもCtl-Cで終了すると何も表示されなくなったあとに入力したキーを実行しようとした形跡がバーッと表示されるんです。
・・・すみません、わかりにくいですね。こんな感じです。

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

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

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

c:\>

となるんです。








298:デフォルトの名無しさん
08/05/20 12:55:12
>>297
readLineで次のデータが送られてくるのをずっと待ってるだけでは?
サーバ側でSocketをcloseするかshutdownOutputすれば通信終了(EOF)になるのでreadLineがnullを返すはず

299:デフォルトの名無しさん
08/05/20 13:02:33
ちなみに
while ((message = in.readLine()) != null)
でループするということはストリームが閉じられるまで繰り返すとい
うことだから、このwhileを抜けるともうinから読むことはできない。

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



300:デフォルトの名無しさん
08/05/20 13:13:07
javaアプリのmainの変わりにjavaappletのinitにしても
appleが動きませんでした
どうしたら動くのか教えてください

301:デフォルトの名無しさん
08/05/20 13:16:14
javaアプリのmainの変わりにjavaappletのinitにしても
りんごが動くわけありません
りんごは手で持って動かしてください

302:デフォルトの名無しさん
08/05/20 13:16:53
>>300
具体的に何をどう変更したのか書きなさい。
リンゴが動かないとは何なのか。


303:デフォルトの名無しさん
08/05/20 13:18:58
URLリンク(www.hellohiro.com)

304:デフォルトの名無しさん
08/05/20 13:19:26
万有引力が働かない異世界だからです

305:デフォルトの名無しさん
08/05/20 13:20:37
javaアプリのmainの変わりにjavaappletのinitにしても
appletが動きませんでした
どうしたら動くのか教えてください

306:デフォルトの名無しさん
08/05/20 13:27:07
>>305
アプリとアプレットは別物なので、mainをinitに変えただけで動くわけはない
アプレットとして動くように作られていないのなら、アプレットとして動くように最初から作り直す必要があるかもしれない

307:デフォルトの名無しさん
08/05/20 13:29:04
>>300
アプレットをアプリケーションとして動作させたいってことなら
initはあくまでも初期化処理のみ
メインの動作はstartで行うようにオーバーライドされていることが多いので
インスタンスの生成→コンテナに追加→initによる初期化→コンテナの可視化→startで開始
の順で行う

308:デフォルトの名無しさん
08/05/20 13:32:50
ああ逆か
mainをinitに名前を変えてアプレットとして動作させようとしているのか
無茶な

309:デフォルトの名無しさん
08/05/20 16:05:00
おまえらそんな餌に食いつくなよ

310:デフォルトの名無しさん
08/05/20 18:24:38
アプリもアプレットも分からん人間には食いつきようもない餌だもんな。

311:デフォルトの名無しさん
08/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:
# URLリンク(java.sun.com)
#

何これ

312:デフォルトの名無しさん
08/05/20 19:31:30
JVMのクラッシュ

313:デフォルトの名無しさん
08/05/20 19:38:45
設計根本的に変えたほうがいいのかしら

314:デフォルトの名無しさん
08/05/20 20:01:41
マンガlovemakeの画像ってどうしたらコピーできますか?

315:デフォルトの名無しさん
08/05/20 20:49:29
Javaのデスクトップアプリでデータをローカルで持ちたいとき、
Windowsアプリで言うリソースみたいなかたちで埋め込むにはどうしたらいいの?


316:デフォルトの名無しさん
08/05/20 20:59:03
>>315
リソースファイルで埋め込めばいいよ

317:デフォルトの名無しさん
08/05/20 22:26:46
>>293
>質問お願いします。
いや、質問してるのは君だから。
「回答お願いします」か「質問させて下さい」だろ。

318:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/20 23:12:25
>318
DataEntry(String, String) というコンストラクタを持つクラスでも作って頑張ってください。

320:デフォルトの名無しさん
08/05/21 02:07:02
HashSet クラスには get だの put だのいうメソッドはないから無理。

321:デフォルトの名無しさん
08/05/21 07:09:50
HP-UXで稼動するWebシステムの保守を担当することになり
Java未経験ながらいきなり画面の追加をやらされることになりました。
(Webサーバ:SunOneでアプリサーバ:WebOTX、DB:Oracleです)

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

ソースの読み方のような入門書じゃなくて、
Webサーバのディレクトリ構成などJavaでのサーバ構築についての
書籍やアドバイスがあれば教えていただきたく。
「UNIXでJava使ってサーバ立てるならこれは基本書だろ!」
というようなものがあれば、ぜひ読んでみたいのですが。

322:デフォルトの名無しさん
08/05/21 07:34:32
そんなんプロジェクト毎のルールだろ?
仕様書嫁よ。

323:デフォルトの名無しさん
08/05/21 09:51:11
WEB-INFとかマニフェストファイルのことじゃないの?
いままでの開発をどうやってたのか知らないけど、
最近のIDEとかだと配備までやってくれるよ

324:デフォルトの名無しさん
08/05/21 09:56:55
アプリケーションサーバのマニュアルを読め、で済む話。


325:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/21 15:22:28
>特定の文字列が、作成可能な『ファイル』を示しているかどうか
イミフ。ファイル名の事?
OS依存。
それとも任意のファイル名でファイルが作成できるかって事?
OS依存。


327:デフォルトの名無しさん
08/05/21 16:49:11
>>325
javadoc で createNewFile を確認しましたか?(特に戻り値を)
File は単純ではないクラスですし、扱い方自体を確認した方が良いと思います。

328: 
08/05/21 18:43:41
パソコン買おうかと思ってるんだけど、QuadのCPU買ってマルチスレッドのプログラミングをJavaで組んだら
WindowsXPでもマルチコアに対応したプログラムになってくれるんですか?

329:デフォルトの名無しさん
08/05/21 18:50:29
javaのマルチCPU(コア)対応って具体的にはどこら辺まで対応してるんだろうね。

330:325
08/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で落ちるようです。

331:325
08/05/21 20:31:51
……失礼。
書き込んだ直後に気が付いたのですが、Fileの仕組みだと、「a:\backup」と「a:\backup\」を等価に扱ってもかまわないのですね。
Fileが扱うのはあくまでパスであり、(まだ存在しない場合)そのパスがディレクトリを示すのかファイルを示すのかは、mkDirするかcreateFileするかによって(後で)分かれる。
よって両者は区別する必要は無いので、「a:\backup」と「a:\backup\」は等価に扱ってよい、という理解でかまわないでしょうか?

332:デフォルトの名無しさん
08/05/21 22:20:02
>>328
ちゃんとスレッドを使えばそうなる

333:デフォルトの名無しさん
08/05/21 22:24:12
Point型に文字を四つ格納したいんだけどどうすればいいの?

334:デフォルトの名無しさん
08/05/21 22:49:35
質問です。
JScrollPane を使って、エクセルのように動的にサイズを変えるようにしたいんですけど
どうしたらいいでしょう?

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

JScrollPane つかうと無理なんでしょうか?

335:334
08/05/21 23:10:21
JScrollPane から JScrollBar とってこれるんですね。
でも、JScrollBar のノブが端にあるときにボタンを押しても
AdjustmentEvent は投げないみたいなんで、だめそうですね・・・

336:デフォルトの名無しさん
08/05/21 23:26:21
>>328
なる。

337:デフォルトの名無しさん
08/05/22 01:16:05
すみませんアノテーションについての質問です

クラスとかフィールドとかメソッドにつけたアノテーションは
リフレクション使って取り出すのはわかったのですが
ローカル変数につけたアノテーションの取得方法がわかりません
ご存知の方お教えください、お願いします


338:デフォルトの名無しさん
08/05/22 01:34:19
無理っす

339:デフォルトの名無しさん
08/05/22 01:51:31
javaからMySQLに接続し、任意のテーブルの列数を取得したいのですが
PHPみたいにmysql_num_rows()みたいなメソッドはありますか?
javadocのjava.sql.*の項を参照したのですが見つからなかったので。

340:デフォルトの名無しさん
08/05/22 01:54:40
select countすれば?


341:339
08/05/22 02:01:19
>>340
javaでってことに考え過ぎてそっちの方をすっかり考えてませんでした
試してみます。ありがとうございました。

342: 
08/05/22 04:41:06
>>332 >>336
どうもありがとう。


343:デフォルトの名無しさん
08/05/22 08:41:01

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



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


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

344:デフォルトの名無しさん
08/05/22 14:52:37
おい、おまえら。俺様が、Java入門者向けに環境変数自動設定ツール作ってやったんだけど、
Vectorにうpしようか迷ってる。まんどくさいんだけど、うぷしたらダウソする人いるかな?

345:デフォルトの名無しさん
08/05/22 15:01:25
入門者に自動で設定させんな

346:デフォルトの名無しさん
08/05/22 16:34:46
ていうか作らなくても既にそういうバッチがあった気がする。

347:デフォルトの名無しさん
08/05/22 16:53:15
っていうかNetBeansとか入れれば環境変数なんて
設定しなくていいし

348:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/22 20:51:33
お騒がせしました、、import java.text.*;で行けましたorz

350:デフォルトの名無しさん
08/05/22 22:34:10
java のプロファイラで、「今はこれを使うのがベスト」ってなんだろう。
お勧めがあれば教えてください。

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

IDE 統合型でない場合は、HPjmeter があるが(これはつかったことがある)、
これくらいでしょうか。


351:デフォルトの名無しさん
08/05/23 00:16:20
インターフェースを実装したクラスのメソッドに継承もとのコメントを転写したいのですが
何か簡単な方法はないでしょうか?

352:デフォルトの名無しさん
08/05/23 00:52:36
Ctrl+C V

353:デフォルトの名無しさん
08/05/23 00:54:32
>>352
何個もあるのでツールとか使って1回でさくっとできる方法でお願いします。

354:デフォルトの名無しさん
08/05/23 02:52:05
コピペは最も代表的なアンチパターン

355:デフォルトの名無しさん
08/05/23 03:24:50
>351
何も書かないこと。Eclipse3.3.2 は確認。
どうしてもコメントを書きたいなら、javadocに察知されないように気をつけて。

そういうことではない?

356:デフォルトの名無しさん
08/05/23 11:02:47
前スレで20桁以上の計算をしたいと相談したとき、BigDecimalやBigIntegerを使うようにアドバイスをいただいた者です。
今度はiアプリで20桁以上の整数の計算をしたいのですがどういう風にすればいいでしょうか?
ググってみるとDoJaではBigIntegerが使えないという記述を見つけたので相談しました。
よろしくお願いします。

357:デフォルトの名無しさん
08/05/23 11:52:02
自分で実装するしか

358:デフォルトの名無しさん
08/05/23 13:02:17
>>356
BigIntegerのソースそのまま使うとかw

359:デフォルトの名無しさん
08/05/23 13:05:33
そしてGPLに感染、と。

360:デフォルトの名無しさん
08/05/23 14:58:29
OpenJDKはクラスパス例外付きだろPhoneMEがクラスパス例外なしだ。

361:デフォルトの名無しさん
08/05/23 15:22:37
java.mathパッケージのままだとライセンス上問題でるだろうし
パッケージ改変したり部分的にパクった場合はクラスパス例外適用されんだろ。

362:デフォルトの名無しさん
08/05/23 16:24:29
とっても基本的なことなんだが、
なんで

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

とすると、なんで、k!=lになるんでしょう。

363:デフォルトの名無しさん
08/05/23 16:25:32
間違えた。

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

こちらです。
よろしくお願いいたします。

364:デフォルトの名無しさん
08/05/23 16:25:59
間違えた。

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

こちらです。
よろしくお願いいたします。

365:デフォルトの名無しさん
08/05/23 16:28:14
この違いを勉強しろ
k.equals( l ) → true
k == l →false

366:デフォルトの名無しさん
08/05/23 16:29:31
>>363
>>1

367:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/23 16:36:00
数字に規則性があるならできるけど、それ以外はしらね

370:デフォルトの名無しさん
08/05/23 16:36:42
>>365-366
ありがとうございます。
勉強したが、やはり、>>367が理解できん。
リテラル値をそのまんま突っ込んでいるから実体に反映されてるんかなぁ。

371:デフォルトの名無しさん
08/05/23 16:37:07
>>367
javac様はコンパイル中に「"aaa" + 1」を見て「両方とも定数だからい
ま1つの文字列にしちゃおう」と考える。「"aaa" + String.valueOf(1)」
は「なんか関数呼び出しがあるからコンパイル時にはどうしようもない
よね」と考える。


372:デフォルトの名無しさん
08/05/23 16:38:34
>>370
定数式とかString#intern()でぐぐれ。

373:デフォルトの名無しさん
08/05/23 16:43:06
>367
定数としてコンパイル可能な String のうち、同値になるものが同じインスタンスとされてるだけ。
>363 の例なら、int i=2 を final int i=2 とすれば、k==l は true となる。

374:デフォルトの名無しさん
08/05/23 16:48:42
>>369
隣接行列を2次配列にしたいんですけど
ノード数が100個以上あって、
エッジが繋がっている部分に重みがあって
エッジが繋がっていない部分を無限大の重みを付けたいんです。

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

ちなみに駅間の最短距離を求めるプログラムで利用したいんです。
データは隣駅までの距離です。

375:デフォルトの名無しさん
08/05/23 16:50:02
>>368
何をもって綺麗とか力技とかと評価するのか知らないが、
ほとんどを占めている数を配列全体に(Arrays.fillとかで)入れておいて、
配列内の位置とその値のペアで(配列やコレクションで)持っておいたものを代入するとか。

376:デフォルトの名無しさん
08/05/23 16:51:44
>368
java.util.Arrays.fill
>374
規則性が無いものを "計算機" で処理しよう、とな。
そこに妙な説明が書けるんだから、その通り実装すれば良いでしょう。

377:デフォルトの名無しさん
08/05/23 16:55:35
>>374
隣接行列はそういうスパースなグラフでは表現時にメモリの無駄が多いので、
他の表現方法で接続データを持っておいて(隣接リストとか)、
それをプログラム内で隣接行列に展開するようにするとか。

378:デフォルトの名無しさん
08/05/23 17:08:26
メモリの無駄が多い→同じ情報が繰り返し出てきてもたつき感がある

379:デフォルトの名無しさん
08/05/23 17:22:18
>>371-373
ok danke.
少しだけavacの気持ちが分かりました。

380:デフォルトの名無しさん
08/05/24 00:00:25
enum ってなんて読むのですか?

381:デフォルトの名無しさん
08/05/24 00:53:27
>>380
コミュニケーションする相手とのコンセンサスが取れているのならどんな読み方でもどうぞ。
enumはenumeration(またはその派生形)の略なので元の言葉の発音を基にするか、
enumそのものの綴りを連想できるような読み方にするかすればいいと思うよ。

382:デフォルトの名無しさん
08/05/24 01:11:12
ファイルに入力されてるなら
そこから読み取るっていうこともありえるけど・・・

383:デフォルトの名無しさん
08/05/24 01:44:02
AWTのTextFieldで右詰めにするのってできないんでしょうか??
どうやったらいいのか調べてもさっぱわかりません。。。
SwingならsetHorizontalAlignment使えばいいんですが、AWTでのやりかたをどなたかご教授願えませんかm(_ _)m

384:デフォルトの名無しさん
08/05/24 02:05:43
>>381
ありがとね

385:デフォルトの名無しさん
08/05/24 02:23:38
LayoutManagerを無効にしたらTextField(5)とかいう風に列の幅を指定しても
結局そのサイズが0になっちゃうんですが、、、
座標指定できるLayoutManagerとかないですよね??
列の数を指定して(Dimensionではなくcolum数で)、
座標を指定してコンポーネントを配置することってできないんですかね??

386:デフォルトの名無しさん
08/05/24 03:05:52
class C2 extends C1 {...
C1 c1 = new C1();
C2 c2 = (C2)c1;
これは可能ですか?

387:デフォルトの名無しさん
08/05/24 03:12:53
>>i386
C1を型に変換できません

388:デフォルトの名無しさん
08/05/24 05:40:02
>>385
TextFieldを子孫コンポーネントとしたFrameを一旦表示してやると、
そのコンポーネントの推奨サイズが有効な値として取得できるようになるから、
推奨サイズをコンポーネントのサイズとして設定してやり、
その後、Frameを再描画すればいい。
一旦表示して設定後、再描画とかの流れが面倒なら、行儀の悪いものになるが、
コンポーネントを加えた後でFrameをネイティブスクリーンリソースに接続すれば、
Frameを表示することなくコンポーネントの推奨サイズを得ることができるようになる。

389:デフォルトの名無しさん
08/05/24 08:48:29
>>385
なるほど。。。
ありがとうございます!!

390:デフォルトの名無しさん
08/05/24 12:19:54
arraylistで値を追加する際genericsで型を指定していると処理の時間が多少短いような気がするのですが
これは偶然の誤差なのでしょうか?それとも速くなるものなのでしょうか?

391:デフォルトの名無しさん
08/05/24 13:05:33
ならねぇ

392:デフォルトの名無しさん
08/05/24 13:11:20
>>391
ありがとうございます

393:デフォルトの名無しさん
08/05/24 13:32:08
オートボクシング/アンボクシングが働いて若干のパフォーマンス低下ってのならある。
けどもしそこがネックになってるならJITで最適化されるから気にしない。

394:デフォルトの名無しさん
08/05/24 13:32:36
arraylistとlinkedlistの要素の追加に5倍ほどの時間差があるのですがこれはどういう理由なのでしょうか?
先頭の削除はarraylistが遅い
ランダムアクセスはLinkedListが遅いっていうのはわかるんですけど

intを1~8000000
ArrayList追加 : 2385
LinkedList 追加 : 11095


395:デフォルトの名無しさん
08/05/24 13:36:11
>>394
そりゃあ、最後の要素までたどりつくまで時間がかかるからじゃないの?

396:デフォルトの名無しさん
08/05/24 13:58:00
>>395
末尾に追加すると ってやつね

397:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/24 14:20:00
>>395
すいません説明が足りませんでした
>>396さんの通り末尾に追加です

>>397
リンクを繋ぎなおす処理で問題が出ていたわけですね
詳しい説明ありがとうございました

399:デフォルトの名無しさん
08/05/24 14:25:41
>>395
LinkedListは頭と尻尾を知ってるから、わざわざそんなことしないぞ。
(間にsentinelを挟んだリング状になってる)

つか、適当なこと言う前にソース嫁。

400:デフォルトの名無しさん
08/05/24 16:03:41
プ ロ フ ァ イ リ ン グ

401:デフォルトの名無しさん
08/05/24 18:18:39
keytoolの-validityで指定可能な最大値は何日ですか?

402:デフォルトの名無しさん
08/05/24 18:43:07
javaでチャットを作ってます
swingのテキストエリアにメッセージを表示しているのですが、一行ずつフォントや色を変える方法はあるのでしょうか?
テキストフィールドを複数使ってテキストエリアのようにするぐらいしか思いつきません

403:デフォルトの名無しさん
08/05/24 18:43:27
0か-1で無期限じゃなかった?

404:デフォルトの名無しさん
08/05/24 18:57:47
>402
検索用ワード「JTextComponent スタイル」

405:デフォルトの名無しさん
08/05/24 19:02:46
>>404
ありがとうございます!

406:デフォルトの名無しさん
08/05/24 20:01:03
createImageに関しての質問なのですが
extends ComponentしたクラスでcreateImageをすると
nullが返りgetGraphicsすることができません

ググってみたところextends FrameしたクラスでaddNotifyをオーバーライドすればいいと
ありましたがcreateImageを利用する上で何をextendsするのがセオリーなのでしょうか
どうでもいいようなことかも知れませんがお願いします

407:デフォルトの名無しさん
08/05/24 20:19:14
>>406
まだ表示されてないコンポーネントはcreateImageできない
BufferedImageをnewして使うといい

408:デフォルトの名無しさん
08/05/25 01:35:45
>>406
Toolkit#createImageを使う手もある

409:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/25 06:26:14
>>409
interface CopyFactory<T> { T copy(T object); }
みたいのを定義&実装してやって、
コンストラクタ使わずにそっちで生成。

411:デフォルトの名無しさん
08/05/25 08:23:19
>>410
了解です
ありがとうございました

412:デフォルトの名無しさん
08/05/25 12:51:59
>>>409
・リフレクションでcloneを呼び出す
・リフレクションでコンストラクタを呼び出す
・serializeしてdeserializeする

413:デフォルトの名無しさん
08/05/25 13:05:50
それが出来上がったら、俺だったら迷わずシングルトンなインスタンスを入れてみる

414:FF
08/05/25 20:20:00
キャラクター画像の背景の透過処理の仕方を教えてください。

415:デフォルトの名無しさん
08/05/25 20:39:42
・もともと背景が透明画像用意する。
・IndexColorModelだったら透明色指定しとく。そうじゃなければ色置換。

416:デフォルトの名無しさん
08/05/25 22:47:28
ArrayListをさらにList化することは出来るのですか?

417:デフォルトの名無しさん
08/05/25 23:09:17
何をしたいのかもう少し詳細に説明してください

418:デフォルトの名無しさん
08/05/25 23:32:17
こうか?
ArrayList<ArrayList<Object>>

419:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/26 00:53:46
マルチは首つって市ね

421:デフォルトの名無しさん
08/05/26 01:07:29
>>419

commons-collectionsのMultihashMapとかどう?

422:デフォルトの名無しさん
08/05/26 01:56:59
>>420
ごめんなさい。

>>421
HashMapちょっと調べてきます!!
ご助言ありがとうございます。

423:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/26 12:55:15
m.initializeに誰も何も代入していない (初期値nullのまま)

425:423
08/05/26 13:08:14
早速の返答ありがとうございます。
ってことは
Initializeのコンストラクタでなにかの値を指定すればOKなのでしょうか。

//getClass()を使ったほうが可読性が高いですね。すみません。

426:デフォルトの名無しさん
08/05/26 13:24:37
>>425
Initializeオブジェクトを生成してinitializeに代入しないといけないだろうということ
要するに
× Initialize initialize;
○ Initialize initialize = new Initialize();

427:423
08/05/26 13:38:20
>>426
なるほど。
ありがとうございました。


428:デフォルトの名無しさん
08/05/26 17:44:13
>>423
ねぇアレやっていい?アレ
ガッ!やっていい?

429:デフォルトの名無しさん
08/05/26 18:39:26
>>423
内部クラスにするのはそれなりの設計理由があってすることで、
分離することが決まっているのなら、最初からきちんと分けて設計すべき。
クラス間の依存度が高いまま単に分けるだけなら分ける意味はあまりないし、
依存度が低くなるように最初の設計でインタフェースをきちんと決めて別々にした方がいい。
あとから制約を増やすのは面倒事になることが多い。

430:デフォルトの名無しさん
08/05/26 19:20:09
失礼します.
クラスからインスタンスを配列で作った際,Ins[0],Ins[1]…
Ins[n]内のメソッドから,Ins[n-1]内の変数をいじりたいのですが,どのようにすればよいでしょうか?

431:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/26 19:36:05
俺以外誰も423の5行目に反応すらしない・・・とは思わなかった今ではガッしたことに反省している

433:423
08/05/26 21:04:41
>>429
ただ単純に、一緒にしてしまうとコードが複雑になるので、
表示系と処理系を分離したいと。
できれば、最終的には表示系は処理系から隠蔽してメソッドで呼び出すだけにしたいかな、と。

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

>>432
本来のぬるぽですからねぇ。ふふふ


434:デフォルトの名無しさん
08/05/26 21:12:24
文字が半角カタカナであるか判断する方法はありますか?

435:デフォルトの名無しさん
08/05/26 21:46:44
文字コードで調べる。

436:デフォルトの名無しさん
08/05/26 21:53:11
使用メモリーの増加に伴ってスレッド処理速度が落ちてしまうのはどうすれば回避できるでしょうか

437:デフォルトの名無しさん
08/05/26 22:02:01
使用していないメモリを開放する

438:デフォルトの名無しさん
08/05/26 22:05:02
おおっ
少し感動

どうやればいいですか

439:デフォルトの名無しさん
08/05/26 22:07:17
GC弄るの?

440:デフォルトの名無しさん
08/05/26 22:09:00
nio
のBufferとかどうかなと思ったんだけど

441:デフォルトの名無しさん
08/05/26 22:11:32
newをできるだけ減らす(できるだけオブジェクトを使いまわす)とか、
アルゴリズムを工夫するとか

442:デフォルトの名無しさん
08/05/26 22:15:23
それは
既にやってあるなあ


443:デフォルトの名無しさん
08/05/26 22:33:14
使用メモリの増加に伴う速度低下がオブジェクトの生成にあるのなら
使用するオブジェクトをスタートアップの段階で全て準備してしまい
擬似的に静的に使用メモリを準備する
もちろんすべてひもつきのままにして破棄させない
一時的なオブジェクトの破棄に伴うGCの頻発による速度低下なら
メモリを積み込めるだけ積み込んでGCを停止する

444:デフォルトの名無しさん
08/05/26 22:33:27
設計がうんこなんだろ

445:デフォルトの名無しさん
08/05/26 22:33:42
メモリを積み増せば解決

446:デフォルトの名無しさん
08/05/26 22:34:51
てst

447:デフォルトの名無しさん
08/05/26 22:39:41
Oracle の JDBC ドライバ (V9.2.0 ) で Oracle DBMS に接続してるんだが。
クエリ投げて、SQLException 投げてきたときに、クエリのどの部分が違うのか、
あるいは、どの列が制約条件に違反してんのか、どうしたらわかるの?
教えてエロい人。

448:デフォルトの名無しさん
08/05/26 22:46:04
>>443
サンキュ
ただ原因はスレッドがやってる作業そのものがデータの吸出しにあることだと思う
6000個のスレッドをpool使って逐次で動かしてるんだが作業が進むに従って重くなるんで
このデータを一時的に何とかしないといかんかも

449:デフォルトの名無しさん
08/05/26 22:55:34
6000個のスレッドwww
どんなマシンでまともに動くのか教えて欲しいwww

>>447
SQLのエラーコードを取得して、Oracleのマニュアルを参照汁
getErrorCodeとかそんなメソッドある

450:デフォルトの名無しさん
08/05/26 22:57:07
6000個もスレッドを使ってる時点で
何かがおかしいと思わざるを得ないのだが
コンテキストスイッチのコストだけでもバカにならないんじゃ

451:デフォルトの名無しさん
08/05/26 22:57:59
6,000・・・Thredのコストだけでも500Mくらいつかってそうだな、おい。
どうせpoolの管理も自分でやっているんだろ
ExecutorServiceとか使えばサクサク動く予感

452:デフォルトの名無しさん
08/05/26 22:59:12
6000台のPCに分散処理させれば解決(・∀・)イイ!!

453:デフォルトの名無しさん
08/05/26 22:59:29
つかってる

454:デフォルトの名無しさん
08/05/26 22:59:53
6000!
スレッドダンプが終わらん!

455:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/05/26 23:03:54
本当に6000もスレッドを使わなければいけないのか、
よく考えるべきである

457:デフォルトの名無しさん
08/05/26 23:07:45
>>453
減らすべし。大抵は多くても数十で十分のはず
他の言語なら大量に作って大量に捨てるような設計でも問題ないこともあるけど
Javaのスレッドは、基本的にそんな使い方はしない


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