★★Java質問・相談スレッド133★★at TECH
★★Java質問・相談スレッド133★★ - 暇つぶし2ch910:886
09/11/20 00:06:24
>>906
長い上に上手く説明できませんが、
あるサイトを参考に、IDなどを通じてグローバルに参照できるオブジェクト群を管理するクラスを作ろうとしています。
このクラスは、外部からの要求に応じてオブジェクトを生成し譲渡するのですが、その生成したオブジェクトは自身のフィールドに保持します。
そして次に同じ要求があった場合は、新たに生成せずに保持していた同じオブジェクトを渡します。
一つのオブジェクトを不特定多数の外部で共有するためです。
問題は、保持しているオブジェクトが管理クラス以外のどこからも参照されなくなった時は、それを削除せねばなりません。
そのタイミングを知るために参照カウンタが必要なのです。

>>904
弱参照は使ったことないのですが、上記のような場合でもGCしてくれるものなのでしょうか。
Reference関連は勉強不足で何もわかりません。その辺も調べてみます。

911:デフォルトの名無しさん
09/11/20 00:15:02
ある書籍のwait/notifyのメカニズムの問題で
正解が下記のようになってるんですが、
consumerメソッドでwaitの下の
isFlag=falseがどうしても理解できません。
ここでfalseを代入してしまうと
上のproduceでisFlag=trueでnotifyを呼びだし
waitを呼び起こしてもすぐにまたfalseになり
いつまで経ってもwhileから抜け出せないと思うんですが・・・
私の見解が間違っているんでしょうか?

class MySync{
boolean isFlag = false;
public synchronized void produce(){
isFlag = true;
notify();
}
public synchronized void consumer(){
while(!isFlag){
try{
wait();
isFlag = false;
}catch(Exception e){}
}
}
}


912:デフォルトの名無しさん
09/11/20 00:19:13
>>910
昔、そういうの使ったことあるよ。

FacesContext.getCurrentInstace().getExternalContext()

の下にあるメソッドだったと思う。任意のクラスに対する、別クラスからのバインディングを取り扱う道具があるはず。

913:デフォルトの名無しさん
09/11/20 00:20:05
>>910
なるほど・・・
シングルトンを強制しつつも、参照されなくなったらGCに回収させるのですね。

914:デフォルトの名無しさん
09/11/20 00:22:24
なるほど。要はキャッシュの仕組みが作りたいわけね。

その用途ならソフト参照がいいかもね。
実際のところ弱参照は相応のライフサイクルが期待される
オブジェクトのキャッシュ方法としては適していない場合が多い。

URLリンク(www.ibm.com)
あたりを読んでみるとわかりやすいよ。

915:デフォルトの名無しさん
09/11/20 00:25:57
ウィークもいいけど、参照カウンタなんかCOMっぽくていいかもw
ほっといた方がよさそうだww

916:デフォルトの名無しさん
09/11/20 02:35:06
いちいちaddRefとかもういやだお

917:デフォルトの名無しさん
09/11/20 02:41:51
>>916
もしc/c++でもjvmでも、gcとかautoリソース解法とかの概念を使えるならそれをデストラクタに入れとくといいよw

918:デフォルトの名無しさん
09/11/20 06:37:05
項目と値があるTableをjavaで扱う時、
CollectionInterfaceか配列どのような方法を使うのがいいのでしょうか?

Tableからの情報を使って、別のTableの中から同じ文字列を持つものを検索したいと考えています。
ArrayListの二次元配列で作っていたのですが、
うまくピンポイントの情報が取得できません。
Array.get(int )はObjectのため、ArrayListのように指定しての取得ができないように思われます。

まだまだ勉強不足で見当違いの事を書いているのかもしれませんが、
それも含めてご指摘ご意見頂ければと思います。

よろしくお願いします。

919:デフォルトの名無しさん
09/11/20 08:37:57
>>918
HashMap を使わない理由は?

920:デフォルトの名無しさん
09/11/20 08:45:52
なにこのデジャブ

921:デフォルトの名無しさん
09/11/20 11:47:18
>>911
お前が正しい
そんな本は窓から投げ捨てろ

922:デフォルトの名無しさん
09/11/20 14:09:16
なんか、Javaの技術で面白ものってないですか?

面白いサイトとか本とか教えてくれるとありがたいっす。
今、経理やってるんだけど、2年くらいJavaやってました。

久しぶりにJavaやりたくなったんです。

よろしく><;

923:デフォルトの名無しさん
09/11/20 14:10:24
iTextとかおすすめ
PDF作れる
WebならApache

924:922
09/11/20 14:21:01
>>923
ありがとう。もう両方やったんです><;

J2EEの青い分厚い本でも今からかってこよっと・・あれなら、新しいEJBとか載ってそうだ。

925:デフォルトの名無しさん
09/11/20 17:10:57
Web系ならWicketとか

926:886
09/11/20 20:01:26
>>914
リンク先参考になりました。
有難うございます。

>>922
JOGLかProcessingはいかがでしょうか。
ゲームやプログラミングアートに興味があれば是非。

927:デフォルトの名無しさん
09/11/20 20:06:54
Javaの長所と短所を教えてください。

928:デフォルトの名無しさん
09/11/20 20:20:50
長所:Write Once, Run Anyware.
短所:リッチクライアント周りでは↑が嘘になる

929:デフォルトの名無しさん
09/11/20 20:21:37
Anywhere.だた。恥ずかし-

930:デフォルトの名無しさん
09/11/20 20:33:18
長所
 ともかく色々なプラットフォームで動く
 マニアックでない素直なOO言語
 強い型付け
短所
 玉虫色器用貧乏GUI、SWTなんてネイティブ移植しなけりゃ動かないし
 強い型付け


931:デフォルトの名無しさん
09/11/20 20:39:31
Map<String, ? extends MyInterface> map = new HashMap<String, ? extends MyInterface>();
これには閉口する。

var map = new HashMap<String, ? extends MyInterface>();
ってならんかな。提案レベルならすでにJSRにあるんだとは思うが。

932:デフォルトの名無しさん
09/11/20 20:40:55
そんなあなたに、はいScala

933:デフォルトの名無しさん
09/11/20 20:47:47
>>931
逆はjdk7からできるようになる予定だよ。

Map<String, ? extends MyInterface> map = new HashMap<>();

934:デフォルトの名無しさん
09/11/20 20:51:21
>>933
なるほど。IDEとの連携を考えてもそっちのが柔軟か。

935:806
09/11/20 22:06:28
>>905
ソースさっくりみたけど DLLたたいてるね。
携帯でMP3って意外と敷居高いな・・・

936:デフォルトの名無しさん
09/11/20 22:12:47
最新のJAVA2EEをインストールして暫くしたらパソコン起動するたびにコマンドプロンプトが起動しSUNのフォルダのdomain01内にログを作り出します。
サーバー?なのか不明なんですが、これ止めるには何処をどうしたら良いでしょうか。
よろしくお願いします。

937:806
09/11/20 22:13:08
>>886
RMIとか使ってプロセス間通信でもしてるわけじゃないのかな?
単独の仮想マシン上で動いてる場合、参照されなくなったらGC対象になるのはご承知だろうし。

弱参照しているばあい、他の参照がないとGC対象になるってだけなので、今回の件には使うところはないかも。
ちょっと違うことを想定してしまったので、わすれてOK(弱参照


938:806
09/11/20 22:26:26
長所と短所の話は 俺の好きな話題だったので・・・

長所
メモリ開放処理が自動なので簡単である。
そのためソースコードはCなどと比べると、とてもシンプルになり可読性がよい。
java専用高性能エディタが存在するため、生産性は高い(キリ
標準のライブラリがこれでもかってくらいそろってる。

短所
メモリ開放処理は自動だが、オブジェクトの開放契機などに注意を払わなくなるため。
イージーミスでメモリリークが発生する。
javaSE javaEE と javaMEは別物過ぎる、携帯電話などの端末でもSEで書いたものが動くことを期待する。



939:デフォルトの名無しさん
09/11/20 22:52:32
JLayerMEがDLL叩く?
そんなもん叩いてないがMMAPIのフルセットが実装されてないとJLayerMEは動かないからMIDPベースでは無理。


940:デフォルトの名無しさん
09/11/20 22:55:54
>>938
>>短所
>>メモリ開放処理は自動だが、オブジェクトの開放契機などに注意を払わなくなるため。
>>イージーミスでメモリリークが発生する。
あんまり見たことないけどね・・・
どんなの?

941:デフォルトの名無しさん
09/11/20 23:04:30
独自に配列スタックを作ろうとして、popされた時にnullで掃除しない場合とかか?
しかしArrayDequeueとか適切なクラスがあるしなぁ。

942:918
09/11/20 23:24:26
>>919
ありがとうございます。
ArrayListにHashMapを格納することで、解決できました。

943:デフォルトの名無しさん
09/11/20 23:28:20
>>941
うん。そういう教科書とかに載ってそうなのはわかるんだが、
実装レベルのイージーミスで起こるメモリリークってどんなの?


944:デフォルトの名無しさん
09/11/21 01:17:22
ライブラリにポインタ渡す時はライブラリを信頼しきってるから
あとでしっぺ返しされると超こまる

945:デフォルトの名無しさん
09/11/21 01:23:54
>>943
staticな変数にデカいコレクション突っ込んだまま放置してメモリを馬鹿食いするとか?
メモリリークというのは正しくないけど、症状はメモリリークに近いな。

946:デフォルトの名無しさん
09/11/21 01:53:48
Tomcatのコネクタか何かがログをそんな感じでほったらかしにしてたってのがあったな

947:806
09/11/21 14:30:28
イージーミスの話だけど
コレクションにぶち込みっぱなしで放置とか、そんなレベルの実装ね。
現実あったはなしだから、ソースレビューとかちゃんとやろうね


948:デフォルトの名無しさん
09/11/21 16:49:58
JTableがクリックされた時に、選択されている行の情報を取得するにはどうすればいいのでしょうか?

949:デフォルトの名無しさん
09/11/21 17:20:07
すみません、コンパイルできるんですが何も表示されません、助けてください
見にくいかと思いますが、お願いします
//<applet code="SnakeProg2.class" width="300" height="300"></applet>
import javax.swing.*; import java.awt.*; import java.awt.event.*;
public class SnakeProg2 extends JApplet implements KeyListener { int actiontype = 0, count = 0; int x[] = new int[99]; int y[] = new int[99];
public void init()
this.addKeyListener(this); this.setFocusable(true);
}
public void paint(Graphics g) {
super.paint(g);
x[count] = 0; y[count] = 0;
for (count = 1; count <= x.length; count++) {
switch (actiontype) { case 0: count--; break; case 1: x[count] = x[count-1] + 10; g.drawPolyline(x, y, count); break;
case 2: y[count] = y[count-1] + 10; g.drawPolyline(x, y, count); break;
case 3: x[count] = x[count-1] - 10; g.drawPolyline(x, y, count); break;
case 4: y[count] = y[count-1] - 10; g.drawPolyline(x, y, count); break; } } }
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_RIGHT) {
if(x[count] == 300 || count == 100) {
actiontype = 0; } else {actiontype = 1;}
} else if(keyCode == KeyEvent.VK_DOWN) { if(y[count] == 300 || count == 100) { actiontype = 0; } else { actiontype = 2; }
} else if(keyCode == KeyEvent.VK_LEFT) { if(x[count] == 0 || count == 100) { actiontype = 0; } else { actiontype = 3; }
else if(keyCode == KeyEvent.VK_UP) { if(y[count] == 0 || count == 100) { actiontype = 0; } else { actiontype = 4; } } repaint(); }
public void keyTyped(KeyEvent e) {
public void keyReleased(KeyEvent e) { }}

950:デフォルトの名無しさん
09/11/21 17:33:59
>>948
public void mouseClicked(MouseEvent e) {
int idx = tbl.rowAtPoint(e.getPoint());
}
あとはお好きに。

951:デフォルトの名無しさん
09/11/21 17:49:53
>>948
JTableで文字列をクリックした場合だけセルを選択状態にする
URLリンク(terai.xrea.jp)

MouseInputAdapter ma = new MouseInputAdapter() {
public void mousePressed(MouseEvent e) {
Point pt = e.getPoint();
int row = table.rowAtPoint(pt);

952:デフォルトの名無しさん
09/11/21 17:53:13
>>949
不味い点が多すぎて。
とりあえず初期状態でpaint()が動くと、countでのforループの中でcount--して無限ループ。

953:デフォルトの名無しさん
09/11/21 17:57:00
ん、踏んだか。次立ててくるね。スレ立てるのひさびさだな。

954:デフォルトの名無しさん
09/11/21 18:00:17
次は

★★Java質問・相談スレッド134★★
スレリンク(tech板)


955:デフォルトの名無しさん
09/11/21 18:01:20


956:デフォルトの名無しさん
09/11/21 18:05:44


957:デフォルトの名無しさん
09/11/21 18:18:26
>>949
わからん

958:デフォルトの名無しさん
09/11/21 18:20:52
>>950-951
とんくす

959:デフォルトの名無しさん
09/11/21 18:27:50
誰か2chにソース貼るとき整形するツール作れよ


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