javaを勉強しています。タイトルのように java.lang.OutOfMemoryErrorというエラーが出てしまいます。少し調べてみたらどうやらメモリーの使いすぎ(?)のようなのですが、プログラムの方に問題があるのでしょうか?それとも使えるメモリーを増やすといった解決策を取ったほうがいいのでしょうか?
よろしくお願いします。プログラムはまず画像が表示されて、左クリックすると次の画像へ変わる、といった処理をするアプレットです。
package jibundesukosidutu;

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.MediaTracker;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Main extends Applet implements MouseListener{
File[] imagelist;
File image = new File("image");
BufferedImage drawImage;
static int i = 0;
MediaTracker mt = new MediaTracker(this);

public void init(){
imagelist = image.listFiles();//ディレクトリの画像ファイルたちを配列に入れていく。
addMouseListener(this);
try {
drawImage = ImageIO.read(imagelist[i]);//drawImageメソッドで画像ファイルとして引数を取れるように、型変換しておく。
} catch (IOException e) {
e.printStackTrace();
}
}

public void paint(Graphics g){//drawImageファイルを表示するだけ
int w, h;
w = getSize().width;
h = getSize().height;
mt.addImage(drawImage,0);
try {
mt.waitForID(0);
} catch (InterruptedException e) {
e.printStackTrace();
}
g.drawImage(drawImage,0,0,w,h,this);//imagelist[0]を表示したい。
}

public void mouseClicked(MouseEvent e) {
int btn = e.getButton();

if(btn == MouseEvent.BUTTON1){//左クリック=進め
System.out.println("左クリック");
i++;
//searchFile(true);
try {
drawImage = ImageIO.read(imagelist[i]);
} catch (IOException e1) {
e1.printStackTrace();
}
repaint();
}else if(btn == MouseEvent.BUTTON2){
System.out.println("右クリック");
//searchFile(false);
}
}

public void searchFile(boolean next){
//next→次の画像、false→前の画像


}
public void mouseEntered(MouseEvent e) {
}

public void mouseExited(MouseEvent e) {
}

public void mousePressed(MouseEvent e) {
}

public void mouseReleased(MouseEvent e) {
}

}

A 回答 (2件)

現状では、OOMEは出ません。

たぶん、最初はdrawImageが配列で、大量の画像(巨大な画像)をそこに収めたのではないでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。おっしゃるとおり、画像の容量を縮小(4分の1。もともと一つ2Mno画像が8枚ありました(汗))して試したら、うまくいきました。

お礼日時:2007/12/01 15:30

アプレット使ったことがないので、参考意見です。



漠然とOut Of Memoryが出るという結果だけわかっているより、どの処理でOut Of Memoryが発生するかを特定すれば、たいていのOOMは解決します。

RuntimeクラスのfreeMemory(),maxMemory(),totalMemory()等を使って、ところどころでログを吐き出してメモリ使用量の推移を見るといいと思います。

余談:たいていのOOMは、永続ループが発生して、スタック切れかメモリ切れになっていたという場合が多いです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。それらの解決方法は全く知らなかったので、とても参考になりました。

お礼日時:2007/12/01 15:31

このQ&Aと関連する良く見られている質問

Q添付画像のファイルはどんな状態のファイルなのでしょうか?クリってもエラ

添付画像のファイルはどんな状態のファイルなのでしょうか?クリってもエラーしか出た事がないのですが

Aベストアンサー

他の回答者様の記入通り、拡張子が無い事には判断出来ません。
また、クリックしてもエラーとありますが、webから探すとか出ませんか?
憶測ですが、多分質問者様のPCにこのファイルを開くアプリケーションが
インストールされていないのではないかな?って思います。
参考までに
よくありがちなのは、XPで作ったエクセルファイル等(逆だったかな^^;)を
ビスタのPCで見ると似たようなアイコンになります。
オフィスの互換パックをインストールすると見れます。

Qjava.lang.outofmemoryerror java heap space

java のクラスファイルをjarにして、実行する時、大きいなファイルを読むと、java.lang.outofmemoryerror java heap spaceのエラーが出できます。
どう解決すればいいですか。

Aベストアンサー

多分、JVM に設定したメモリサイズの上限値を超えてしまったのだと思われます。
Xms や Xmx オプションなどをつけて実行してみたらどうでしょう。

以下のサイトなどを参考にしてみて下さい。

参考URL:http://www.intra-mart.jp/download/doc/OutOfMemoryError.html

Qイラストの画像が乱れてしまうのですが・・・

私はホームページNinja2003を使っているのですが、イラストを載せたページをブラウザでプレビューすると必ず画像が乱れてしまいます。保存方法が変なのかと思い、見てみたらBMPで保存していました。その他にも、web用保存をしてみたのですがBMPよりも乱れてしまいます。他のサイトを見ていると画像が乱れたりしていないのですが、何故か凄く乱れてしまいます。ネット上で画像が乱れずに済む最適の保存方法を教えて下さい。
Win XPを使用しています。

Aベストアンサー

画像が乱れるという意味がちょっとあいまいなのですが・・・
どのように乱れているのでしょうか?
単にJPEGやGIFに変換して画質が劣化しているのか、ページ画像を貼り付ける際に画像を拡大縮小して乱れて見えるのか。

前者なら、PhotoshopのWeb用に保存で画質や色数をいじるとなおると思います。
後者なら、画像はHTMLでは基本的に拡大縮小して表示しないようにした方がいいです。
Photoshopで出力したそのサイズをそのまま使用するのがいいです。

Q「java.lang.NullPointerException」というエラー

アプレットを作っているのですが、コマンドプロンプトからappletviewerで実行すると、うまく動くのに、ブラウザでhtmlに貼って動かそうとすると
java.lang.NullPointerException
というエラーが出て、動いてくれません…。
エラーが出ている部分は、
File[] imagelist;
File image = new File("imagesyukusyo");//imagesyukusyoはディレクトリの名前。
imagelist = image.listFiles()
int yousosu;
yousosu = imagelist.length;//ここでエラーが出ている
という部分です。アプレットとhtmlファイルと同じディレクトリにimagesyukusyoフォルダがあって、そのフォルダの中に、いくつか画像ファイルが入っています。

よろしくお願いします。

Aベストアンサー

要はimageshukusho内の画像を変更してもアプレットを作り直さなくてもいい方法を模索しているのですよね。
appletタグの属性にパラメータを指定し、アプレットに渡すという行為も省きたいんですよね。
私だったら以下のようにするかもしれません。
phpなどによりimageshokusho内の画像の一覧を取得し、htmlに
appletタグの属性にパラメータとしてファイル数とファイルを
動的に書き足す。
アプレットはファイル数がわかるので、この数だけファイルをパラメータ
から取得する。
ローカル環境で学習中であるならばapache等のHTTPサーバとphpが必要となります。

Q. . . . . . ーー . .おはようございます♪こちらの画像です,,,,,物凄く美人な方です

. . . . . . ーー









. .おはようございます♪こちらの画像です,,,,,物凄く美人な方です,,女性の名前教えて下さい,,

Aベストアンサー

プリティ・ウーマンでのジュリア・ロバーツです。

Qjava.lang.NoClassDefFoundErrorというエラーが出ます その2

ご質問させて頂きます。

java.lang.NoClassDefFoundErrorというエラーが出ます
http://oshiete1.goo.ne.jp/kotaeru.php3?q=952983
の続きの質問なんですが・・・。

次のような実行時エラーが出ます。
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:140)
at sample1.main(sample1.java:8)

そこで、
>PostgreSQLのODBCドライバをCLASSPATHに含めていますか?
>postgresql.jarとかpg72jdbc2.jarといったファイルがどこかにあるはずです.
と、回答者の方からアドバイスをして頂きました。

ところが、postgresql.jarとかpg72jdbc2.jarもありませんでした。
ネットで検索をしたところ、「postgresql743.jar」というのがありましたので
/usr/javaに格納しました。

/etc/profileに、
export PATH=$PATH:/usr/java
export CLASSPATH=$CLASSPATH:/usr/java.
と追加しました。

しかし、同じエラーが出てします。
対処方法をご存じでしたら、ご教授して頂けたら幸いです。

ご質問させて頂きます。

java.lang.NoClassDefFoundErrorというエラーが出ます
http://oshiete1.goo.ne.jp/kotaeru.php3?q=952983
の続きの質問なんですが・・・。

次のような実行時エラーが出ます。
java.lang.ClassNotFoundException: org.postgresql.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(Class...続きを読む

Aベストアンサー

まともな答えを導き出せなくて申し訳ないです.

> String url = "jdbc:postgresql://192.168.200.230/home/postgres/aa";
> ここの書き方はこれで宜しいのでしょうか?

確かに,いろいろなサイトや書籍で
String url = "jdbc:postgresql://servername:5432/dbname";
としています.私も何も考えずにそうしています.

>SQLERROR: org.postgresql.util.PSQLException: A connection error
>has occurred: org.postgresql.util.PSQLException: FATAL:
>no pg_hba.conf entry for host "192.178.215.230", user "postgres",
>database "home"

上記のメッセージで指定したデータベース "home" になっているということは,
192.168.200.230 の後ろの home がデータベース名として解釈されてい
るようですね.
ローカルの環境でポート番号はなくても動くみたいです.


とりあえず,Linux上で動かしていますので,

○sample1.java
String url = "jdbc:postgresql://localhost:5432/xxxx";
(xxxx にはデータベース名を入れてください)

○pg_hba.conf
host all all 127.0.0.1 255.255.255.255 trust

として行ってみたらいかがでしょう?
pg_hba.confを編集したときはpostmasterの再起動をお忘れなく.

まともな答えを導き出せなくて申し訳ないです.

> String url = "jdbc:postgresql://192.168.200.230/home/postgres/aa";
> ここの書き方はこれで宜しいのでしょうか?

確かに,いろいろなサイトや書籍で
String url = "jdbc:postgresql://servername:5432/dbname";
としています.私も何も考えずにそうしています.

>SQLERROR: org.postgresql.util.PSQLException: A connection error
>has occurred: org.postgresql.util.PSQLException: FATAL:
>no pg_hba.conf entry for host "192.178.21...続きを読む

QD200の圧縮RAW画像について教えてください

ニコンD200には、撮影画像をCFカードに保存
する際、非圧縮RAW画像と圧縮RAW画像の2種類
が選べます。

この圧縮RAW画像という形式は、やはり否可逆的な
圧縮で画質という面では非圧縮RAW画像よりも悪い
のでしょうか。

Aベストアンサー

「圧縮RAW」はD1Xの頃からある機能ですが、改めて仕様表の画質モードの項を眺めましたら、D1X・D100では「ロスレス圧縮」、D2X・D200等では「圧縮」とだけあって、正直おやっと思いました。しかし、取扱説明書を見ると、どちらも「見た目の画質を損なうことなく」圧縮可能とあるので、同じものだと思います。言い回しは上記の様に“微妙”なので、両者の差はゼロではないのかも知れませんが、少なくとも個人的には特段の差を感じたことはありません。あまり「重箱の隅をつつく」ような比較をしても、意味はないと考えます。

可逆圧縮・非可逆圧縮という話に関しては、少々論点がずれているような気が致します。RAWはその名の通り撮像素子からの「生」データなので、対応ソフトによる“現像”処理を行って初めて一般的な画像データとしての意味を持ちます(故に、例えばニコンのNEF形式に対応していない単なるブラウザ等では画像を見ることが出来ない)。このため、元画像(例えばTIFF)に対してJPEGが非可逆的に圧縮されている、ということとは本質的に意味が異なります。

古いデジカメでは圧縮処理に時間が掛かったりしましたが、最近のカメラではむしろファイルサイズが小さくできることのメリット(連続記録枚数など)の方がクローズアップされているようです。通常は圧縮記録を選んでおいて問題ないでしょう。

「圧縮RAW」はD1Xの頃からある機能ですが、改めて仕様表の画質モードの項を眺めましたら、D1X・D100では「ロスレス圧縮」、D2X・D200等では「圧縮」とだけあって、正直おやっと思いました。しかし、取扱説明書を見ると、どちらも「見た目の画質を損なうことなく」圧縮可能とあるので、同じものだと思います。言い回しは上記の様に“微妙”なので、両者の差はゼロではないのかも知れませんが、少なくとも個人的には特段の差を感じたことはありません。あまり「重箱の隅をつつく」ような比較をしても、意味はないと考...続きを読む

Qjava.lang.NoClassDefFoundErrorというエラーが出ます

ご質問させて頂きます。

自分のPC(XP)からTelnetで
LINUX(Red Hat Linux release 9 (Shrike))に接続しています。

サンプルを参考にして以下のコードを作ってみました。
これは、PostgreSQLで作成したデータベース(aa)の
テーブル(test)のデータを表示させようとしています。

import java.sql.*;

public class sample1{
 public static void main(String [] args){
  String driver = "org.postgresql.Driver";
  String url = "jdbc:postgresql://192.178.215.230/home/postgres/data/aa";
  try{
    Class.forName(driver);
    Connection con = DriverManager.getConnection(url,"postgres","aaaa");
    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery("SELECT * FROM test"); 
    System.out.println("shainno shimei ");
    while ( rs.next() ){ 
      System.out.println(" "+rs.getInt("shainno")+" "+ rs.getString("shimei"));
    }
    rs.close(); 
    st.close(); 
    con.close();  
  }catch (SQLException sqlEx){
    System.out.println("SQLERROR: " + sqlEx.toString());
  }catch (Exception ex){
    ex.printStackTrace();
  }
 }
}

これを実行すると、
[postgres@localhost postgres]$ java sample1
以下のようなエラーが出てします。
Exception in thread "main" java.lang.NoClassDefFoundError: sample1

ご教授して頂けたら幸いです。

ご質問させて頂きます。

自分のPC(XP)からTelnetで
LINUX(Red Hat Linux release 9 (Shrike))に接続しています。

サンプルを参考にして以下のコードを作ってみました。
これは、PostgreSQLで作成したデータベース(aa)の
テーブル(test)のデータを表示させようとしています。

import java.sql.*;

public class sample1{
 public static void main(String [] args){
  String driver = "org.postgresql.Driver";
  String url = "jdbc:postgresql://192...続きを読む

Aベストアンサー

ふたたび,#1です.

> 何度も厚かましいお願いで
> 大変に恐縮ですが
> ご教授して頂けたら幸いです。

いえいえ.
もうすぐできますよ.頑張りましょう.

PostgreSQLのODBCドライバをCLASSPATHに含めていますか?

postgresql.jarとかpg72jdbc2.jarといったファイルがどこかにあるはずです.
Linuxでの書式はわかりませんので,他の方にお願いするとして...汗

Windowsでは以下のようになります.
CLASSPATH=.;C:\dir\postgresql.jar;c:\...

QCD-Rに入った画像の大きさを変更したいのですが・・・

使用しているPCはWindows2000です。CD-Rに入っているjpgの画像の大きさを変更するにはどうしたらいいですか?そのまま印刷するととても大きな画像で印刷されます。PC初心者でよく判りません。宜しくお願いします。

Aベストアンサー

こんにちは。

A4サイズやハガキ、封筒に画像の大きさを変更して印刷出来る
フリーソフト「♪画像」と言うのがありました。

画像の大きさは大まかな倍率での変更なので微調整は出来ないのが少し不満ですが(^^ゞ
用紙の配置を見ながら大きさ変更や位置変更などが出来るようになっています。

分かりやすいソフトだと思いますよ(^^ゞ

参考URL:http://www.vector.co.jp/soft/win95/writing/se259264.html

Qjava.lang.StackOverflowErrortというエラー

java.lang.StackOverflowErrortというエラー

質問させてください。
JSPでプログラム作成しています。
forwardを使用して自分自身のページを読み込もうとすると、下記のエラーが出ます。

致命的: Exception initializing page context
java.lang.StackOverflowError

エラーに調べてみましたが、詳しくはわかりませんでした。(勉強不足で申し訳ありません。)
とりあえず、forward先を別のページにするとこのエラーは出ないので、forwardの処理を何とかしたいと思います。
行いたいことはページの更新処理なのですが、何か良い方法はありませんでしょうか。

以上よろしくお願いいたします。

Aベストアンサー

java.lang.StackOverflowError

これだけ見てると、スタックオーバーフローだからスタック足りないか、何かページ情報が多くなるような追加でループしてたりするんじゃないかと思いますけど。

リロードの時にforward処理書いたりしてませんか?

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング