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
-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?
Es funktioniert auch alles soweit, nur das Problem:
Ich bekomme immer einem
Code:
java.lang.OutOfMemoryError: PermGen space
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: