【初心者】Java質問・相談スレッド116【歓迎】at TECH
【初心者】Java質問・相談スレッド116【歓迎】 - 暇つぶし2ch868:デフォルトの名無しさん
08/07/05 22:37:33
class MyCanvas extends JComponent{
private int scale = 100;
private Image img;
private Dimension size;

public MyCanvas(){
int[] pixelData = new int[240 * 240];
for(int i = 0; i < pixelData.length; i++) pixelData[i] = (255 << 24) | (int)(Math.random()*256*256*256);
MemoryImageSource mis = new MemoryImageSource(240, 240, ColorModel.getRGBdefault(), pixelData, 0, 240);
img = createImage(mis);
size = new Dimension(240, 240);
}
public int getWidth(){ return size.width * scale / 100;}
public int getHeight(){ return size.height * scale / 100;}
public void setScale(int scale){
this.scale = scale;
}

public void paintComponent(Graphics g){
g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
}
}
}
ソースコード終わり。getWidth()とかオーバーロードしてるのがまずいんですかねぇ。。

869:デフォルトの名無しさん
08/07/06 03:16:22
>>867
スクロールペインで全体の一部を表示する為の機能なので、通常の使い方ではないのでは?

真ん中に表示だと、こんな感じ。
URLリンク(rg550.hp.infoseek.co.jp)

870:デフォルトの名無しさん
08/07/06 04:07:52
>>869
ごめんなさい
スクロールできてなかった。
URLリンク(rg550.hp.infoseek.co.jp)

871:デフォルトの名無しさん
08/07/06 08:28:52
JPanelにBufferedImageをadd出来た気がする

872:867
08/07/06 09:50:38
>>869,870
うおお。なるほど!
paintComponent のほうで調節するんですね。。
これなら使えそうです。ありがとうございました。

873:デフォルトの名無しさん
08/07/06 10:32:07
質問です。

今、Java で大量に同時に画像を読み込むプログラムを書いてるのですが、
-Xmx オプションで 1GB くらい確保しても、OutOfMemoryError がでてしまいます。

Windows には物理メモリが足りなくなったときに HDD をメモリに見立てた
仮想メモリというものがあると思いますが、これを Java で使うことはできない
んでしょうか?

874:デフォルトの名無しさん
08/07/06 10:42:40
それで足りないならば設計を疑えよ
どっかに大きなボトルネックあるだろ、常考
おおかた全部配列とか馬鹿食いのオンメモリなんだろうが

875:873
08/07/06 10:48:34
>>874
そうです。画像データは全部配列です。。。
int[] pixelData = new int[2000 * 2000];
みたいな画像データを20~50くらいメモリに持ってます。
同時に表示することもあります。

表示するサイズは小さいサムネイルサイズなので、
それだけ残して、元データは HDD に保存してもいいんですけど、
VM が物理メモリを勝手に使ってくれるというのは
結局同じようなことなのかと思ったので質問しました。

VM が全部解決してくれたら、プログラマは楽だなぁと。。

876:デフォルトの名無しさん
08/07/06 10:55:28
画像のクラスを使わないであえて配列でしてるのか・・

877:873
08/07/06 10:57:48
>>876
あえてというか、画像クラスの使い方がわかってません orz
32bit グレースケール
32bit x 3 の RGB 画像
これを保持できる画像クラスがあればそれで代用したいですが。

878:デフォルトの名無しさん
08/07/06 11:12:03
配列はなるべく連続した領域をメモリに確保しようとするから効率は最悪
そもそも、bmpみたいな形式でオンメモリに持っている時点でアウト
素直にImageクラスなり使え、不満になったら自作するか拡張しろ

879:デフォルトの名無しさん
08/07/06 11:15:04
むしろ画像を使おうとしてどうして配列を思いついたほうがすごいな
ググってもImageとかBufferedImageとかしか出ないと思うんだが

880:873
08/07/06 11:17:48
>>878
なるほど、効率が最悪なんですね。。。

ただ、高速化のために配列のデータを C++ で書いた DLL に渡して
ゴリゴリ画像処理もしたりしてるので、難しいかもしれません。。

まぁ、最初から明示的にメモリを解放できる C++ で作った
ほうがよかったかもしれませんね。。。

881:デフォルトの名無しさん
08/07/06 12:14:41
>>873
DLL使っているならば最初からC++で書けよ
なんでJava使うのか意味わからね
言語の選択方法から学んだほうがいいぞ

882:デフォルトの名無しさん
08/07/06 12:18:58
サムネイルを表示した後も、プログラム内でくわえ込んでいるようなこと書いてるから、
C++で書いても同じことでは?

883:デフォルトの名無しさん
08/07/06 12:26:10
>>873
OS が仮想化してようがなんだろうが、VM に最大 1GB だと言えばそれしか使えないだろ。
なんだったら 100GB でも 100TB でも要求してやれば?
結局やることをやらにゃならんことが分かるだろw

884:デフォルトの名無しさん
08/07/06 12:35:22
結論:Javaは糞

885:873
08/07/06 12:38:19
周囲にプログラマーが居ないので勉強になります。助かります。m(_ _)m

>>881
もっともな意見です。ただ、
・Java での画像処理関連の資産を使いたかった
・開発当初は高速化の必要性がなかった
・開発当初は VC++ を持ってなかった(笑
という感じで、こうなってます。
あとやっぱり開発環境は Eclipse が好きなので、、

>>882
そうなんですけど、使わなくなった画像とかを gc がちゃんと
回収してくれてないような気がして。。
しっかり解放してないからかもしれませんが。。

>>883
-Xmx で 5000M とか指定すると VM が起動しないのですが。。
それとも何かやりかたがあるのでしょうか

886:デフォルトの名無しさん
08/07/06 12:54:38
>>885
>-Xmx で 5000M とか指定すると VM が起動しないのですが。。
すまん、回りくどかったか。
「仮想化さえされてれば*無限に*メモリがつかえる」と勘違いしてるように見えたので
「無限に取って見れ」と言いたかったのだ。
5000M 指定で VM が起動できない理由は自分で調査してもらうとして、仮にそれで動いても
「大量に同時に画像を読み込むプログラム」に足りてるかどうか分からない。
結局いつかは Out of Memory になる可能性があるだろう。
gc の回収が間に合わないかもしれないしな。
それなら結局どこかでメモリ使用量を抑える(ファイルベースで動くとか)様にせにゃならん。
これでどうかな?

887:デフォルトの名無しさん
08/07/06 13:01:08
>>875
おまい、ちょっとは消費メモリ見積れ。
4(intのサイズ) * 2000 * 2000 = 約16MB、それが50個あったら800MB、
その配列以外にもいろいろリソース使ってるはず(サムネイル生成とか)
だから、そりゃ1GBじゃ足りなくなるだろう。
GCは、使ってない領域を解放するだけで、使ってる領域をどうにかして
くれるわけじゃないぞ。

888:873
08/07/06 13:06:25
>>886
なるほど。わかりました。

>それなら結局どこかでメモリ使用量を抑える(ファイルベースで動くとか)様にせにゃならん。
これをJVMが勝手にやってくれると助かるなぁと思ったんですよね。

C/C++ に比べて Java はメモリスペースを意識しなくてプログラミングできるのが
利点だと思っていますので。。。(勘違いでしたらすいません。)

889:デフォルトの名無しさん
08/07/06 13:11:20
>>885
> 使わなくなった画像とかを gc がちゃんと回収してくれてないような気がして
お前が使わないつもりでも、「どこか」からたどれるルートがあれば、それは「使われてる」と見なされる。
例えば、
static int[] img = new int[2000 * 2000];
なんて書いてあったら、img に null を入れん限り永遠に解放されない。

890:デフォルトの名無しさん
08/07/06 13:13:48
>>888
勘違い。free/deleteを自動的にやってくれるだけ。

891:873
08/07/06 13:27:17
うーん、なるほど。

Javaでは、ポインタが無かったり、GCがあったり、明示的に解放できなかったり
するんで、JVMが「メモリのことは忘れてくれ」って言ってくれてるんだと拡大解釈していました。

ソフトの設計のほうを見直すことにします。

ただ、画像をファイルに保存して、配列を解放するようにしても
gc が追いつかずにOutOfMemoryが出ることはありそうですが。。。

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

892:デフォルトの名無しさん
08/07/06 13:29:24
言い切ってしまえば、VM にメモリ仮想化は無い。
(世の中全部の VM を知ってるわけじゃないから「ある」と言われたらそれまでだがw)
だから、自分でしろ。

893:デフォルトの名無しさん
08/07/06 13:40:01
VMってマジで物理メモリでしかやりくりできないの?
Windowsに乗ってるアプリとは思えない仕様だね

894:デフォルトの名無しさん
08/07/06 13:41:49
>>891
VM規定に反してなければOutOfMemoryError出す前にGCが未使用メモリを回収してるはず。
強参照しっぱなしなのに「解放してるはず」と思い込んでる事は、かなり頻繁にある。

895:デフォルトの名無しさん
08/07/06 13:57:58
>>893
それはおまえの読み違いだ。

896:デフォルトの名無しさん
08/07/06 14:07:10
JPAでOneToManyのMany側を絞り込み検索した状態で
One側を得るようなJPQLはどのように書けばよいのでしょうか。
例えば従業員の作業日誌の直近5日分を
全ての従業員分取得するといったケースです。

897:896
08/07/06 14:18:27
あ、ORMスレがあったのでそちらに移動します。
こちらはクローズでお願いします。

898:デフォルトの名無しさん
08/07/06 18:07:40
JToolBarのボタンにつくフォーカスの四角い枠の表示ってどうやったら操作出来るでしょうか?

899:デフォルトの名無しさん
08/07/06 18:37:24
しつこくすみません。
どなたか>>618を教えていただけないでしょうか?

900:898
08/07/06 18:37:56
すいません自己解決しました。

901:デフォルトの名無しさん
08/07/06 19:01:14
>>899
設定しなおせば?

902:デフォルトの名無しさん
08/07/06 19:18:10
>>901
いえ、設定し直すもなにも、methodをPOSTに設定しrequestPropertyを設定するまではいいのですがその後コンテンツを取得する際、
内部的にrequestMethodを初期化(あるいは再設定?)するらしく、設定できないのです。

903:デフォルトの名無しさん
08/07/06 20:00:52
>>902
「その後」と言うが良く分からない。
こんな風なGETやPOSTじゃないの?
URLリンク(www.hpc.cs.ehime-u.ac.jp)

904:デフォルトの名無しさん
08/07/06 20:35:29
1.POSTでログイン時の情報を送る。
2.サーバーからSet-Cookieなどの返答がある。
3.GETでページデータを取得。

POSTに設定後各種プロパティを設定し、getInputStream()をした時点で内部で上の1~3を行うようで、
1の接続ではMessageHeaderに設定したプロパティがそのまま使われるので大丈夫なのですが、3で再び接続する際勝手に各プロパティを設定されてしまいます。
説明が分かりにくくて申し訳ありません。

905:デフォルトの名無しさん
08/07/06 20:52:43
1.リクエストプロパティの設定
2.サーバーからレスポンスを得る
3.InputStreamなどでデータを読む

一回の接続でこれを行うので、ほかにも処理をしたい場合は再度1~3を繰り返す。
それともリダイレクトの事なのだろうか?

906:デフォルトの名無しさん
08/07/06 21:06:56
>>899
そのコードをアプしてくれ。

907:デフォルトの名無しさん
08/07/06 21:20:46
>>904
1 → 2 と 3 は別だろ。
1 の POST に関する処理は 2 で終わってる。
1 のために作った HttpURLConnection に対しての getInputStream と、
3 の GET と勘違いしてないか?

908:デフォルトの名無しさん
08/07/06 21:32:57
ちなみにPOSTで送られてくるクッキーはGET時に自分で設定しないと
送られないのは分かっているか?

909:デフォルトの名無しさん
08/07/06 21:45:37
>>905
その通りでした。確かにリダイレクト時にリクエストプロパティが再設定されてしまうようですが、今回はそれが原因ではありませんでした。

クッキーについては、CookieManagerにCookiePolicyとしてとりあえずCookiePolicy.ACCEPT_ALLを設定し、一応その情報が送られていることをパケットキャプチャで確認しておりましたが、そのクッキーがいくつか欠けていたようです。
サーバーからSet-Cookieとして送られてきていて、全て受け入れるようにしているにも関わらず一部しかクッキーが設定されていないのが現在の疑問です。
まだしばらく検証してみます。

いろいろな方がわざわざ解決しようとしていただいたのに、お気持ちを踏みにじるようなことになってしまってすみません。

910:デフォルトの名無しさん
08/07/06 22:08:01
ava.util.Map.Entryってどういう意味があるの?
どういうときに使うかを教えてください。

911:デフォルトの名無しさん
08/07/06 22:15:57
それはKeyとValueのペアを表すオブジェクト。
基本的にはMapの内部で使われるだけで、あんまり意識しなくていい。

意識する時はKeyとValue両方の値をイテレートする時くらいかな。
keySetのイテレートからgetで値を取り出す手法より速いからね。

912:デフォルトの名無しさん
08/07/06 23:37:02
>>899
これ、何に使うのかが気になる。

913:デフォルトの名無しさん
08/07/06 23:46:04
テストの自動化とか、日次処理とか用途はいろいろ考えられるね。

914:デフォルトの名無しさん
08/07/06 23:46:32
すみません、質問です。

現在JavaからMS-DOSのバッチファイルを呼び出して処理したいと思っています。
Runtime.exec()を使用して呼び出し・処理自体は成功しているのですが
バッチ内部からの返り値をJava側で取得する事はできないのでしょうか?

915:デフォルトの名無しさん
08/07/06 23:46:56
>>912
fx取引でもするつもりなんじゃね

916:デフォルトの名無しさん
08/07/07 00:01:37
Process#exitValueじゃね?


917:デフォルトの名無しさん
08/07/07 00:32:32
>>916
Exitvalueで値は帰ってくるのですが、常に0となってしまいます。
バッチ内では明示的に1を返しているのですが・・・
何かやり方がまずいのでしょうか・・・。

918:デフォルトの名無しさん
08/07/07 00:39:47
>常に0となってしまいます。
バッチの呼び出しに成功してるから0なんじゃね?
ここらへんwinとlinuxで実装違った気がする。
linuxで同じこと試せる?

919:デフォルトの名無しさん
08/07/07 00:52:14
バッチって
cmd /c batch.bat
って呼び出すんだっけ?


920:デフォルトの名無しさん
08/07/07 00:52:20
>>918
>linuxで同じこと試せる?
今のところLinuxの環境がないですね・・・
会社の方にあったかもしれないので探してみます。

>バッチの呼び出しに成功してるから0なんじゃね?
ExitValueとは、バッチでの処理で返した値というより
バッチを動かすプロセス自体の成否結果を取得する、というイメージでしょうか?

921:デフォルトの名無しさん
08/07/07 00:55:53
もしexitValueでの解決が難しいようなら、ステータス(に相当するモノ)を
echoして、Processの出力を読むことで代替できるかもしれない。
敗北感ありまくりだけど。


922:デフォルトの名無しさん
08/07/07 00:56:56
public static void main(String[] args) {
// TODO Auto-generated method stub
Runtime rt = Runtime.getRuntime();
try{
Process p = rt.exec("hoge.bat");
p.waitFor();
System.out.println(p.exitValue());
}catch(Exception ex){
ex.printStackTrace();
}

}


hoge.bat中身は、
exit 1
のみ。

当方の環境は、windows
これで 1 って表示されるよ。

923:デフォルトの名無しさん
08/07/07 01:10:51
>>921
アドバイスありがとうございます。
解決が難しい場合はやってみたいと思います。

>>922
サンプルまでつけて頂きありがとうございます。
やはりExitValueでバッチの返り値自体を取得できるのですね・・・
当方もWindowsなのですが、なにか環境の問題なのかもしれませんねorz
もう一度全体的に問題がないか見直してみます。

924:デフォルトの名無しさん
08/07/07 01:21:42
URLリンク(www.velocityreviews.com)

自分のとこでやったら0だったけど、Windows 2003 (Server?)では期待通りに
動いたとかいう古い投稿記事。


925:デフォルトの名無しさん
08/07/07 01:25:18
>>923
batの内容とソースうp

926:デフォルトの名無しさん
08/07/07 06:18:24
>>904
Cookieを決めるのはSet-Cookieだけではなくて、javascriptにも命令文が有った筈。

927:デフォルトの名無しさん
08/07/07 09:14:22
>>912
特にこれといって今のところは使う予定はありません。
単純に便利なクラスだなぁ~、といろいろ試してました。
>>926
他のブラウザで実行した場合の全てのクッキーがSet-Cookieで送られ、実際に設定されたクッキーもそれらであったため、それはないと思います。

928:デフォルトの名無しさん
08/07/07 11:44:51
Set-Cookieはサーバーサイドcookieでjsのはクライアントサイドcookieな。

929:デフォルトの名無しさん
08/07/07 12:14:20
そんなネタに釣られ熊

930:デフォルトの名無しさん
08/07/07 13:33:31
すみませんが質問、というか相談です。

アノテーションとその応用について、参考になるリンクや書籍をご紹介いただ
けないでしょうか?書籍は和書だとありがたいですが、なければ英語でも。

【コラム】ライトニングJava (26)
アノテーション(1) - Javaの大きな変貌、アノテーションの導入
URLリンク(journal.mycom.co.jp)

この連載を読んで興味を持ったのですが、どのような応用が考えられるのか、
あまり参考になる情報を見つけられませんでした。


931:デフォルトの名無しさん
08/07/07 15:06:00
すごいアホな質問で申し訳ありませんが、JUnitの3までは
TestAAAA#testBBBをTestSuite に追加するには

TestSuite suite = new TestSuite();
suite.addTest(new TestAAAA("testBBB"));

とかって出来ましたよね?
JUnit4はどう指定したらいいのでしょうか。

932:デフォルトの名無しさん
08/07/07 15:14:31
>>909
CookieManagerって期限判定がおかしくない?

933:デフォルトの名無しさん
08/07/07 15:31:35
>>931
URLリンク(www.google.co.jp)

934:931
08/07/07 16:51:55
いろいろ見てみたんですけど、基本的に
TestSuite suite = new TestSuite();
suite.addTest(new TestSuite(TestAAAA.class));

というやり方しか見つからない気がするのです。
これだと#testBBB()だけでなく、TestAAAAに記述された全テストメソッドが
実行されますよね?
4からはTestAAAAがtestCaseを継承していない以上、3までのTestCase(String name)
コンストラクタが使えないのは判るのですが代替方法が判りません。

935:デフォルトの名無しさん
08/07/07 18:03:20
>>932
Locale.setDefault(Locale.ENGLISH);
とすると期限を判定してくれることが分かった。

日本語ロケールでは、日付が読めないらしい。

936:デフォルトの名無しさん
08/07/07 20:09:24
質問させていただきます。
JavaとMysqlをつかって200万ほどのデータを扱っているのですが、そのデータは一週間ごとに毎回不特定の数が増えて
txt形式で送られてきます。これをデータベースに入れるときに、増えた行だけを新たに更新という形でMysqlを操作したいのですが、
たとえばデータが
2,600,000行→2,600,100行になったときに100行だけ追加したいのです。
プログラミングは初心者で、現在はテーブルのデータ全消し→一からファイル読み込み
という流れで30秒ほどかかります。
他にスムーズに行く方法があるのでしょうか?
質問が良くわからなかったら申し訳ありません。

937:デフォルトの名無しさん
08/07/07 20:19:01
>>936
Javaに関係する前の段階な気がするが。
その増えた分を既存分と区別することができるフィールドがあれば、
それを見て例えの100件を取り出してテーブルに入れればいいわけだ。
そしてその区別することが出来るフィールドが在るのか無いのかは
936しか分からんだろ。

938:デフォルトの名無しさん
08/07/07 20:19:09
すみません、フリーでお薦めJava開発ツールを教えてください

939:404
08/07/07 20:21:09
フリーなんだから使ってみりゃいいだろにw

940:936
08/07/07 20:29:16
>>937
確かにそうでした・・・Javaとは直接関係ないですね;
フィールドは日付と、あとは売り上げなどの数値だけです。
table(day date,data1 double,data2 double);
といった感じです。ファイルの日付が(08-97-07のような感じです)○日~読み取るということが出来るのでしょうか?
あぁ・・Javaじゃ無くなってしまってますね。。
すいません鬱陶しかったら無視してくださって結構です。

941:デフォルトの名無しさん
08/07/07 20:57:02
こんばんわ。

JAVA言語とは直接関係のない話になるのですが、
レンタルサーバでJAVAが使えるところって、どこも結構値が張りますよね。

お仕事とか教育機関で使ってる方は別にして、趣味のレベルでJAVAを使ってる人は、どこで活用してるんでしょうか。

自宅サーバとか、単独アプリケーションあたりは思い付いたのですが、
何か人とは違う面白い使い方してますっていうのがあったら紹介してもらえますか?

よろしくお願いします。

942:937
08/07/07 21:09:44
>>936
前回受け取ったデータから増えた分というのが売上日で判断付く
(「今MySqlに入っている売上日より後のものが追加分」等)のなら、
取り込み時に SELECT MAX(売上日) FROM 売上 とかやって、
その送られてきたtxtから一件ずつ読んでその条件に当たる分だけ追加。
200何十万件分をチェックするのにどれくらいかかるかはやってみるのが一番か。
一番いいのは、追加分だけtxtで送ってもらうことかw

943:936
08/07/07 21:30:28
>>937
なるほど!
つまりそのSELECT MAX(day) from データベースで最終更新の日時をもらって
その日時以降の日付があればデータベースに入れるということですね。
Javaだとwhileとif,scannerを使えばできそうですね。
ありがとうございました。すれ違いのようなので試行錯誤してみます。

944:デフォルトの名無しさん
08/07/07 22:42:47
Strutsで質問なんですが、
ValidatorFormを直接継承したフォームだとvalidateできるのですが、
ValidatorFormの孫?になると、動作しなくなってしまいました。
(間の親は、ValidatorFormを継承しただけの抽象クラスです)

URLリンク(d.hatena.ne.jp)
↑これと多分現象は同じですが、attribute属性は指定してないです。
勿論、form-beanの名前もconfigに書いたものと一致しています。

ソースを追っていったら、FormSetオブジェクトがnullで、
Validatorがうまく生成されていないようでした。

ちなみに、JDKは1.5.0_13、APサーバはweblogic9.2です。
原因や疑わしい箇所の検討がつく方、よろしくお願いしますm(_ _)m

945:944
08/07/07 22:43:35
すいません、追記です。
Strutsは1.2.8です。

946:デフォルトの名無しさん
08/07/07 22:48:05
LinkedList <String>a = new LinkedList<String>();
a.add("abc");
LinkedList <LinkedList<String>>b = new LinkedList<LinkedList<String>>();
b=a;
a.add("def");

System.out.println(b);
これでabcと出力したいのですが、abc defと出力されてしまいます。
これをb=a;の後にaに編集を与えたとしても、bに変更を与えないようにするにはどのようにすればいいのでしょうか?

947:デフォルトの名無しさん
08/07/07 22:49:32
>>946間違えました

LinkedList <String>a = new LinkedList<String>();
a.add("abc");
LinkedList <LinkedList<String>>b = new LinkedList<LinkedList<String>>();
b.add(a);
a.add("def");

System.out.println(b);
これでabcと出力したいのですが、abc defと出力されてしまいます。
これをb.add(a);の後にaに編集を与えたとしても、bに変更を与えないようにするにはどのようにすればいいのでしょうか?




948:デフォルトの名無しさん
08/07/07 22:59:56
>>947
プログラムは書いたようにしか動かない。

質問するなら、
まず、何のつもりか、したいことの方を詳しく述べた方が良い。


949:デフォルトの名無しさん
08/07/07 23:22:47
>>948
すいません説明が足りませんでした
bのリストにはaが編集される度にその状態を保存しておきたいと思っています。
それで状況によってアンドゥのような処理でbのリストに保存してある状態をaに戻したいということです。

その1
a = {abc,edf,123}
b.add(a);

その2では456をaddしてaは以下のような状態になる
a={abc,edf,123,456}
b.add(a);

その3ではaをソートして以下のような状態になる
a={123,456,abc,edf}
b.add(a);

その2に戻したくなったのでbのリストに保存されているその2の状態をaに持ってくる
a = b.getLast();
b.removeLast();

a={abc,edf,123,456}

その1に戻したくなったのでbのリストに保存されているその1の状態をaに持ってくる
a = b.getLast();
b.removeLast();

a = {abc,edf,123}

ということを実現したいと思っています。

950:デフォルトの名無しさん
08/07/07 23:29:45
>>949
b.add(a)の時にaのコピーを作ってbにaddする。

951:デフォルトの名無しさん
08/07/07 23:36:53
>>950
なるほど!
早速試してみようと思います
ありがとうございました

952:デフォルトの名無しさん
08/07/08 00:28:45
先生、もうどうしていいか分かりません。
open-ejbでEJB3.0の実装をしようと思ってます。
トランザクション管理をコンテナ管理からBEAN管理
に替えたいのですが、どうやって指定したらいいか
分かりません。
EJB2.0のように、デプロイメント記述子を書くしか
ないのでしょうか。

953:デフォルトの名無しさん
08/07/08 01:28:58
>>949
効率を考えると操作履歴を残す方が良くないか?

e.g.
1. Aを追加
2. インデックスnを削除
    :

954:デフォルトの名無しさん
08/07/08 07:25:47
質問です。
あるクラスで他のクラスのインスタンスを生成した時に、そのインスタンスの中で生成元クラスの
フィールドやメソッドにアクセスしたい場合はどうすればよいのでしょうか?
具体的には、以下のように、
描画パネルのクラスでGUIを記述したクラスのボタンやテキストエリアにアクセスしたいのです。

public class Window() extends JFrame{
private MyPanel p = new Panel();
private JButton b = new JButton("button");

Container container = this.getContentPane();
container.add( p, BorderLayout.CENTER );
}

public class MyPanel() extends JPanel{
public void paintComponent(Graphics g){
(描画処理)
}

public void method1(){
b.setText("change text"); //ここでボタンbにアクセスしたい
}
}

かなり端折って書いてます、初心者なもので記述のおかしいところとかあるかもしれませんが
よろしくお願いします。


955:デフォルトの名無しさん
08/07/08 07:54:38
class Hogehoge {
  static MyPanel myPanel_p = null;
  static JButton b = null;
  public class Window extends JFrame{
    Window () {} // コンストラクタ
    myPanel_p = new Panel();
    b = new JButton("button");
    Container container = this.getContentPane();
    container.add( p, BorderLayout.CENTER );
  }
  public class MyPanel extends JPanel{
    MyPanel () {} // コンストラクタ
    public void paintComponent(Graphics g){
      (描画処理)
    }
  }
  public void method1(){
    b.setText("change text"); //ここでボタンbにアクセスしたい
  }
}

クラスの書き方が変だから直した。

956:デフォルトの名無しさん
08/07/08 07:56:02
PanelのほうにButtonのインスタンスを持たせておいてそれ使ってアクセス

957:デフォルトの名無しさん
08/07/08 09:55:03
CDでJAVA(JDK1.5.0)のソースを配るのですが、非公開にしたい場合はどうしたらよろしいのでしょうか?
JAVAを初めて1ヶ月弱色々なゲームができるようになりましたのでそろそろ同人ゲームを作りたいです。

958:957訂正
08/07/08 09:56:39
CDでJAVA(JDK1.5.0)のソースを配るのですが、ソースを非公開にしたい場合はどうしたらよろしいのでしょうか?(CDでプログラムを起動だけしたい)
JAVAを初めて1ヶ月弱で色々なゲームができるようになりましたのでそろそろ同人ゲームを作りたいです。


959:デフォルトの名無しさん
08/07/08 09:58:25
>>958
ソースを配るのにソースを非公開にする?配るのはclassファイルとかjarとかじゃないの?

960:デフォルトの名無しさん
08/07/08 10:12:22
リストに入れたオブジェクトのフィールドを変えると
リストの中のオブジェクトのフィールドもかわってしまいますか?
言い換えるとリストの中のオブジェクトは参照しているだけですか?

961:デフォルトの名無しさん
08/07/08 10:21:31
>>958
>>959の言う通り、意味が判らないけど、
パスワード付きzipで固めるとか、そういう事でいいのかな。
Javaの問題ではない様な気がする。

962:デフォルトの名無しさん
08/07/08 10:21:45
フィールドでオブジェクトを初期化するのと(例えば A a=new A();)
コンストラクタで初期化するのとは何が違うんですか?

963:958
08/07/08 11:11:58
jarで配ったらソースがばれるんちゃうか?アプリ使用して中身を盗みみるとか。
パスワード付きzipで固めましたらjavaそのものが起動できなくなるのでは?
知障ですいません。
私がしたいのはダブルクリックしたらプログラムが動く状態にまで持ってきたいです(それかコマンドプロントでjavaプログラムを叩いたら起動。そこの説明はテキストで説明します)。
とりあえずソースを見られないようにしたいのです。

964:デフォルトの名無しさん
08/07/08 11:24:50
ソースの難読化してくれるツール使うくらいしかないだろうな けど逆コンパイラのjadは最新のソースには対応してないから、普通に逆コンパイルしてもきれいには復元できないし気にしなくていいと思うけどな。 どうしてもされたくないならJavaは使わないべき。

965:デフォルトの名無しさん
08/07/08 11:30:32
>>960
かわってしまいます
だけです

966:デフォルトの名無しさん
08/07/08 11:34:28
>>962
そもそもフィールドを外から触れるという設計が良くない
特段の理由がなければフィールドはすべてprivateにするべき

967:デフォルトの名無しさん
08/07/08 11:38:12
>>962
class Foo { A a = new A(); Foo() {} }

class Foo { A a; Foo() { a = new A(); } }
の違い?
強いて言えばタイミングが違うが、大して変わらない、でいいだろか。

968:デフォルトの名無しさん
08/07/08 11:40:50
>>963
gcjとか・・・・・

969:966
08/07/08 11:46:04
そーゆー意味か・・・966は無視してくださいorz

970:958
08/07/08 11:57:14
>>968
この中で見た限りgciが有効なので解決致しました。
968さん、協力してくださった皆様方ありがとうございました。

971:958
08/07/08 11:57:54
gcjね。orz

972:デフォルトの名無しさん
08/07/08 13:03:42
gcjってjava5以降まともにコンパイルできたっけ?

973:デフォルトの名無しさん
08/07/08 13:10:34
できない。文法的には確か1.4止まりじゃなかったか? そもそも、ソース見せたくないからネイティブ化ってどうなんだろうな

974:デフォルトの名無しさん
08/07/08 13:48:59
>>964
>使わないべき
使わないべき? 使うべきでない?
どっちもアリなのかな。

975:デフォルトの名無しさん
08/07/08 14:24:10
画面遷移有りでクラス関係無しにデータ(値)を受け渡すのはどうやるんでしょうか?
{}でもとの数値に戻ってしまいますorz

976:975
08/07/08 15:57:36
画面遷移無しでアドベンチャーが作れるようになったので返答いりません。
画像を一瞬で表示するプログラムはありますでしょうか?
どうしても途中、途中で、読み込みが発生いたします。
トップ画面時に画像すべて読み込みのプログラムでも構いません。


977:976
08/07/08 16:13:21
ごめんなさい。自己解決致しました。

978:デフォルトの名無しさん
08/07/08 17:11:50
意味不明すぎワロタ

979:デフォルトの名無しさん
08/07/08 21:19:25
ひょっとして
JSFやStrutsはすれ違い?

980:デフォルトの名無しさん
08/07/08 22:47:23
そんなことより埋めようか

981:デフォルトの名無しさん
08/07/08 23:13:43
次スレは?

982:デフォルトの名無しさん
08/07/09 01:47:39
純粋なプログラミングではないのですが、詳しい方教えて下さい。

他社が作った昔のJavaソースを貰って、評価して作り替えの新規
提案する必要があります。規模は数10Kstep

その昔のJavaのソースを定量的/定性的に評価して
レポートをする必要があるのですが、皆さんならどういうことを
考えますか?

定量的:JTestでどの程度規約に沿っているか
定性的:Judeでクラス図起こして、変なところを探す

ぐらいしか思いつきません。

いいアイディアが有れば教えて下さい。

983:デフォルトの名無しさん
08/07/09 02:21:04
>>982
何を目的に作り替えるの。

984:デフォルトの名無しさん
08/07/09 09:48:37
>>982
FindBugで潜在的なバグ要因となるコードを探すとか。
結構出るので、相手によるけどびっくりさせられていいかも。

>>983
アレだろ。
「このプログラムはこんなにヒドイ!
バグてんこ盛りで、規約もいい加減。メンテ無理!
ですから、既存コードの改修はあきらめて
当社に新規開発させてもらえませんか?
その方が安く付きます。」
って話のネタ。

985:デフォルトの名無しさん
08/07/09 10:59:33
EclipseとTomcatでMysqlのデータを操作するプログラムを作りたいのですが、
動的webプロジェクトを作成し、サーブレットにHttpServletを継承しようとするとHttpServletが解決できないというエラーが出てしまいます。
Tomcatプラグインをいれ、Tomcatプロジェクトだと継承はできるのですが、動的webプロジェクトだと継承できない原因が分かりません。
Javaを再インストールしたり最新版のものにしても継承できませんでした。
どうか原因が分かる方ご教示ください。

986:デフォルトの名無しさん
08/07/09 11:42:47
switchの中で数値を引きたいのですがどうしても除々に引かれていきます。
一度だけ引くにはどういう記述を入れたらよろしいのでしょうか?
JHP = JHP -da;
switch (pa) {
case 1:
gv.drawString(""10, 325);
da=10;
break;
case 2:
gv.drawString(""10, 325);
break;
case 3:
gv.drawString("10, 325);
break;
case 4:
gv.drawString("10, 325);
break;
case 5:
gv.drawString("", 10, 325);
break;
case 6:
gv.setFont(new Font("Arial", Font.PLAIN, 20));
gv.drawString("", 70, 150);
break;

}

というプログラムです。アドベンチャーの一部のプログラムです。詳細は隠してありますが。
ご提示宜しくお願いします。

987:デフォルトの名無しさん
08/07/09 11:46:45
switchの中のどこで数値を引いてるって?

>JHP = JHP -da;

の部分か?
元の変数JHPを書き換えるのをやめればいいのでは?

988:デフォルトの名無しさん
08/07/09 12:00:47
>>987
それをやったら画像が表示されなくなりJHPも0になってしまいましたorz
プログラムはJHP=da; da=-10;でやってみました。

989:デフォルトの名無しさん
08/07/09 12:15:24
>>986,988
やりたいことをもっと詳しく書きましょう。
「~の場合に変数xxxの数値を減らしたいけど、いまはどんな場合にも減っ
てしまう」とか。


990:デフォルトの名無しさん
08/07/09 12:19:31
画像ってなんだよ
>>986 のプログラムのどこにそんな画像があるの
書いてないことまではわからないよ

991:デフォルトの名無しさん
08/07/09 12:28:26
次スレ立てるよー

992:デフォルトの名無しさん
08/07/09 12:33:27
あとはよしなに

【初心者】Java質問・相談スレッド117【歓迎】
スレリンク(tech板)

993:デフォルトの名無しさん
08/07/09 12:54:44
>>990
そこまで書いたら漏れの苦労が台無しになる。

>>989
pa=3の場合に変数aの数値10だけを減らしたいけど、いまは除々に減っていきます。

994:993訂正orz
08/07/09 12:55:39
pa=3の場合に変数daの数値10だけを減らしたいけど、いまは除々に減っていきます。

995:デフォルトの名無しさん
08/07/09 12:58:37
pa≠3の場合は減った数値を元に戻したいということ?

996:デフォルトの名無しさん
08/07/09 13:00:31
なに作ってんのか知らないけど、NScripterがあれば不必要なものじゃないの?
URLリンク(ja.wikipedia.org)

997:デフォルトの名無しさん
08/07/09 13:08:18
>>995
分かりやすくしたい事を日本語で書きますと、
最大HPが100あります。
ある場面Aにいきました。
あるイベントが起きました。
ダメージが10減りました
HP、10減ってHPが90になりました。
的な事をやりたいです。


998:デフォルトの名無しさん
08/07/09 13:16:17
言わんとしている事は、こんなことだろ。

java.util.Scanner s = new java.util.Scanner(System.in);
int JHP=100;
int da =0;
while(true){
int pa = s.nextInt();
JHP = JHP -da;
switch (pa) {
case 1:
da=10;
break;
case 2:
break;
}
System.err.println(JHP);
}

999:デフォルトの名無しさん
08/07/09 13:18:09
なんでswitchがいるんだ?

1000:デフォルトの名無しさん
08/07/09 13:27:51
>>997
switchの外の
>JHP = JHP -da;
は消して、case 3 のところに
JHP -= 10;
と書けばいいんじゃない

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


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