• 締切済み

例外に困っています

現在自分でiアプリを作成しているのですが、初回ダウンロードでスクラッチパッドにアプリ内で使用する画像を書き込む段階での例外に悩んでいます。 確認した限りではN端末でしか出ないようです。 具体的には以下のような感じです。 //イメージファイル読み込み try { MediaImage m; for (int i=0;i<48;i++) { m=MediaManager.getImage("resource:///"+i+".gif"); m.use(); image[i]=m.getImage(); } } catch (UIException UIEx) { System.out.println("status="+UIEx.getStatus(); } 調べた結果、useメソッドで例外(UIException)が吐かれているらしく、ステータスを調べたところ、2(システムリソースが確保できていない?)でした。 例外が吐かれた後も、別にとってきた画像が使えないわけではなく、ちゃんと次の画面でその画像を表示できています。 いったい何が原因なのでしょうか。 N端末以外だと例外が吐かれていないので、プログラミングは間違っていないはずなのですが・・・。

  • Java
  • 回答数1
  • ありがとう数1

みんなの回答

  • isle
  • ベストアンサー率51% (77/150)
回答No.1

> ステータスを調べたところ、2(システムリソースが確保できていない?)でした。 N端末は伝統的にヒープメモリが少ないので 使うときにuse、使い終わったらdispose&unuseして 同時に使う画像のサイズを減らせば例外は出なくなると思います。

関連するQ&A

  • iアプリののプログラミングで

    iアプリを作ろうとしています。 アプリから画像を取り込むのに、 MediaImage mi = MediaManager.getImage("resource:///…image.gif"); では表示(画像の取得)ができるのに、 MediaImage mi = MediaManager.getImage("http://…image.gif"); では表示というか、画像に対してアクセスすらしてくれません。 何か不具合な点があるのでしょうか? ご存知の方、よろしくお願いします。

    • ベストアンサー
    • Java
  • iアプリの作成で画像が再描画されません。

    iアプリの作成で画像が再描画されません。 どうしても解決できないのでご教示下さい。 iアプリの作成をしながら勉強しています。 利用しているプロファイルはdoja 5.1です。 class MainCanvas extends Canvas {  public void paint(Graphics g) {   MediaImage mi = MediaManager.getImage("resource:///6.gif");   try {    mi.use();   } catch(Exception e) {    //何らかの例外処理   }   Image image = mi.getImage();   getGraphics().drawImage(image, 20, 0);  }    public void processEvent(int type, int param) {  if (type==Display.KEY_PRESSED_EVENT) {     if (param == Display.KEY_SELECT) {      Dialog dlg = new Dialog(Dialog.DIALOG_YESNO, "終了");      dlg.setText("終了しますか?");      int result = dlg.show();      if (result == Dialog.BUTTON_YES) {       IApplication.getCurrentApp().terminate();      }     }   if (param == Display.KEY_SOFT1) {    MediaImage mi = MediaManager.getImage("resource:///9.gif");    try {     mi.use();    } catch(Exception e) {     //何らかの例外処理    }    Image image = mi.getImage();    getGraphics().drawImage(image, 0, 0);         }    }  } } こんなクラスがあった時、ダイアログがキャンセルされると、 「9.gif」の方がキャンバス上から消えてしまいます。 どういう作りにすると、キャンバスから画像が消えなくなる のでしょうか?

    • ベストアンサー
    • Java
  • 例外処理について

    続けて質問です…すみません; public class OddEven { private static boolean even(int k) { return k/2*2 == k; } public static void main(String[] args){ int l; int m=0; int n=0; try{ for(l=0;l<args.length; l++) { int a = Integer.parseInt(args[k]); if(even(a)) { m++; } else{ n++; } } }catch (NumberFormatException e) { System.out.println("<" + e + ">"); } System.out.println("Even = " + m); System.out.println("Odd = " + n); } } とし、例えば「1 2 3 a 5」の中の偶数奇数の個数を判定すると、奇数が2個、偶数が1個となり、例外処理されたaの後の5が奇数にカウントされないのですが、どのように修正すればよろしいのでしょうか?

    • ベストアンサー
    • Java
  • 例外処理のことで

    class ExceptionTest{ static int array[] = {10,20,30,40,50}; void print(){ for(int i=0;i<10;i++) System.out.println(array[i]); } public static void main(String args[]){ new ExceptionTest().print(); } } /* 対処前 10 20 30 40 50 Exception in theread "main"java.ArrayIndexOutOfBoundsException:5 at ExceptionTest.print(ExceptionTest.java:6) at ExceptionTest.main(ExceptionTest.java:10) という実行結果を 対処後 10 20 30 40 50 例外 例外 例外 例外 例外 */ という出力結果を出したいのですがどうしたらいいのですか? また、 /* 10 20 30 40 50 例外が発生しました */ という出力結果も同様にお願いします。

  • 6枚の画像をランダムに表示させる方法を教えてください

    現在do-jaでJavaのアプリケーションを作成しているのですが 6枚の画像をあるエリア内にランダムに配置して表示させたいのですがどういう風にソースを書けば良いか教えてください。 イメージ的にはオセロの盤面に6種類の画像を升目にランダムに配置するものです。 public void start(){ Display.setCurrent(new IAppliCanvas()); } } class IAppliCanvas extends Canvas{ int d1=20; int d2=20; int k1=1; int k2=1; int flgk=1; int flg1=0; int flg2=0; Image img; public static Random rand=new Random(); public IAppliCanvas() { int s=rand.nextInt(6); try { MediaImage mimage; switch(s) { case 1: mimage = MediaManager.getImage("resource:///z-blue.gif"); break; case 2: mimage = MediaManager.getImage("resource:///z-green.gif"); break; case 3: mimage = MediaManager.getImage("resource:///z-orange.gif"); break; case 4: mimage = MediaManager.getImage("resource:///z-prum(1).gif"); break; case 5: mimage = MediaManager.getImage("resource:///z-prum.gif"); break; default: mimage = MediaManager.getImage("resource:///z-red.gif"); break; } mimage.use(); img = mimage.getImage(); } catch(Exception e) { e.printStackTrace(); } } 上記のように記述したのですが同じ画像が全部の升目に表示されてしまいます・・・ ご指南お願いいたします。

  • なんで例外出力されるんですか?

    また恥を忍んで理解の為動かないソースを載せます。 idexの入力値が1だとしてnの入力値が3の話をします このソースを実行させると以下の例外が出力されます java.lang.ArrayIndexOutOfBoundsException この例外の意味は不正なインデックスを使って配列がアクセスされたときに発生する例外と意味です。 ではなんでjava.lang.ArrayIndexOutOfBoundsException出力されるんですか メソッド部分のint[] tmp=new int[a.length-n]; for(int i=idex+n; i<a.length; i++){ tmp[i]=a[i]; } return tmp; } はtmpは配列aの長さ分-nですから配列2番目まで入ることはわかっています で次のカウントアップさせる変数int宣言して i=idex+n;を i<a.length; i++をしていますからidexが1でnが3だったら4で4<6になるんじゃないんですか? import java.util.Scanner; public class Ensyuu725 { /** * @param args */ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int []a=new int[]{1,3,4,7,9,11}; for(int i=0; i<a.length; i++){ System.out.println("配列aの要素は"+"a["+i+"]"+a[i]); } System.out.print("削除する a[idx]:"); int idex=sc.nextInt(); System.out.print("a[idex]から何個削除しますか?"); int n=sc.nextInt(); int k[]=arrayRmvOfn(a,idex,n); for(int i=0; i<k.length; i++){ System.out.println("配列aが消された後の要素は"+"k["+i+"]"+k[i]); } } /** * @param a * @param idex * @param n * @return tmp */ private static int[] arrayRmvOfn(int[] a, int idex, int n) { int[] tmp=new int[a.length-n]; for(int i=idex+n; i<a.length; i++){ tmp[i]=a[i]; } return tmp; } } ご指導お願いします。

    • ベストアンサー
    • Java
  • iアプリの表示

    いま、簡単なアプリをつくろうと思い、以下のところまでできましたが、 Flashのモーショントウィーンみたいしたいのですが、前の表示の画像が消えないので、つながった画像表示になります。どうしたら前の画像表示が消えて、新しい表示のみにすることができるか?教えていただけたらと思います。docomoのiアプリです。  public class JavaGame extends IApplication { public void start(){ MyCanvas canvas = new MyCanvas(); Display.setCurrent(canvas); canvas.run(); terminate(); } } import com.nttdocomo.ui.*; public final class MyCanvas extends Canvas{ public final static int FPS = 30; // フレームレート public final static int INTERVAL = 1000 / FPS; // フレームの間隔 // --- 変数の定義 long lastTime = 0; // 前回のフレーム終了時間 // --- 変数の定義 Graphics grp = getGraphics(); // グラフィックの取得 MediaImage mi; Image img; int chx; int chy; void run(){ init(); while(true){ proc(); draw(); sleep(); } } void init(){ mi=MediaManager.getImage("resource:///0.gif"); try{ mi.use(); }catch(Exception e){ } img =mi.getImage(); } void proc(){ chy+=10; } void draw() { grp.lock(); int color =Graphics.getColorOfRGB(0,0,255); grp.setColor(color); grp.drawImage(img,chx,chy); grp.unlock(true); } // --- 休止 void sleep() { long wait = INTERVAL - (System.currentTimeMillis() - lastTime); if(wait > 0) { try { Thread.sleep(wait); } catch(Exception e) { } } lastTime = System.currentTimeMillis(); } public void paint(Graphics grp){ } }//class

  • 静止的フィールドについて教えてください

    教えてください。以下のプログラムだとして、 class Box { static int a = 0 ; int b = 0 ; int c = a+4; } class sample { public static void main(String[] args) { Box n = new Box() ; n.a-- ; n.b-- ; n.c[1]-- ; System.out.println("n.a= "+n.a);//-1 System.out.println("n.b ="+n.b);//-1 System.out.println("n.c[2]="+n.c[2]);//4 Box m = new Box() ; m.a++ ; m.b++ ; m.c[2]++ ; System.out.println("n.a ="+n.a);//0 System.out.println("n.b ="+n.b);//-1 System.out.println("n.c[2] ="+n.c[2]);//4 System.out.println("m.a ="+m.a);//0 System.out.println("m.b ="+m.b);//1 System.out.println("m.c[2] ="+m.c[2]);//4 } } Box nの中のn.aの値はわかります。 ですが、Box mの中のn.aは、a がstaticフィールド(?)なので元の0に戻りますが、m.aがなぜ0なのかわかりません。 そもそもstatic int = ●; のときは、静止的intと教わったのですが、どういう現象が起こるのかいまいちです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • VB2015 例外処理について

    Windows10、VS2015 Community上で、 以下の文で例外処理が発生しました。 PctureBox1.Image.Save("C:fileName.png) この処理は、PictureBox1.Image に画像を内製したものを一度HDDに保存し、 すぐにこのFileを読み込み、別の用途に供するために使います。 これを何度か繰り返していると、以下の例外処理(添付画像1)が発生して、 処理は中断されます。私には、この画像から例外の理由を判断することは 出来ませんでした。 そこで、例外処理を以下のように設けました。 Try PctureBox1.Image.Save("C:fileName.png) Catch ex As Exception System.Console.WriteLine(ex.Message) End Try この結果、処理は、継続され結果的には正しく終了しました。 ただし、例外処理を捕捉した時のMSGは以下の通りです。 'Plan2016.vshost.exe' (CLR v4.0.30319: Plan2016.vshost.exe): 'C:\WINDOWS \Microsoft.Net\assembly\GAC_MSIL\System.Drawing.resources \v4.0_4.0.0.0_ja_b03f5f7f11d50a3a\System.Drawing.resources.dll' が読み込まれました。 モジュールがシンボルなしでビルドされました。 ということで、例外処理を挿入したことにより、処理は最後まで出来ましたが、 このままで終了するには、寝覚めが悪いです。 考えられる問題と、これを回避する方法をご教授頂きたくお願いいたします。

  • Javaの例外(tryとcatch)について

    Java初心者の大学生です。授業で、 「以下のプログラミングに書き足しをして、例外が3度繰り返されたら プログラムを終了するようにせよ。」 という課題が出ました。 以下のプログラムは… package kadai; import java.io.*; public class kadai { public static void main(String[] args)throws IOException { String ss; int idt,i; BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in)); for(;;){ System.out.print("整数入力: " ); ss= kbd.readLine(); try{ idt= Integer.parseInt(ss);        System.out.println("数値= " + idt); } catch(NumberFormatException e){    System.out.println("入力誤りです" ); continue; } break; } } } というものです。(見づらくて申し訳ありません!) 私はcatchの部分をfor文で3度繰り返しさせて、終了できるようにしようと思い、変数iを定義して、 for(i=0;i<3;i++){ catch(NumberFormatException e){ System.out.println("入力誤りです" ); } } という文を打ち込みました。しかし、エラーばかり出てきてしまい、 一向に解決できません。どこにどうやってfor文を打ち込めば解決 できるでしょうか?また、何故私が考えた文ではエラーが出てしまう のでしょうか? 基礎的な質問で申し訳ありませんが、ご指導をお願い致します。 もし参考になりそうなHP等がありましたら、そちらも教えて いただきたいです。

    • ベストアンサー
    • Java

専門家に質問してみよう