【初心者】Java質問・相談スレッド120【歓迎】
わろす
java EEの本によく出てくるEnumeration型って何なんですかね・・・ java SEのコレクションと何か違うんでしょうか?
>>919 ちゃんとイベントディスパッチスレッド上でやってる?
>>951 アプレットのことかな?mainメソッドっていうのは、いわゆる普通のアプリケーションで
どこからプログラムをスタートさせるのか書かないと実行マシン(仮想マシン)が、どこからはじめたらいいか
わからないからmainメソッドを書くんだよ。必ずmainメソッドから始まるようにするんだ。これはC言語とかC#でもいっしょ。
アップレットやサーブレットは決まった処理は決まったメソッドを呼ぶようにしてるから
メインメソッドがなくても、きまった処理が必要になったときに決まったメソッドが呼ばれるようになっているんだよ。
>>931 です
ウイルスキラーを削除したらインストールできました。
ウイルスキラーは終了するだけでは無理でした。
960 :
デフォルトの名無しさん :2008/11/16(日) 00:42:18
eclipseで import javax.media.opengl.GL; import javax.media.opengl.glu.GLU; ってパッケージのimportができないんだ eclipseでパスの追加はしてある /usr/lib/jvm/default-java/jre/lib/ext/jogl.jar /usr/lib/jvm/default-java/jre/lib/ext/jogl-natives-linux.jar なんでダメなんだろ
jogl.jarの中を見ると GL.classがあるのは /net/java/games/jogl/GL.class という場所だ ひょっとしてパッケージ宣言とimportが かみ合ってないんだろうか
962 :
903 :2008/11/16(日) 00:57:51
>>956 イベントディスパッチスレッドで実行しても同じ現象が発生してます。
JavaVMのバグなのか自分のプログラムのバグなのか切り分けができません。
正直疲れました。
SwingUtilities.invokeLater(new Runnable(){
public void run(){
try{
for(int i = 0; i < 1000; i++){
TestJFrame frame = new TestJFrame();
frame.display();
Thread.sleep(1000);
}
} catch(InterruptedException e){
e.printStackTrace();
}
}
});
>>962 for文の中の前2行(new と display)を invokeLater に実行させたら?
>962 イベントディスパッチスレッドをスリープで止めてるから他のものが描画されない。
どうしてもすぐ再描画したいなら、 RootPaneのpaintImmediatelyを使いなはれ
イベントディスパッチスレッドは止めちゃダメ。 Swing コンポーネントの描画も EDT で行われる。 どうしても1秒間止めたいなら javax.swing.Timer で1秒後に display() を 呼ぶようにすればいい。
967 :
903 :2008/11/16(日) 02:32:32
>>963 >>964 >>965 >>966 ありがとうございます。
Thread.sleep(1000)をはずしてTimerでやってみたましたが、
やはり数十回に1回は真っ白なウィンドウが出てしまいます。
その時のウィンドウはキーイベントを受け取っている(KeyListenerで確認)ので、
完全に固まっているわけではなく、描画だけが追いついていない様子です。
そんなに重い処理でもしているのでしょうか?私はそうは思えないです。
試しにpaintImmediately()やrepaint()を実行しても現象変わらずです。
サーブレットの仕様でインクルードというのがありますが インクルードすることによって何が出来るようになるんですか? ServletDispatcher(サーブレット名).include(req,res) これで指定したサーブレットのメソッドが使えるようになったりするんでしょうか?
>>968 include っていうのは、そのファイルに色々サーブレットの処理を書いておいて
それを表示するってことだよ。
たとえば、エラーページなんか表示したいとき、ひとつのページごとに違うエラーページつくってたら
めんどくさいでしょ?上の君の貼った例ServletDispatcher(サーブレット名).include(req,res) だと
色々なページでエラーがおきたら、そこのURLに飛ばしてそこでinclude文使ってあるファイルをインクルードすると
エラーページは1つ書いておけばいいだけになるんだよ。
サーブレットのメソッドもつかえるようになるんだけど、ページの取り込みというのが目的だよ。includeファイルにエラーのページの内容を書いておけば
そこで処理すればいいからね。ひとつのインクルードファイルだけですむんだ。include文でよまれたインクルードファイルは処理して
表示されるんだ。たとえば、a.classでb.classをインクルードするとa.classの中のb.classをインクルードした場所に
bのサーブレットで書いた部分が表示される。
971 :
デフォルトの名無しさん :2008/11/16(日) 18:56:35
以下の条件のようなクラスDollarを作成しています。 1.Moneyのサブクラスである。 2.コンストラクタにdouble型で値を入れるとその値を持つオブジェクトを生成する。 3.toStringメソッドを使うと、「$(コンストラクタに入れた値)」となる文字列を得る。 この特に条件2をどうしても実現できません(この場合のオブジェクトを生成する方法がわからない)。 アドバイス、ヒント等よろしくお願いします。
private double value; public Dollar(double value) { this.value = value; } でいいの?
973 :
デフォルトの名無しさん :2008/11/16(日) 19:05:08
>>972 すいません。クラスMoneyが抽象クラスなんです。。
abstract public class Money {
private double value;
protected Money(double value){
this.value = value;
}
abstract protected String getPrefix();
abstract protected String getPostfix();
@Override public String toString(){
return getPrefix()+String.valueOf(value)+getPostfix();
}
abstract public double getYenRate();
public double getValue(){
return value*getYenRate();
}
@Override public boolean equals(Object obj){
if(this == obj) return true;
if(!(obj instanceof Money)) return false;
Money m = (Money) obj;
return this.getValue() == m.getValue();
}
@Override public int hashCode(){
long v = Double.doubleToLongBits(getValue());
return (int)(v^(v>
>>32 ));
}
}
974 :
はんしょう :2008/11/16(日) 19:07:50
先の方に割り込む形になるのでしたら ごめんなさい JAVAのJBUILDER2005を見ています(正直使っているという状態ではまだないのです)が、 JPX(プロジェクト)ファイルを再BulidするのとMakeをするのとがメニューにあります。 1:この違いはなんでしょうか?一見どうちらを選択しての既存のものは実行できるか できないのか について言えば変わりはなかった。 2:幾つかのサンプルの内、上のようにJbuliderで実行をすると絵が出ますので、実行できるようになるですが Jbuliderのソフトを介さないで 実行できることはないでしょうか。 Javaは実行ファイル(正確な用語でないかもしれませんが)というものはないでしょうか? 例えばWindowsで言えば、拡張子.exeのファイルは直に、 あるいは FLASHの.swfファイルはIEで(ブロックは外して)開くことが出来る。同じflashの.flvファイルはWeb上で、起動ファイルを導入してしか見えない(Youtubeのように)。 JAVAはどうでしょうか? それと.JAVAという拡張子ファイルはソースファイルと理解してよいでしょうか?
>>973 なんで条件を後出しするの?
馬鹿なの? 死ぬの?
public Dollar(double value) { super(value); }
@Override protected String getPrefix() { return "$"; }
@Override protected String getPostfix() { return ""; }
976 :
デフォルトの名無しさん :2008/11/16(日) 19:12:03
>>975 申しわけございません。
ちなみにオブジェクトを生成っていうのはnew演算子を使う以外方法はないんですか?
977 :
デフォルトの名無しさん :2008/11/16(日) 19:23:43
ジェネリックスで行き詰まってしまったので助けていただけないでしょうか? 今作っているのは(例え話として)「引き出しクラスを指定できる可変長タンス」です。 public class Tansu { Class<? extends IHikidashi> hikidashiClass; ArrayList<IHikidashi> hlist; public Tansu(Class<? extends IHikidashi> hikidashiClass) { this.hikidashiClass = hikidashiClass; } public void addHikidashi() throws Exception {hlist.add(hikidashiClass.newInstance());} } Tansu tansu = new Tansu(ConcreteHikidashi.class); tanse.addHihidashi(); でタンスを作成して引き出しを追加します。ここまではOK。 ここでタンスの引き出しの中身を任意のクラスに差し替え可能にしようとしました。 public class Tana<NAKAMI> { Class<? extends IHikidashi<NAKAMI>> hikidashiClass; ArrayList<IHikidashi<NAKAMI>> hlist; public Tana(Class<? extends IHikidashi<NAKAMI>> hikidashiClass) { this.hikidashiClass = hikidashiClass; } ... で、中身が整数型なタンスを作成しようと Tansu<Integer> tansu = new Tansu<Integer>(ConcreteHikidashi<Integer>.class); とすると、".class"近辺が文法エラーで怒られてしまいます。 つまりジェリックスを利用して宣言されたクラスのClassオブジェクトを 入手したいのですが、これはどのようにすれば良いのでしょうか?
>>977 ConcreteHikidash の代わりに IntegerHikidash implements IHikidasshi<Integer> 使うとか。
979 :
デフォルトの名無しさん :2008/11/16(日) 20:16:59
>>978 あぁ、確かに出来ました。コードの何処かで
class IntegerHikidashi extends ConcreteHikidashi<Integer>{}
とか宣言しておいて、
Tansu<Integer> tansu = new Tansu<Integer>(IntegerHikidashi.class);
でエラーも警告も無しでコンパイルが通ります。助かりました。
しかし上記のような空の継承クラス宣言無しでスマートに出来る方法は
無いでしょうかね。
また以下のように引き出しのインスタンスを生成してそのクラスを渡して
も怒られるなど、まだまだ私にとってジェリックスには謎が多いです・・・
IHikidashi<Integer> prototype = new ConcreteHikidashi<Integer>();
Tansu<Integer> tansu2 = new Tansu<Integer>(prototype.getClass());
-> The constructor Tansu<Integer>(Class<capture#4-of ? extends IHikidashi>) is undefined
えっと、 SomeClass method(Class klass, String arg) { < xxxx を呼ぶだめの前処理 > Class ? x = new klass(<前処理結果 1>); return klass.any_method(arg, <前処理結果 2>); } てな事を書きたい場合、どうすればええの?
981 :
980 :2008/11/16(日) 21:09:56
説明が足りないと思われるので ぶっちゃけ Lisp 系の言語で良く定義される (with-open-file (ファイルオープン処理) 本体) (with-disable-interrupt 本体) 外側の () から抜けるときは exception だろうが何だろうが, ファイルクローズなり, 割り込み許可の処理をおわってブロック から抜けてくるような作りにしたい 本体は, 戻値と引数がマッチしていれば何でも OK みたいな………
>>981 つ無名クラス
クロージャ持つ言語に比べてめちゃめちゃ冗長になるけどな。
984 :
980 :2008/11/16(日) 22:24:53
ジェネリックス難しいお 勉強中
987 :
デフォルトの名無しさん :2008/11/16(日) 22:51:37
すごい基本的なんだけど・・・ コンパイルは、どうやるんですか? OSは、Windouwsです。 入門書を買ったんですか・・・コンパイルの方法が書いてない・・
>>984 何千個もインスタンス作るとかじゃなきゃ
速度は問題にならないっしょ。
>>985 使うだけなら比較的簡単。
言語仕様については理解することを放棄した。
(理論的背景がさっぱりだ)
991 :
デフォルトの名無しさん :2008/11/16(日) 23:31:46
ジェネリクスを分かりやすく解説しているサイトはあまりないからね。
992 :
デフォルトの名無しさん :2008/11/16(日) 23:47:41
MoneyCollection クラスに格納されている各 Money のオブジェクトに対して、日本円に換算した合計金額を Yen オブジェクトで返す public Yen total() メソッドを実装するのですが、 格納されているのはMoneyのオブジェクトで返す時はYenオブジェクトにするという場合どのように すればいいですか?下のようにpublic Yen total()メソッドを実装しようとしたんですが、 失敗続きで。。。アドバイスお願いします。 import java.util.*; public class MoneyCollection extends ArrayList<Money> { public MoneyCollection(){ super(); } public Yen total(){ ??? } public void show(){ for(Money m : this){ System.out.println(m); } } }
>>987 http://www.smg.co.jp/seminar/java/でインストールすましたら (かならずPATHは設定する事)
コマンドプロンプト開いてcdコマンドで自分のソースファイルを保存したディレクトリに移動して
javac ファイル名とコマンドするだけ。cdはコマンドプロンプトが作業するディレクトリを移動するコマンド。
たとえば、c:\javaフォルダにソースファイルを保存したら、コマンドプロンプトを開いてcd c:\javaとすれば
移動できる。そこで、javac 保存したファイル名 とコマンドをうてばコンパイルできる。コンパイルの仕方は
→を参照。
http://www.stackasterisk.jp/tech/java/java01_03.jsp ちなみに、PATHっていうのは、
C:\Program Files\Java\jdk1.5.0_16\bin
↑
Javaのバージョン
と設定するんだけど、binフォルダにあるjavacがjavaコンパイラのこと。
だから、コンパイルするときjavac ソースファイル名 とするんだけど
コマンドプロンプトでプログラム起動するときはPATHに設定しておくと
プログラム名だけで起動できる。
PATHっていうのは、そういうもの。
995 :
994 :2008/11/17(月) 00:29:10
訂正 jdk1.5.0_16 ← これがJavaのバージョン。 だから、質問者がダウンロードしたバージョンにより、このフォルダ名が 変わっているはずだから、自分のフォルダ名をしっかり書くこと。 一度、マイコンピュータから順々にJavaのインストールしたフォルダ階層をくぐっていくといいよ。
ume
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。