[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 03/30 12:48 / Filesize : 271 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者】Java質問・相談スレッド116【歓迎】



1 名前:デフォルトの名無しさん mailto:sage [2008/06/13(金) 17:52:10 ]
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    pc11.2ch.net/hp/
Webプログラミング pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド115【歓迎】
pc11.2ch.net/test/read.cgi/tech/1210529127/
次スレは>>990あたりで。

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
www.wikiroom.com/java/

810 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 16:27:04 ]
その問は間違っている
例外クラスの大元は Throwable だ

811 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 17:55:06 ]
その例外クラスを投げるクラスの目的によって違うだろ。

812 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 18:06:37 ]
>>808

ありがとうございます。
無事目的の動作をさせることができました。

list()も使って確認してみました。
そういう構成になってたんですね。

813 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 18:56:03 ]
>>809
問題の定義自体があいまい過ぎ

814 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 18:58:21 ]
>>809
問題があってそれに対する独自の例外クラスを作るとかじゃないのか・・
好きなの作れと言われても漠然としてるなぁ

815 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 19:04:56 ]
>>814
809ですがその通りなんです。問題文がこれで全てのためあいまい過ぎて
途方にくれてる状態です

816 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 19:22:54 ]
ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/main.htm

332番のコードですが、MainCanvas()のコメントをはずすと
ぬるぽになります。なぜでしょうか?

817 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 19:27:51 ]
>815
理解できないときは、まず出題者に質問しましょう

問題文をそのまま捉えれば、
・コンストラクタ(引数無し・文字列)
・有益な例外情報を得るためのコンストラクタとメソッド
を定義する必要があると思う。

818 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 19:41:39 ]
>>816
kuni[1] = new Kuni();
kuni[2] = new Kuni();
kuni[3] = new Kuni();
が必要



819 名前:816 mailto:sage [2008/07/03(木) 20:13:03 ]
回答ありがとうございます。できれば、このあたりのことを
日本語で解説しているwebサイトなどはないでしょうか?

820 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 20:25:49 ]
サイトは知らないけど
booleanの初期値はfalse、intやfloatの初期値は0、オブジェクトの初期値はnull
ってことくらい、どこにでも載ってそうな気がする
new したばかりの Kuni[17] には、初期値として 17 個の null が詰まってる
インスタンスを new して代入しないと、ぬるぽは当然

821 名前:816 mailto:sage [2008/07/03(木) 20:52:47 ]
ありがとうございました。なんでもかんでもnewをすれば
インスタンスがはいるものだと思ってました。

また質問しにくることがあると思いますがそのときは
よろしくお願いします。

822 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 10:57:20 ]
パッケージ名には、企業のドメイン名を逆順でつけるのが推奨されていますが、
うちのドメイン名にはハイフンがついているのでそのままではパッケージ名に出来ません。

こういう場合に推奨される命名規約ってあるのでしょうか?

823 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 11:03:02 ]
sun-java→sunJavaとか

824 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 11:34:50 ]
>>822
ある、アンダースコアにすべし。

java.sun.com/docs/books/jls/third_edition/html/packages.html#40169
>If the domain name contains a hyphen, or any other special character not allowed in an identifier (§3.8),
>convert it into an underscore.

825 名前:デフォルトの名無しさん [2008/07/04(金) 16:02:38 ]
証券会社のトップとかに表示される為替レートをとりたいんですが、
ConnectURLだとやはりその部分が表示されません。
ああ言ったデータを読み取ることはJavaではできないでしょうか。

826 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 16:04:20 ]
>>825
たとえばどのページ?

827 名前:デフォルトの名無しさん [2008/07/04(金) 16:13:16 ]
レスありがとうございます。
証券会社だとマネーパートナーとかのトップから落としたいのですが。

828 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 16:22:12 ]
>>827
パケットキャプチャすればURLわかったよ。
そのURLでゲットすれば取れたよ。




829 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 16:37:05 ]
なんと!
自分の未熟さがわかりました・・・
いまJava始めて2ヶ月ほどなのですが、パケットキャプチャという単語すら知らず。
自分も早く答えれる側になれるようがんばります。
ありがとうございました。

830 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 16:54:22 ]
>>829
うむ。精進しなされ

831 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 16:55:05 ]
脆弱なインターフェイスなのに好きだね〜
そのサイトがデザインや仕組みを変えてこないとは限らないだろうに

832 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 17:29:11 ]
元気な人が居るなw
>>831
確かに思うけど、個人ではそれが限界なのかも。まさか銀行に金払って送ってもらうほどでもないし。
>>829
いきなりパケットキャプチャ城ってのも酷だな

そんなことはどうでもいいんだけど、おすすめ2ちゃんなるに育児が入ってるのが地味におもしろい

833 名前:319 [2008/07/04(金) 18:22:36 ]
自己組織化(雪の結晶の成長とか貝殻の形成とか砂浜の造成など…)をグラフィカルに表示するような Java を書いてみたいのですが、そういったソースコードはどこかに落ちていませんでしょうか?
もしくはそういったページをご存知でしたら教えていただけると嬉しいです。

834 名前:319 mailto:sage [2008/07/04(金) 18:31:20 ]
「自己組織化」について学問・理系板の「全般」「物理」「化学」「生物」「機械・工学」「ロボット技術」「情報システム」「情報学」「シミュレート」「未来技術」「地球科学」 あたりはタイトル一覧を全て探してみたのですが見付かりませんでした。
他の分野は何となく無さそうだったので調べていません。「化学」と「生物」で見付からなかったのは驚きでした。



835 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 18:40:13 ]
>>833
homepage3.nifty.com/imura/06fractal/Koch-2/Koch2_main.htm

836 名前:319 mailto:sage [2008/07/04(金) 20:18:14 ]
>>835
ありがとうございます!

837 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 20:19:53 ]
strutsのActionServletやActionFormを継承したクラスのクラス編集に直列化できないフィールドを追加すると、
シリアライズしたときにエラーになると思いますが、実際この辺をシリアライズするのは
ウェブコンテナだと思いますが、コンテナがシリアライズ失敗したときにはシリアライズをあきらめるだけなので、
クラスタ構成をしていなければ問題無しと考えてよろしいでしょうか?

838 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 23:46:45 ]
「'else'への'if'がありません。」と出たのですが、エラーを示されてる文には「else if」と入力されており、エラーの意味がわかりません。
どうすればいいですか?



839 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 23:53:47 ]
>>838
if(〜){

}else if(〜){

}
の最初のifが無いんじゃね?

840 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 23:55:42 ]
>>839
それはあります。

なんでできないのかいまだにわけがわかんないです。

841 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:01:14 ]
該当部分のコードを貼るんだ
このままだと誰にもエスパー回答しかできないと思うが

842 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:03:59 ]
どうせ{}忘れだろな〜と

843 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:04:46 ]
ソースの形を変えてみたら、少し改良の問題は残るものの一応コンパイルできました。
ただ、またこういうトラブルが起きたときに困りそうなので、とりあえず一通りソース貼ってみます。

(前略)
int num = (int)(Math.random()*11);
int N;
do{
System.out.println("1〜10までの整数を入力してください。");
BufferedReader br =(以下略)
String str = br.read.line();
int num2 = Integer.parseInt(str);
if(num == N)
break;
else if(num > N)
System.out.println("もっと大きいです。");
else if(num < N)
System.out.println("もっと小さいです。");
else if((num != N && N > num+2)||(num != N && N < num-2))
System.out.println("もっと大きいです。");
System.out.println("惜しい");
else if((num != N && N < num+2)||(num != N && N < num-2))
System.out.println("もっと小さいです。");
System.out.println("惜しい");
}while(true);
System.out.println("あたりです。答えは"+num+"です。);
(以下略)

コンピュータがランダムで出した数字に対して、数字を入力し、正解していたらあたり、はずしていたら「もっと小さいです。」などを表示し、さらに誤差が±2以内であれば「惜しい」と表示されるプログラムです。

844 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:08:06 ]
>>842
あなたは何時もただしい。

845 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:24:30 ]
>>828
そのURLは
www.moneypartners.co.jp/rate/rate.js
ですか?いろいろ試したんですが・・・

846 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:38:22 ]
>>843
ifで{}が省略できるのは処理が1行のみのとき。

else if((num != N && N > num+2)||(num != N && N < num-2))
System.out.println("もっと大きいです。");
System.out.println("惜しい");
else if((num != N && N < num+2)||(num != N && N < num-2))
System.out.println("もっと小さいです。");
System.out.println("惜しい");

ここでelse if内にSystem.out・・・が2あるからダメかと。

あと、上のほうでnum == Nとしてるからnum != Nって省略してもいいと思うけど。


847 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:49:57 ]
質問です
JavaBeansについて調べようと思ったのですが
EJBとかの本はたくさん出てるのに、
デスクトップアプリで使いそうな単なるJavaBeansの入門書とかの情報
は随分と古い本しかみつからないんですが、
もう使われてない技術なんでしょうか?

848 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 00:55:16 ]
>>846最終行
上の方云々の前に、

N > num+2 ⇒ num != N

は自明だし、そもそも

num == N
num > N
num < N

で全部じゃないかというツッコミが…

>>843は論理式の勉強をして、カルノー図くらい書けるようになるのが先決だな



849 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 01:04:42 ]
>>833
ぐぐってみた。
ttp://www001.upp.so-net.ne.jp/suzudo/gallery.html
ttp://www2.ttcn.ne.jp/~yokohori/index2.htm
ja.wikipedia.org/wiki/%E3%82%BB%E3%83%AB%E3%83%BB%E3%82%AA%E3%83%BC%E3%83%88%E3%83%9E%E3%83%88%E3%83%B3

意外な所だけどこのスレがいいかも。

【ダンジョン】 自動生成 2 【地形】 @ゲーム制作板
pc11.2ch.net/test/read.cgi/gamedev/1182223295/

850 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 01:44:13 ]
>>847
ググレば充分
JavaBeansは別に難しい技術じゃなくて、こういうルールで作ろうぜっていう決まりみたいなもん
XMLのルールはあるがどのようにXMLを使うかは技術次第とかそんな類

851 名前:デフォルトの名無しさん [2008/07/05(土) 02:58:08 ]
>>848
>int num2 = Integer.parseInt(str);
入力してるのは N じゃなく num2 だろというツッコミも…

852 名前:791 [2008/07/05(土) 05:56:40 ]
自己解決しました。
DefaultTableCellHeaderRenderer のソースをやっと見られまして、アイコンとして設定していることが分かりました。
以下のレンダラを JTableHeader に設定することで「▲」「▼」が付かなくなりました。

class TableCellHeaderRenderer extends DefaultTableCellHeaderRenderer {
private static final long serialVersionUID = 1L;
@Override
public void setIcon(Icon icon) {
if(icon == UIManager.getIcon("Table.ascendingSortIcon") ||
icon == UIManager.getIcon("Table.descendingSortIcon") ||
icon == UIManager.getIcon("Table.naturalSortIcon")) return;
super.setIcon(icon);
}
}

853 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 06:08:13 ]
>>843
なんという予想通りw。一応まとめ↓

//  前略。でも int N=Integer… ← int num2=Integer・・・ だよね
//  >843のif(N==num)のところから置き換え
if(N<=0 || 10<N) continue; // 入力が1〜10でなければループの先頭からやり直す
if(num==N){ // 正解の場合。ループを抜ける
 System.out.println("あたりです。答えは"+num+"です。"); //正解のときに表示するんだから普通ここに書くべき
 break;
}
if(num < N){
 System.out.println("もっと小さいです。");
}else{ // すでに==にはなり得ないのでelseで十分
 System.out.println("もっと大きいです。");
}
// ↓ここにelseをつけないのが重要。else ifは、それ以前のifがヒットした時に無視される
if(num-2 <= N && N <= num+2){ // num-2 <= N <= num+2 の意味。
 System.out.println("惜しい");
}
} while(true);

数直線にしてみるとわかると思うが、else if((num != N && N… あたりの不等号が明らかにおかしい。
if((num != N && N > num+2)||(num != N && N < num-2)) には、
あと、random()は0もとり得るので、ソコは
int num = (int)(Math.random()*10) + 1; とかのほうがマシかと。
いや、Javaはあんま知らんから違ってたら誰か直して。

854 名前:853 mailto:sage [2008/07/05(土) 06:11:03 ]
ミスった。Shift+Enterしてもたotz。
「あと、random・・・」の前の行は、
「if((num != N && N > num+2)||(num != N && N < num-2)) には、N=100もマッチするはず。」
と書きたかった。

855 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 07:04:48 ]
javaコントロールパネルが開きません。
コントロールパネルからjavaのアイコンをクリックすると
「C:\Program Files\Java\jre1.6.0_06\bin\javacpl.exe」
と表示されるので、「javacpl.exe」をクリックすると今度は
「C:\Program Files\Java\jre1.6.0_06\bin\javaw.exe -Xbootclasspath/a:"C:\Program Files\Java\jre1.6.0_06\bin\..\lib\deploy.jar" -Duser.home="C:\Documents&Settings\ユーザー名" com.sun.deploy.panel.ControlPanel」
と表示されます。
どうか対処法をご教授くださいませ。

856 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 11:38:01 ]
Ruby の File#truncate(バイト数) のように、
ファイルサイズを指定バイト数にするには、Java ではどうしたら良いのでしょうか。


857 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 11:51:08 ]
>>856
RandomAccessFile raf = new RandomAccessFile(path, "rw");
raf.setLength(バイト数);
raf.close();

標準APIには、メソッド一発でできる様な便利メソッドはなかったような。

858 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 12:08:21 ]
>>852
へえ、こんなんあるんだ



859 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 19:51:07 ]
java初めて8年の初心者です。嘘です。あんまり初心者じゃない。

仕事で、金勘定とか在庫管理とか何だとか、いくつかのプロジェクトを周ってきたんだけど
「コード」「コード定数」とかいう言葉がよく使われますよね?
業界標準と考えていいのかな?
(お前のプロジェクトだけだwwって事なら、後で解説します・・)

んで、今まで周ってきた、どの会社のどのプロジェクトでも、このコードを
普通のクラスと普通の public static final String で定義する決まりになってるんですが
enum を使いたくない理由って何なのでしょうか?
DBに値を突っ込みにくいとか、あるいはDBからエンティティを復元しにくいとか?

でも enum を使えば、麺種別コードを入れるべき所に間違えてダシ種別コードを入れてしまうような
事故がなくなるはずなのに。
この事故のせいで、数十人月は損してるんじゃないかな?特に今回のアソコは・・・

860 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 20:12:08 ]
>>859
enumはjava5からだから昔からあるシステムのメンテや追加だとまだ使いたがらないことが多い。

861 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 20:24:00 ]
うちのシステムではなぜか定数はinterface派だな。
public interface Foo {
  int AAA = 1;
  String MSG = "UGO UGO";
}


862 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 20:36:42 ]
>>859
「よく解らないので(知らないものは)採用できない」と言われたことあるぜw

863 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 21:05:58 ]
むしろ定数自体が邪悪

864 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 21:31:43 ]
うちもインターフェイスかな・・
Static importとか使う?

865 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 21:36:35 ]
>>864
import java.util.*; のような表記は全然OKだけど、static import は使わない。

866 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 22:05:38 ]
個人のサンデープログラマは気ままにEnumのみ

867 名前:デフォルトの名無しさん [2008/07/05(土) 22:35:05 ]
質問です。
画像ビューワみたいなのを作ってます。
画像を JScrollPane の中央に表示させたいんですけど、
ウィンドウのサイズをいじると左上に移動してしまいます。
これをなくしたいのですが。。。以下ソースコード(1/2)
package test;
import java.awt.*; import java.awt.image.*; import javax.swing.*; import javax.swing.event.*;

public class JSTest extends JFrame implements ChangeListener{
private JScrollPane sp;
private MyCanvas mc;
public JSTest(){
mc = new MyCanvas();
sp = new JScrollPane(mc);
getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
getContentPane().add(sp);
JSlider js = new JSlider(20, 300, 100);
js.addChangeListener(this);
getContentPane().add(js);
pack(); setVisible(true);
}
public void stateChanged(ChangeEvent e){
int newScale = ((JSlider)e.getSource()).getValue();
mc.setScale(newScale);
// サイズに合わせて位置を調整
sp.getViewport().setViewPosition(new Point(newScale - 100, newScale - 100));
repaint();
}
public static void main(String[] args){ new JSTest();}

868 名前:デフォルトの名無しさん [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 03:16:22 ]
>>867
スクロールペインで全体の一部を表示する為の機能なので、通常の使い方ではないのでは?

真ん中に表示だと、こんな感じ。
ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/333.java

870 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 04:07:52 ]
>>869
ごめんなさい
スクロールできてなかった。
ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/334.java

871 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 08:28:52 ]
JPanelにBufferedImageをadd出来た気がする

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

873 名前:デフォルトの名無しさん [2008/07/06(日) 10:32:07 ]
質問です。

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

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

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

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

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

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

876 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 10:55:28 ]
画像のクラスを使わないであえて配列でしてるのか・・

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

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



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

880 名前:873 [2008/07/06(日) 11:17:48 ]
>>878
なるほど、効率が最悪なんですね。。。

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

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

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

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

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

884 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 12:35:22 ]
結論:Javaは糞

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

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

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

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

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

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

888 名前:873 [2008/07/06(日) 13:06:25 ]
>>886
なるほど。わかりました。

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

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



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

890 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:13:48 ]
>>888
勘違い。free/deleteを自動的にやってくれるだけ。

891 名前:873 [2008/07/06(日) 13:27:17 ]
うーん、なるほど。

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

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

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

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

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

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

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

895 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 13:57:58 ]
>>893
それはおまえの読み違いだ。

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

897 名前:896 mailto:sage [2008/07/06(日) 14:18:27 ]
あ、ORMスレがあったのでそちらに移動します。
こちらはクローズでお願いします。

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



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

900 名前:898 mailto:sage [2008/07/06(日) 18:37:56 ]
すいません自己解決しました。

901 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 19:01:14 ]
>>899
設定しなおせば?

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

903 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 20:00:52 ]
>>902
「その後」と言うが良く分からない。
こんな風なGETやPOSTじゃないの?
ttp://www.hpc.cs.ehime-u.ac.jp/~aman/java/http/

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

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

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

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

906 名前:デフォルトの名無しさん [2008/07/06(日) 21:06:56 ]
>>899
そのコードをアプしてくれ。

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

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



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

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

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

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






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<271KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef