OutOfMemory-Error? Woran liegt's?

Status
Nicht offen für weitere Antworten.

Hutmacher

Bekanntes Mitglied
Das hier ist nur ein kleins Programm, was einen behelfsmäßigen Farbverlaufshintergrund zeichnet und dann Hallo auf den Screen schreibt. Drückt man die Taste 5, so steht dort, dass die Taste 5 gedrückt wurde.

Es funktioniert auch alles soweit, nur das Problem:
Ich bekomme immer einem
Code:
java.lang.OutOfMemoryError: PermGen space
-Error ausgegeben! Über Google finde ich nur, dass ich meinen PermGen-Space erhöhen soll usw. Aber das würde mir auf meinem Handy ja auch nicht viel bringen.

Auf dem Handy sieht das Ganze so aus, dass es ca. den halben Farbverlauf drawt und dann stoppt (da ist dann wahrscheinlich der Memory-Leak).

Habe schon versucht, Speicherplatz zu sparen ... mit Bytes und Shorts x]
Aber woran in meinem Code kann es liegen? Sollte ich vielleicht den Farbverlauf lieber als PNG mitliefern und ihn drawen? Ich meine, wenn es möglich ist, 3D-Spiele auf einem Handy laufen zu lassen, warum geht dann das hier nicht einmal?

Java:
package hello;

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

public class HelloCanvas extends Canvas
{
   private final static byte DRAW_COMMAND = KEY_NUM5;

   private Graphics screen;
   private Position middle = new Position(getWidth() / 2, getHeight() / 2);
   private boolean fiveWasPressed;

   public void paint(Graphics g)
   {
       if (screen == null)
       {
           this.screen = g;
       }

       drawBackground();
      
       if (fiveWasPressed)
       {
           drawFiveWasPressed();
           fiveWasPressed = false;
       }
       else
       {
           drawHello();
       }
   }
   
   protected void keyPressed(int keyCode)
   {
       if (keyCode == DRAW_COMMAND)
       {
          fiveWasPressed = true;
          repaint();
       }
   }

   private void drawBackground()
   {
       for (short i = 0; i < getHeight(); i += 1)
       {
            screen.setColor(0, i, i);
            screen.drawLine(0, i, getWidth(), i);
       }
   }

   private void drawHello()
   {
       screen.setColor(255, 255, 255);
       screen.drawString("Hello", middle.x, middle.y, Graphics.BASELINE | Graphics.HCENTER);
   }

   private void drawFiveWasPressed()
   {
       screen.drawString("5 was pressed!", middle.x, middle.y, Graphics.BASELINE | Graphics.HCENTER);
   }
}
 
Zuletzt bearbeitet:

The_S

Top Contributor
Kopiert, die Position-Klasse ausgetauscht (gibts in Standard Java-ME nicht), ausgeführt: Läuft.
 

Hutmacher

Bekanntes Mitglied
Kopiert, die Position-Klasse ausgetauscht (gibts in Standard Java-ME nicht), ausgeführt: Läuft.

Danke für's Ausprobieren :)
Ich meine, den Fehler gefunden zu haben. Ich arbeite nicht mit Eclipse oder dergleichen, sondern mit dem Java-Me-SDK 3.0 mit integrierter IDE.
Und da habe ich es wohl vielleicht zu oft runnen lassen, ohne es zu terminaten ... jetzt scheint es jedenfalls wieder zu funktionieren.
 

The_S

Top Contributor
Danke für's Ausprobieren :)

Wollte eigentlich den Fehler reproduzieren, hat so aber nicht geklappt :D

DIch arbeite nicht mit Eclipse oder dergleichen, sondern mit dem Java-Me-SDK 3.0 mit integrierter IDE.

Schrecklich das Teil ... aber ich hab das Programm auch dort getestet, da ich sonst nichts anderes zur Hand hatte.

Und da habe ich es wohl vielleicht zu oft runnen lassen, ohne es zu terminaten ... jetzt scheint es jedenfalls wieder zu funktionieren.

Normalerweise lässt sich das Programm in dieser tollen IDE nur einmal ausführen. Willst du es ein zweites Mal starten, musst du den Emulator vorher wieder beenden. Kann also durchaus daran gelegen haben. Einen OOME sollte es trotzdem nicht geben. Egal, hauptsache s funktioniert jetzt!

Thread bitte noch als "erledigt" markieren.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben