【初心者】Java質問・相談スレッド123【歓迎】
at TECH
1:デフォルトの名無しさん
09/01/19 11:06:38
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理 URLリンク(pc11.2ch.net)
Webプログラミング URLリンク(pc11.2ch.net)
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
URLリンク(www.wikiroom.com)
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
【初心者】Java質問・相談スレッド122【歓迎】
スレリンク(tech板)
次スレは>>990あたりで。
過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
URLリンク(www.wikiroom.com)
2:デフォルトの名無しさん
09/01/19 12:29:32
2 名前:デフォルトの名無しさん[sage] 投稿日:2008/12/14(日) 20:59:33
**** 関連スレッド案内 ****
■ AWT と Swing は --
Java低速GUI Swing 8
スレリンク(tech板)l50
■ SWT は --
Java 高速GUI SWT 3
スレリンク(tech板)l50
■ NTT DoCoMo の iモード携帯電話用 Java (iアプリ) は --
iモード携帯電話用Java(iアプリ) Part18
スレリンク(tech板)l50
■ DoCoMo 以外は --
CLDC+MIDP+携帯電話用Javaスレッド part 8
スレリンク(tech板)l50
■ 課題・宿題は --
★★ Java の宿題ここで答えます Part 66 ★★
スレリンク(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)
3:デフォルトの名無しさん
09/01/19 13:33:41
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
4:デフォルトの名無しさん
09/01/19 22:21:44
Collection から 任意のオブジェクトの配列に変換する際、
以下のようなプログラムを書くと思いますが、
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
:
String[] array = list.toArray(new String[0]); ←(1)
System.out.println(array.length);
このとき(1)で Collection#toArray() に渡すのは、 以下のどっちが正しいのですか?
・new String[0]
・new String[list.size()]
URLリンク(d.hatena.ne.jp)
というページを見つけたが、コメントで以下のようにあるが、
> // もはやtoArrayの引数にサイズ0の配列を渡すのはお約束
> String[] strs = strList.toArray(new String[0]);
> ですよね〜
「お約束」「ですよね〜」となるのが理解できない。
new String[list.size()] とやらずに new String[0] とやるのは常識(お約束)なんですか?
5:デフォルトの名無しさん
09/01/19 22:39:17
>>4
>> T[] result = new T[size];
> とか出来ないのか。
なんて言ってる人たちだから。
6:デフォルトの名無しさん
09/01/19 22:42:42
>a - リストの要素の格納先の配列。
> 配列のサイズが十分でない場合は、
> 同じ実行時の型で新しい配列が格納用として割り当てられる
どう見ても new String[list.size()] の方が効率いいと思うが。
7:デフォルトの名無しさん
09/01/19 22:50:58
質問です。アドバイスをお願いします!
現在JTabbedPaneでタブを作っているんですが、その中身を別のクラスから呼び出そうとすると、
「シンボルを見つけられません」とエラーが出てしまいます。
部分的にソースを書くと、
//タブに貼り付けるパネル設定
JPanel tabPanel2 = new JPanel();
//テキストエリアのクラス
JTextAreaTest sc ;
sc = new JTextAreaTest();
//タブの設定
tabPanel1.add(sc); ←ここでエラー
tabPanel2.add(new JLabel("ラベル"));
JTextAreaTestクラスのインスタンス化したものを設定しているのが問題なのでしょうか?
それともインスタンス化自体間違っているのかどなたか助言をお願いします!
8:デフォルトの名無しさん
09/01/19 22:51:56
jnlpで
外部ライブラリにいちいち署名しない方法教えて。
grant allpermissionは抜きで。
GoogleAPIのJARを解凍して一個のJARにまとめて
署名したけど、なんか動かんかった。MANIFESTの情報を
引き継がなきゃなんないのか?
つか、いちいちサードパーティの信頼性を
プログラマが保障しなきゃいけないモデルってあり?
せっかくのJavaFXもこんなめんどくさい
サンドボックスのせいで普及しなそう。
9:7
09/01/19 22:53:21
>>7
すいません、パネルの設定が一行抜けてましたorz
正しくは下です
//タブに貼り付けるパネル設定
JPanel tabPanel1 = new JPanel();
JPanel tabPanel2 = new JPanel();
10:デフォルトの名無しさん
09/01/19 23:05:22
>>9
オマエが抜書きしている時点で全て怪しいいよ。
全部どっかにアップしろ
11:4
09/01/19 23:13:28
>>5-6
レスどうもありがとうございます。
いくら Collection.toArray() 内で、適切に拡張してくれるとはいえ、
new String[list.size()] の方が効率がよいということなので、
自分はそうするようにします。
List list = new ArrayList() とか StringBuilder sb = new StringBuilder()
でも、今までは気にしていなかったけど、その時点でサイズを決めることができる場合は、
コンストラクタに初期サイズを指定した方が効率がいいのかな。
(明確な差は現れないような気もするけど)
12:7
09/01/19 23:19:40
>>10
ソース上げました
URLリンク(uproda.2ch-library.com)
13:デフォルトの名無しさん
09/01/19 23:24:17
WinXP SP-3に、jre-6u11-windows-i586-p.exeをインストールしていました。
Revo Uninstallerというフリーソフトでアンインストールを行い、ウイルスソフトを
停止して、再インストールしようとすると、
「この操作は現在インストールされてている製品に対してのみ有効です。」
となり、インストールできません。
セーフモードで起動し、インストールしようとすると
「システム管理者によって、ポリシーはこのインストールを実行できないように設定されています」
となってしまいます、administratorでインストールしようとしても、同様の結果です。
プログラムの追加と削除には、既にjavaの項目はありません、完全削除か、再インストールしいたいのですが、できなくて困っていますどうしたらいいでしょうか?
Sunに聞いたほうがいいのでしょうか?
14:デフォルトの名無しさん
09/01/19 23:26:23
>>12
JPanle#addはComponentしか受け付けないから
15:デフォルトの名無しさん
09/01/19 23:27:02
>>14
×JPanle
○JPanel
16:7
09/01/19 23:38:08
>>14
なるほど!だからエラーが出るんですね
ということは、直接設定せずに間接的に設定すればおk?
ちょっとやってみます
17:デフォルトの名無しさん
09/01/20 00:00:51
>>16
目標がなんだかわからないが、
普通にやりたいなら、
JTextAreaTestのコンストラクタでやっていることは全部Sampleのコンストラクタに出して、
JTextAreaTest自体やめちゃえば?
18:7
09/01/20 00:23:02
>>17
確かにそれだと表示されるんですが、
最終的にこれに他にもJMenuとかいろいろ足していきたかったので、
Sampleの中に全部入れていくと見難いかと思ってクラスに分けたかったんです
もう少しやってみてだめだったら、このままSample内に入れてしまおうと思います
19:デフォルトの名無しさん
09/01/20 00:41:44
クラスに分けるときは、もうちょっとオブジェクト指向を
勉強したほうがよいかと。
JTextAreaTestをインスタンス化(new)して
そこからJTextAreaTestがもってるスクロールペーンの
参照を取得して、Sampleのほうのタブペーンにaddする。
難しい方法はJTextAreaTest extends JPanel
とかして、JTextAreaTest自体をタブペーンにaddする。
がんばれー。
20:デフォルトの名無しさん
09/01/20 00:43:15
>>18
タブに入れるパネルか、
パネルに入れるスクロールペインをサブクラス化した方が良いのでは?
21:デフォルトの名無しさん
09/01/20 01:54:41
>>11
>コンストラクタに初期サイズを指定した方が効率がいいのかな。
インスタンス生成時に、予めサイズが分かってるなら、その方が良いよ。
気になるなら、ソース読んでみると良い。
それに、パフォーマンスを気にするなら、まずは自分の手を動かして実測してみるのが一番。
22:デフォルトの名無しさん
09/01/20 01:59:57
JAVAでパフォーマンスを気にする奴はどんな髪型してるんだ?
23:7
09/01/20 02:15:59
>>19-20
助言ありがとうございます
まだまだオブジェクト指向は理解しきれていないですが、二人の言葉を参考に
なんとかクラスを分けたままでタブに表示することができました!
URLリンク(www.dotup.org)
テキストエリアのサイズの設定がおかしいことになってますが、
今日はここまで出来たので寝ようと思います
ここに来てよかったです。ありがとうございました
24:デフォルトの名無しさん
09/01/20 02:55:21
>>22
大量にデータを扱うようなプログラムを作る場合、
パフォーマンスは気にすべきだと思うが。
あなたは、Java で書こうと C で書こうと、いま自分が書いているプログラムが
どれくらい無駄なことをやっているか、どれくらい効率的になっているか、意識していないんですか?
25:デフォルトの名無しさん
09/01/20 03:26:18
大量って具体的にどれほどバイト?
26:デフォルトの名無しさん
09/01/20 03:28:13
>>24
青二才はオナニーしてはよ寝ろw
27:デフォルトの名無しさん
09/01/20 04:12:27
Cで書くのが面倒でJavaしてる時点でパフォーマンスは考えてないな。
perlとかスクリプト書けばすぐ済むのをいちいちCでやるのかと同じ。
28:デフォルトの名無しさん
09/01/20 04:25:00
JAVA的にはperlじゃなくてRUBYだと思うが・・・
29:デフォルトの名無しさん
09/01/20 08:54:20
なんでrubyがでてくるんだ?
30:デフォルトの名無しさん
09/01/20 09:26:18
指示ファイルを読み込んで動作するプログラムがあります。
classファイルで動いている時には、自身のclassファイルがあるフォルダから、
jarで動いている時には、自身のjarから抽出して、
それぞれ動かしたいと思います。
自身のパスと、classなのかjarなのか、はどうやったら得られるんでしょうか。
ご教示願います。
31:デフォルトの名無しさん
09/01/20 13:32:42
相対パスで指定すれば関係ないんじゃない?
32:デフォルトの名無しさん
09/01/20 17:36:21
>>27
なんでperlなの?
33:デフォルトの名無しさん
09/01/20 17:37:24
>>24
大量って具体的にどれほどバイト?
34:デフォルトの名無しさん
09/01/20 17:52:04
どれほどバイト
35:デフォルトの名無しさん
09/01/20 18:08:12
>>30
クラスファイルと同じ場所に指示ファイルがあるのなら
getClass().getResourceAsStream(指示ファイル名);
で指示ファイルから読み込むためのInputStreamが返される
指示ファイルの位置が知りたいのならClass#getResourceメソッドを使えばそのURLが得られる
クラスメソッドならクラス名.classでClassインスタンスが得られる
36:デフォルトの名無しさん
09/01/20 19:20:17
質問です。
main.exec()を実行する際に以下のように値をセットするようにしました。
Class name1 = new Class();
Class name2 = new Class();
...
Class name10 = new Class();
name1.setA("a");
name2.setA("b");
...[引数が微妙に違う]...
name10.setA("j");
name1.setB("default");
name2.setB("default");
...[引数が同じ]...
name10.setB("default");
以下setC(すべて同じ引数), setD(name1〜5が同じ引数、name6〜10が同じ引数)と続く
main.put("METHOD1", name1);
main.put("METHOD2", name2);
...
main.put("METHOD10", name10);
main.exec();
似たような処理を記述しているので冗長に感じます。
もう少しスッキリとさせることはできないでしょうか?
37:36
09/01/20 19:22:17
具体的には数字ではなくて
nameItigo
nameRingo
nameSuika
のような意味のある名前になっています(引数もそれに関連するものです)
38:sage
09/01/20 21:48:32
サーブレットはサーバで動くアプリケーションというのは分かったですが、
普通のjavaアプリケーションは何て言うんですか?
39:デフォルトの名無しさん
09/01/20 22:01:00
javaアプリケーション
40:デフォルトの名無しさん
09/01/20 22:33:45
>>36
Classクラスは標準で存在するクラスだから仮の名前に使うのは良くない。
nameなんたらという名前がその場だけのものなら配列なりコレクションなりに置き換えた方がいい。
セットするリソースもそれに合わせてまとめておく。そうすれば繰り返し構文が使える。
名前の変更ができないのなら配列等にname〜の参照を保持してそれを使うようにするとか。
Hoge nameFoo = new Hoge();
...
Hoge[] names = {nameFoo, ...};
String[] valueA = {"a", ...};
...
for (int i = 0; i < names.length; i++) {
names[i].setA(valueA[i]);
...
みたいな感じ。
41:デフォルトの名無しさん
09/01/21 04:38:30
動作効率(速度面・資源面など)について質問です。
class Sub extends Super {
}
class Sub2 extends Sub {
}
class Sub3 extends Sub2 {
}
ここでSub3をインスタンス化して継承したSuperのメソッドを使うのと、
Superをインスタンス化してメソッドを使うのでは、
動作効率は変わってきますか?
継承すればするだけ継承した下位のクラスを利用するとき動作効率が劣るのでしょうか?
42:デフォルトの名無しさん
09/01/21 08:16:03
>>41
JVMの実装による。お使いのJVMでベンチマークしてください。
43:デフォルトの名無しさん
09/01/21 08:34:02
その程度最適化で吸収される
44:デフォルトの名無しさん
09/01/21 11:29:19
一般的には、気にするだけ無駄だな。
45:デフォルトの名無しさん
09/01/21 11:45:21
>>41
どっち使ってもinvokevirtualになるだろうし大して変わらんと思うが。
まぁJVMの実装次第だけど。
46:41
09/01/21 12:00:17
みなさんレスどうもありがとうございます。
自分の中のイメージとしては、
小物の入った小さい箱にそれよりも大きな箱を重ねていく感じで、
小物をとりだすときに箱を1つずつ取り払う分作業速度が遅くなり、
大きな箱を用意する分資源(メモリ等)を多く使うのではと思い質問しました。
大してかわらなそうとのことなので気にしないことにします。
47:デフォルトの名無しさん
09/01/21 12:35:45
>>35
ありがとう。
提示されたキーワードで調べてみます。
48:デフォルトの名無しさん
09/01/21 13:16:26
サーブレットからアプリケーションを実行する時って
どうすればいいんでしょうか。
49:デフォルトの名無しさん
09/01/21 16:33:13
もうすぐ現場に出るのですが
覚えといたほうがいいものを教えてください。
50:デフォルトの名無しさん
09/01/21 16:42:51
>>49
ハンカチとティッシュを忘れない
51:デフォルトの名無しさん
09/01/21 17:03:50
行為の前に敷いてあげて行為の後で拭いてあげるんですね
52:デフォルトの名無しさん
09/01/21 17:20:26
>>48
アプリケーションをコンテンツとして用意して、ブラウザに送る。
53:36
09/01/21 21:56:48
>>40
ありがとうございます。
配列にしたことでスッキリできました。
54:デフォルトの名無しさん
09/01/21 21:58:12
ご存知でしたら教えてください。
servletのフレームワークで、プロパティー形式以外の入力を処理するようなものってありますでしょうか?
普通、リクエストボディには
キー=値
という形式でデータが納められているとおもうのですが、
これがCSVだったり
kamoku,tensuu
kokugo,81
rika,69
suugaku,77
XMLだったり
<data>
<name>
<sei>foo</sei>
<mei>bar</mei>
</name>
<age>26</age>
</data>
するリクエストが飛んできた場合、適切にBeanのフィールドに値を詰めてくれるようなフレームワークです。
以上、よろしくお願いします。
55:デフォルトの名無しさん
09/01/21 22:21:15
よく分からんがO/Rマッピングのこと?
56:54
09/01/21 23:08:13
O/Rマッピングと言っていいのかわからないのですが、
つまりクライアントから
POST /TestServlet HTTP/1.1
Host: localhost
Content-Length: 17
Content-Type: text/xml
<data>
<foo>bar</foo>
</data>
こんなリクエストが投げられてきた時にO/Rマッピングみたいな事をしてくれるフレームワークです。
そういうのありますでしょうか?
57:デフォルトの名無しさん
09/01/21 23:52:19
JAXBとか
58:デフォルトの名無しさん
09/01/22 00:23:25
JTableについて質問があります.
JTableのテーブルモデルをAbstractTableModelを拡張した自作(TableModelEx)の物にしています.
TableModelExにAbstractTableModel#getValueAt(int row, int column)をオーバロードしてgetValuAtの返り値がセルのデータになるはずですが
どうもうまくいきません.行内の全ての項目の値が同じものになってしまいます.
そこでオーバーロードしたgetValueAtの引数rowとcolumnを調べてみるとcolumnの値が変化してません.
例えばSystem.out.println(row + ":" + column)で調べると
0:0
0:0
0:0
1:0
1:0
1:0
といった具合になります.同じ列をアクセスしているようです.本来ならば
0:0
0:1
0:2
1:0
1:1
1:2
となっているはずです.
どうすればよいでしょうか?
59:デフォルトの名無しさん
09/01/22 00:51:10
>>58
それを言うならオーバーロードでなくオーバーライドじゃね?
まあTableModelインタフェースで定義されてるだけだからオーバーライドというよりインプリメントかもしれんが。
TableModelEx自身やそれがどう使われているか分からないことには何ともいいようがない。たとえば、
class Model extends AbstractTableModel {
public int getRowCount() {
return 10;
}
public int getColumnCount() {
return 5;
}
public Object getValueAt(int row, int column) {
System.out.println(row+","+column);
return new String(row+","+column);
}
}
みたいに簡単なのをそのコードで使ってるJTableのモデルに与えてみてもうまくいかない?
60:デフォルトの名無しさん
09/01/22 00:53:27
AbstractTableModel自体は抽象クラスだからインプリメントでなくオーバーライドでいいのか…
61:デフォルトの名無しさん
09/01/22 03:51:12
>59
それと同等のプログラム組んでみたらうまくいった.
それでいろいろ試してみたらハードコーティングで作った列はAbstractTableModel#getValueAt(int row, int column)の
引数columnでちゃんとアクセス(column = 0,1,2,3...)してくれるみたいなんだけど
実行中に動的に追加した列に関してはAbstractTableModel#getValueAt(int row, int column)の引数columnが常に0だった.
つまり動的に追加した列は0列目とまったく同じ値になった.
で,今作ってるプログラムは動的に列を追加するもの(列の定義があるファイルにあってそれをロードする)なので
思うように行きません.
62:デフォルトの名無しさん
09/01/22 04:45:47
>>61
たぶんTableModelExでデータを追加する機能がきちんと組めていないんだと思う。
動的に追加するのならAbstractTableModelでなくDefaultTableModelを継承したほうが楽。
class Model extends DefaultTableModel {
public Model() {super(10, 5);}
public Object getValueAt(int row, int column) {return new String(row+","+column);}
}
で
JFrame f = new JFrame();
final Model m = new Model();
JTable t = new JTable(m);
f.add(new JScrollPane(t), BorderLayout.CENTER);
JButton b = new JButton("add row");
b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
m.addRow(new Object[m.getColumnCount()]);
}});
f.add(b, BorderLayout.SOUTH);
JButton b2 = new JButton("add column");
b2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
m.addColumn(String.valueOf((char)('A' + m.getColumnCount())));
}});
f.add(b2, BorderLayout.EAST);
みたいなのはちゃんと機能する。
63:デフォルトの名無しさん
09/01/22 11:39:42
列を追加するときにfireTableStructureChanged()を追加した動的に列を追加してももうまくいった.
とにかくありがとう
64:デフォルトの名無しさん
09/01/22 14:24:42
ボタンをクリックする度に新しいJTextPaneを、JInternalFrameを使って
表示させています。
クリックされる度にJTextPane textPane = new JTextPane();
として生成しているのですが、一度目のクリックではtextPane1、二度目のクリックでは
textPane2...というふうに、違う名前にしたいのです
どのようにしたらいいでしょうか
65:デフォルトの名無しさん
09/01/22 14:32:06
>>64
名前といわれても、なにの名前だか
66:デフォルトの名無しさん
09/01/22 14:48:02
ていうかSwingはSwingスレ行ってやれよ。超過疎ってるんだから。
67:デフォルトの名無しさん
09/01/22 14:53:26
質問です。
現在、↓のようなプログラムを作りました。
URLリンク(www3.uploda.org)
システムトレイにアイコンを常駐させ、フレームを閉じてもアイコンから表示でき、
時間設定することでシステムトレイに常駐させたアイコンからお知らせできる、というプログラムです。
普通にフレームを閉じてアイコンから開いても普通に表示されるんですが、
時間設定をしてからもう一度フレームを開くと、上下にパネルを並べていた
レイアウトが並べて表示されてしまいます。
レイアウトが崩れてしまう原因はなんでしょうか?
アドバイスをお願いします!
68:67
09/01/22 15:04:50
すいません、上のプログラムですが、余計なコメント類を消してすっきりさせて
みたらレイアウトが崩れなくなりました。
お騒がせしてすいませんorz
69:デフォルトの名無しさん
09/01/22 19:28:09
質問なのですが
apacheとtomcatの連携させて、
javaのサンプルプログラムをdosでコンパイルして動かして連携を確認しました。
ところがエクリプスで同じプログラム造るとtomcatで動いてもapacheで動きません。
どなたか原因ご存じですか??
70:デフォルトの名無しさん
09/01/22 20:04:50
質問させてください
二次元配列でfor文を使って、各行の最小値を求めてから、
その最小値の要素の要素番号を表示するにはどうすればいいのですか?
下のように表示させたいのですが…よろしくお願いします。
10, 1, 9, 7, 8
30, 10, 9, 6, 4
-1, -2, -9, -5, -6
0行目の最小値 = 1
0行目の最小値の要素番号 = 1
1行目の最小値 = 4
1行目の最小値の要素番号 = 4
2行目の最小値 = -9
2行目の最小値の要素番号 = 2
71:デフォルトの名無しさん
09/01/22 20:06:23
>>70
宿題スレの方がいいんじゃね?
ここってアルゴリズムスレじゃないと思うんだ
72:デフォルトの名無しさん
09/01/22 20:38:24
アルゴリズム体操はじまるよぉ〜〜☆☆☆
73:デフォルトの名無しさん
09/01/22 20:39:10
>>71
失礼しました、改めて宿題スレで聞いてみます
ありがとうございました
74:デフォルトの名無しさん
09/01/23 21:59:06
最近Javaを勉強し始めましたが、コンストラクタを使用するメリットが
イマイチよく分かりません。
どういった場面で利用し、どのように役に立つのでしょうか?
75:デフォルトの名無しさん
09/01/23 22:13:30
多分あなたが書いた「コンストラクタが不要なクラス」のサンプルを
貼ってもらえると説明出来ると思う。
どういう理由でコンストラクタ不要と考えたか分からないので。
76:デフォルトの名無しさん
09/01/23 23:11:16
インスタンスを作った時点で必ずメンバ変数が初期化されてるってハッピーじゃね?
メンバ変数が初期化されてなかったらどうしようとかビクビクしなくて済むわけで。
77:デフォルトの名無しさん
09/01/24 08:46:10
オブジェクト指向プログラミングでは
オブジェクトを構成単位としてプログラムを構築するが
そのオブジェクトの内外部の境界の決定は
そのオブジェクトにどのように整合性(不変条件)を持たせるかが
一つのキーポイントとなっている。
ところが、単にオブジェクトを生成しただけでは、
Javaの既定のフィールドの値では
生成直後の状態がその整合性を満たせない場合がある。
このような場合に、コンストラクタなどを使って
正しい状態のオブジェクトが生成できるように細工をする。
なお、コンストラクタが終わる前に、直接的にも間接的にも
その構築中のオブジェクトの参照を漏洩するのは
整合性がない状態でオブジェクトを晒すことになるので、やってはいけない。
78:デフォルトの名無しさん
09/01/24 09:55:14
アプレットです。init()を実行した時点で一旦処理を止めて、マウスのeventで
paint()に進むようにしたいのですが、制御の方法が分かりません。
今は最後まで処理してからマウスeventを待っています。
宜しくお願いします。
79:デフォルトの名無しさん
09/01/24 11:52:04
プログラム晒せないなら宿題スレに逝けば?
★★ Java の宿題ここで答えます Part 67 ★★
スレリンク(tech板)l50
宗教的な儀式は別にして、コンストラクタって使うの面倒だよな。
クラスのインスタンス実行した時点で初期化しとけよ。
80:デフォルトの名無しさん
09/01/24 12:11:32
コンストラクタ使うのが面倒って、お前
インスタンスを一個しか作らないようなプログラムしか
書いてないんじゃないか?
81:デフォルトの名無しさん
09/01/24 12:36:50
つうか、コンストラクタへの引数ってメソッドの引数と同じようなもんだろ
コンストラクタはいらねーってのはメソッドの引数はいらねーっていってるようなもんだな
ていうか、コンストラクタがどうのとか言ってる奴って、
JavaAPIをまともに使ったことねーんじゃねーの?
あれらにコンストラクタがなかったら悲惨なことになると思うが
82:デフォルトの名無しさん
09/01/24 12:53:43
コンストラクタは気になる
ClassA a = new ClassA();
a.setFile(file);
a.setDir(dir);
a.exec();
ClassA a = new ClassA(file, dir);
a.exec()
どちらがいいんだろう?判断する根拠を持っていない・・・
83:デフォルトの名無しさん
09/01/24 13:20:05
>>82
後者だと、引数が不正だった場合にインスタンスの生成そのものを行わないという設計・実装が可能。
同じ理由でDIコンテナでもコンストラクタインジェクションを好む人は多い。
84:デフォルトの名無しさん
09/01/24 13:55:58
ちょっと教えてくれ
telnetクライアントを作りたいんだが、
いろいろ調べてみるとApache Commonsのnet
というコンポーネントを使用する例が出てくる。
やっぱこれを使った方がやりやすいのかな?
あと、公式サイトはリンク切ればかりなんだけど、
ちゃんとここから落とせるのかな?
85:デフォルトの名無しさん
09/01/24 14:12:34
java入門のswing関係で
「getContentPane().add(button1);」というコードをを発見しました
getContentPane()の戻り値のインスタンスを使って、add()にアクセスしているって解釈したんですが
間違っていませんか?
86:デフォルトの名無しさん
09/01/24 14:20:23
>>83
というよりむしろ引数が無ければコンパイルエラーにしてくれる点が重要では
>>85
そのたうり
87:デフォルトの名無しさん
09/01/24 14:24:29
>>83
コンストラクタの中で、戻り値をコントロールできる?
ってか、引数のチェックをした結果を、コンストラクタの呼び元でインスタンスが出来ているかどうかで判断するのか?
88:デフォルトの名無しさん
09/01/24 14:26:21
>>86
わかりました
ありがとうございます
89:デフォルトの名無しさん
09/01/24 14:56:58
スレッドって手数を増やすんじゃなくてひとつの領域を効率よく使うためのアプローチなんですかね
90:デフォルトの名無しさん
09/01/24 16:16:23
キャストについての質問なのですけれど、
class Parent{}
class Child extends Parent{}
class cast{
public static void main(String[] args){
Parent p;
p = new Child();
Child c;
c = (Child) new Parent();
}
}
実行時にclasscastexceptionの例外が発生します。
c = (Child) new Parent(); ここのキャストがまずいらしいんですけど、
どうすればエラーが出ないのでしょうか?よろしくお願します。
91:デフォルトの名無しさん
09/01/24 16:48:20
>>90
バナナはおやつですが、
おやつはバナナではありません
92:デフォルトの名無しさん
09/01/24 16:54:49
>>82
前者だと、オブジェクト指向的には
setFileやsetDirを使わなかったときにexecを呼び出した場合の処理
(たぶん、IllegalStateExceptionでも投げる?)
を書かなければならないという手間がかかる反面、
aを生成後に処理を挟んでこれらのsetterを呼び出せるという
柔軟性を持たせることができる。
手間と柔軟性のトレードオフだが、アジャイル的には
最初は後者で作っておいて、必要になったら後者にリファクタリングする
のがよさげと思われ
93:92
09/01/24 16:56:53
typoった
>最初は後者で作っておいて、必要になったら後者にリファクタリングする
後者→前者
状態数は削れるだけ削るのが基本
94:デフォルトの名無しさん
09/01/24 17:02:12
>>93
いっぱいの「い」を「お」に変えると?
95:92
09/01/24 17:06:56
おっぱお!
後者で作っておいて、必要になったら前者、ね
96:デフォルトの名無しさん
09/01/24 17:45:37
>>91
なんとなくわかりました.。ありがとうごさいます。
97:デフォルトの名無しさん
09/01/24 21:35:12
ファイルフィルターについて質問です
ファイルチョーザで任意の一つのディレクトリを選択させるダイアログを作ろうとしています
String型のopenBtnNameに格納された名前が付けられたボタンを押すとアクションリスナーが
アクションパフォームドにイベントeを引き渡し、String型のcmdにeのアクションコマンドを引き渡した後、
下記のプログラムに入るようにしました
else if(cmd.equals(openBtnName)){
JFileChooser openDirFC = new JFileChooser(".");
openDirFC.setAcceptAllFileFilterUsed(false);
FileFilter dirFilter = new FileFilter(){
public boolean accept(File f){
return f.isDirectory();
}
public String getDescription(){
return "directorie";
}
};
openDirFC.setFileFilter(dirFilter);
openDirFC.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int res = openDirFC.showOpenDialog(this);
if(res == JFileChooser.APPROVE_OPTION){
File inputFile = openDirFC.getSelectedFile();
DataHandler dataHandl = new DataHandler();
allData = new TableHandler(dataHandl.load501parameters(inputFile));
}
}
ここで、ファイルフィルターを設定していますが、eclipse3.3の画面上で
openDirFC.setFileFilter(dirFilter);の行のsetFileFilterの部分に赤波線が引いてあって
「型 JFileChooser のメソッド setFileFilter(FileFilter) は引数 (FileFilter) に適用できません」
と言われます。setFileFilter(FileFilter)の引数は(FileFilter)で合っているかと思いますが、
どうして適用できないのでしょうか?原因に見当がつきません。よろしくお願いします。
98:デフォルトの名無しさん
09/01/24 21:49:14
>>97
java.io.FileFilter
javax.swing.filechooser.FileFilter
99:デフォルトの名無しさん
09/01/24 21:58:33
>>98
ありがとうございました
import java.io*;
import.javax.swing.*;
は記述していたのですが
import.javax.swing.filechooser.FileFilter;
を追加したらできました。
100:デフォルトの名無しさん
09/01/25 03:01:44
javaゲームプログラミング アルゴリズムとフレームワークとかいう表紙に二次キャラの絵が描いてある本
やったことある人いませんか?
そこの2章スプライト作成のsprite.java
で最後の記述にDraw draw=null;ってありますけど
Drawは標準的クラスでないからもちろんエラーでます
この本なんなんですか?
101:デフォルトの名無しさん
09/01/25 03:25:29
あれってオリジナルキャラだと思ってたんだけど元ネタがあったのか
最初から100回嫁
102:デフォルトの名無しさん
09/01/25 03:44:19
>>100
添付のCDにクラスを定義したソースファイルがある。
103:デフォルトの名無しさん
09/01/25 04:12:46
>>102
トン
104:デフォルトの名無しさん
09/01/25 19:29:52
>>100
(^ω^;)
105:デフォルトの名無しさん
09/01/25 23:48:15
100ですが第6章のBlock.javaで
必要なクラスをすべておいてもBlockクラスが見つからないってエラーが出ます
付属CDのソースを使っても同じエラーが出ました
何が悪いんでしょうか?この本Game2Dクラスの説明がはしょってあるのでまったくわかりません
この本なんなんですか?
106:デフォルトの名無しさん
09/01/26 00:04:35
ソフトバンクパブリッシングに文句言え
107:デフォルトの名無しさん
09/01/26 00:05:36
>>106
文句いいたいのはヤマヤマなんだけど
これでもし俺がなんか単純なミスで動作してなかっただけなら恥ずかしいし・・・
だからお前らに聞いてるの!!
108:デフォルトの名無しさん
09/01/26 00:08:26
ここで晒す恥のほうが恐ろしい結果を招くことを知らぬ勇者め。
109:デフォルトの名無しさん
09/01/26 00:12:38
>>107
おまえ巨大ウンコだろ?
110:デフォルトの名無しさん
09/01/26 00:13:03
エスパーするとBlock.javaの内容をここに貼りつけるかロダにあげろってことか
そのためにはその本を買うか立ち読みしてこないといけないんだけど、
それを見ず知らずのおまえのために誰かがやってくれるといいね
111:デフォルトの名無しさん
09/01/26 00:16:58
>>110
いや著名な本だから誰かもってるだろ
俺もここで進められた本だし
何より俺はお前らを信じてるよ
112:デフォルトの名無しさん
09/01/26 00:30:06
まあ、二版が出てるくらいだから売れたんだろうけど、
タイトルにゲームと付いているような入門書を選ぶやつは、
大概脱落してここにいないだろ。
113:デフォルトの名無しさん
09/01/26 00:33:10
>>112
そうか?結構面白いぞこれ
初心者のおれにはちょっと説明足らずな点をどうにかしてほしいんだけどな
114:デフォルトの名無しさん
09/01/26 01:34:23
そもそも初心者が応用から始めるな。まず基礎からだろ。
115:デフォルトの名無しさん
09/01/26 01:44:23
>>105
第6章にBlock.javaなんて無い、5章だろ
だいたい、Block.javaは、Blockを定義しているんだからBlockが見つからないとかあり得ないだろw
なんかタイプミスしてるはず
116:デフォルトの名無しさん
09/01/26 01:54:06
手っとり早く絵がうまくなる方法ないすか?
117:デフォルトの名無しさん
09/01/26 02:12:50
>>115
そうだ5章です、すまぬ
しかしBlock.javaもCD内のソスコードを使ったけどダメなんすよ
Block.java
Draw.java
DrawRect.java
Game2D.java
InputEventTiny.java
Queue.java
ScrollSpace.java
SoundPalette.java
Sprite.java
これらすべてCD内のものをそのまま持ってきました
んで結果
Error : I can not create Game2D or newGame2D().
ありえないだろw
118:デフォルトの名無しさん
09/01/26 02:16:30
エラーメッセージもっと貼れ
119:デフォルトの名無しさん
09/01/26 03:05:30
>>118
Error : I can not create Game2D or newGame2D().
java.version : 1.6.0_11
java.vendor : Sun Microsystems Inc.
java.lang.ClassNotFoundException: Block
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at info.Game2D.startGame(Game2D.java:140)
at info.Block.main(Block.java:14)
これで全部です
何度もぐぐったけど解決できません お願いします
120:デフォルトの名無しさん
09/01/26 03:25:10
画像とかのリソースファイルがないんじゃね?
121:デフォルトの名無しさん
09/01/26 03:45:24
>>119
> java.lang.ClassNotFoundException: Block
> at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
Block クラスがクラスローダーで見つからない、と。
> at java.lang.Class.forName(Class.java:169)
> at info.Game2D.startGame(Game2D.java:140)
Game2D.java の140行目で Class.forName を呼び出しているようだが、
引数は恐らく "Block" なのだろう。
"info.Block" なのに "Block" とは之如何。
122:デフォルトの名無しさん
09/01/26 04:54:48
>>121
Block.javaの14行目です
public static void main(String args[]){
startGame("Block");
}
Game2D.javaの140行目です
Game2DMain newGame2DMain() {
try {
Class argClass[] = {getClass()};
Constructor g2dmCon
= Class.forName(GAME_MAIN_NAME).getConstructor(argClass);
Object initArgs[] = {this};
return (Game2DMain)(g2dmCon.newInstance(initArgs));
} catch(Exception e) {
infomation("Error : I can not create Game2DMain.", e);
}
return null;
}
引数はきちんとBlockになってるようですがわかりません
123:デフォルトの名無しさん
09/01/26 04:57:09
訂正
136 static void startGame(String game2dClassName) {
137 GAME_NAME = game2dClassName;
138 try {
139 Game2D game2D = (Game2D)(Class
140 .forName(game2dClassName).newInstance());
141 game2D.newGame2D();
142 } catch (Exception e) {
143 infomation("Error : I can not create Game2D or newGame2D().", e);
144 }
145 }
124:デフォルトの名無しさん
09/01/26 10:55:42
各ファイルを置くフォルダの構成が間違ってるんだろ
もっかい本の該当箇所を読み返せば?
125:デフォルトの名無しさん
09/01/26 16:44:51
import java.applet.Applet;
import java.awt.Graphics;
/*<applet code="App2.class" width="500" height="500"></applet>*/
public class App2 extends Applet {
public static void main(String args[]){
int []a= {1,2,3,4,5};
paint(,a[0],a[1],a[2],a[3]);
}
public void paint(int i, int j, int k, int l) {
Graphics.drawLine(i,j,k,l);
}
}
こういう風にmainメソッドで引数を作って、下でアプレットで線を引くようなプログラムを作りたいんだが、
どこをどう直せばいいんですか?(Graphics g)を引数に追加してg.drawLineってやると、mainメソッドでどうそれを代入すればいいかわからないんだが・・・
126:デフォルトの名無しさん
09/01/26 17:08:31
ImageIO.write
で、既存のファイルに書き込みをすると、PCごと落ちてしまいます。
皆さんもお試し下さい。
127:デフォルトの名無しさん
09/01/26 18:40:55
>>126
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
public class Hoge {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream("moge.jpg");
BufferedImage im = ImageIO.read(in);
in.close();
OutputStream out = new FileOutputStream("moge.jpg");
ImageIO.write(im, "jpg", out);
out.close();
}
}
落ちたりしないよ?
この場合、画質の劣化や圧縮率の違いでファイルサイズが変わるけど、
writeによる上書きでPCが落ちるなんてことはない。
128:デフォルトの名無しさん
09/01/26 19:11:00
>>125
つっこみどころが多すぎる
きちんと初心者向けのjavaの参考書を買って頭から読んで理解することから始めた方がいい
買うときは内容を見てグラフィックス関連やアプレット関連の記述がそれなりにあるものを
129:デフォルトの名無しさん
09/01/26 19:29:35
>>125
すまん、マジで基本からやりなおしたほうがいいと思う
130:デフォルトの名無しさん
09/01/26 19:47:30
>>127
OutputStreamではなく直接Fileを指定する。
上書きの場合、100%リセットする。
おそろしいことです・・・・。
131:デフォルトの名無しさん
09/01/26 20:24:25
>>125
(1) まずアプレットとして正常に動くものを作成する。
通常paint(Graphics g)はアプレット作成者が描かせるために直接呼び出すものではなく、
アプレット画面が描かれる時にこういう風に描いてねという作成者の要求を書いておくメソッド。
呼び出しはアプレット実行環境が必要な時に呼び出してくれる。
そして、paintではなくinitやstartメソッドで描画のためのパラメータを設定して、
それをpaintで読んで描くようにする。
パラメータの授受にはアプレットクラスに必要なだけインスタンス変数を定義すれば十分。
(2) そのアプレットをアプリケーションとして動かす。
Appletクラスもグラフィックコンポーネントの一種なので、
Frame等のトップレベルウインドウを作成してそれにaddすれば表示できる。
ただ、アプレットの場合、init、start、stop、destroyの四つのメソッドが
アプレット実行環境から呼ばれることが前提になっているので、
アプリケーションから動かす場合は、開始時にinitやstartを呼び出し、
終了時にstopやdestoryを呼び出すようにする。
ただ、オーバーライドしていないメソッドは呼び出さなくてもいい。
そしてmainからアプレットへのパラメータの引渡しは、
paint用に定義したインスタンス変数を使えばいい。
initやstartでgetParameterで設定するパラメータを読み取る形にしているのなら、
アプリケーション側では、AppletStubのgetParameterをオーバーライドして、
mainで決めた値から得たパラメータ値を返すようにしたものをAppletに設定するといい。
あまりまじめに作ると自作アプレットビュアとかになるのでやりすぎは禁物。
なんにせよjavaのグラフィックフレームワークの使い方を初歩から勉強した方がいいと思う。
132:デフォルトの名無しさん
09/01/26 20:34:16
>>130
import java.io.*;
import javax.imageio.ImageIO;
public class Hoge {
public static void main(String[] args) throws IOException {
ImageIO.write(ImageIO.read(new File("moge.jpg")), "jpg", new File("moge.jpg"));
}
}
全然問題なく実行できるんだが? JavaのバージョンとかOSは何?
133:デフォルトの名無しさん
09/01/26 20:42:31
自分で作成したjarファイルの中に外部ライブラリjarを埋め込むにはどうすればよいのでしょうか?
複数のjavaファイルをコンパイルしMyApp.jarにまとめました。
外部ライブラリ(log4, commons-io, commons-*等)をMyApp.jarと同じディレクトリに配置しclasspathに記述することで動作確認できました。
MyApp.jarにライブラリファイルを単に追加しただけだと
実行時に「ミツカラネーヨ」と怒られてしまいます。
134:デフォルトの名無しさん
09/01/26 20:50:48
Fat JarとかOne-JARとかでぐぐってみる
135:デフォルトの名無しさん
09/01/26 21:20:15
>>132なんですって!?自分の環境がおかしいだけなのか!?
OSはXP,Javaは1.6.0_11
いや、もう忘れてください。deleteしてからwriteしたら何事も無く動いたんで・・・
夢でも見ていたんでしょう・・・
136:デフォルトの名無しさん
09/01/26 22:11:30
おい結局何のアドバイスもないの?
何、お前らの実力ってその程度だったの?拍子ぬけだわ〜
137:133
09/01/26 22:24:32
>>134
キーワードでぐぐったら有益な情報が見つかりました。
ありがとうございます。
138:デフォルトの名無しさん
09/01/26 23:53:03
>>136
いろいろアドバイスもらってるじゃん。それもわからないようじゃどうしようもない。
このスレは初心者は歓迎するがバカは歓迎しない。
139:デフォルトの名無しさん
09/01/27 00:11:53
>>138
何と勘違いしてるんだ?このアホ
140:デフォルトの名無しさん
09/01/27 00:18:54
IDでないから誰が誰やら
せめて自分の番号ぐらい書け糞野郎
141:デフォルトの名無しさん
09/01/27 01:15:22
>>139
水の中に入れると、どうして乾いたウンコは砕け散るんですか?
142:デフォルトの名無しさん
09/01/27 01:46:05
いろいろアドバイスもらってるじゃん。それもわからないようじゃどうしようもない。
このスレは初心者は歓迎するがバカは歓迎しない。
↑って、答えられないときのここの常連の常套句だよなwwうける。
143:デフォルトの名無しさん
09/01/27 03:03:56
馬鹿は初心者を免罪符にするから嫌われるんだよね。
初心者だろうが、玄人だろうが、ちゃんとまず自分で勉強して、何が理解できなかったのか具体的に書いて、アドバイス受けろよ。
上達する香具師は(初心者や玄人に限らず)、質問の仕方もウマい。
144:デフォルトの名無しさん
09/01/27 05:28:35
980 Mr.名無しさん New! 2009/01/27(火) 05:28:00
>>975
スレリンク(tech板)
ここ
この138と143を徹底的に痛めつけてほしい
145:デフォルトの名無しさん
09/01/27 05:29:11
痛めつけにきたけど?
146:デフォルトの名無しさん
09/01/27 05:29:34
おうおう!毒雑舐めてる奴どいつよ?
147:デフォルトの名無しさん
09/01/27 05:31:31
ウッサンに絡んでる奴どいつだよ?
148:デフォルトの名無しさん
09/01/27 06:28:59
>>144-147
ところで鼻糞って食えるんですか?
149:デフォルトの名無しさん
09/01/27 13:16:06
ネットから有用な情報を引き出したいなら、
ネットに混乱を持ち込んじゃいけない。
150:デフォルトの名無しさん
09/01/27 14:57:20
伸びてると思ったら馬鹿が現れたのか
151:デフォルトの名無しさん
09/01/27 18:03:59
コレクションについてよくわかんないんだけど
これって、オブジェクト版の配列なのか?
しかも、めちゃくちゃ使いやすいように改良したやつ
152:デフォルトの名無しさん
09/01/27 18:12:51
まあそんなもん
153:デフォルトの名無しさん
09/01/27 18:17:38
わかった、どうも
なんか、難しそうな名前付けてたからやる気が失せたが
実際は超簡単だった
154:デフォルトの名無しさん
09/01/27 18:19:08
オブジェクト版の配列と聞いてArrayListを思い出した
155:デフォルトの名無しさん
09/01/27 18:19:29
Enumの初期化について質問です。ネイティブライブラリを読み込んで、
そこから得られる値をJavaの定数にマッピングするクラスなのですが、
初めはこんな感じで実装していました。
public class TestConst {
static { System.loadLibrary("libNativeHoge");}
public static final int A = NativeHoge.getA();
public static final int B = NativeHoge.getB(); ...
次にオシャレにEnumで実装しようとすると、static{}句をEnumの定義に
含めることが出来ないために怒られます。
public enum TestEnum {
static { System.loadLibrary("libNativeHoge");} // 文法エラー
A(NativeHoge.getA()), B(NativeHoge.getB()), ...
private final int nativeVal;
TestEnum(int nativeVal) {this.nativeVal = nativeVal;} ...
さらに、このEnumクラスをユーティリティクラスで包んで、そちらに
static{}句を移すとコンパイルは通るもののTestEnumの初期化前
にstatic{}句が呼ばれません。
public class TestUtil{
static { System.loadLibrary("libNativeHoge");} // 切ないことに、呼ばれない
public static enum TestEnum {...
Enumの初期化前に確実にある処理(上記例ではSystem.loadLibrary)
を実行する方法は何か無いでしょうか?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5045日前に更新/227 KB
担当:undef