# Canvas kann nichts auf Graphics drawen



## Hutmacher (13. Okt 2009)

Wiso funktioniert das nicht? Es soll nurbeim Durck von der Taste 5 was zeichnen ...

```
package hello;

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

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

   public void paint(Graphics g)
   {
       g.drawString("Hello", 55, 55, Graphics.BOTTOM);
   }
   
   protected void keyPressed(int keyCode)
   {
       if (keyCode == DRAW_COMMAND)
       {
           repaint();
       }
   }
}
```

Das rufe ich so auf:

```
...
 public Midlet()
    {
        display = Display.getDisplay(this);
    }

    public void startApp()
    {
        display.setCurrent(new HelloCanvas());
    }
...
```

Aber der Handy-Screen bleibt schwarz und ich kassiere:

```
TRACE: <at java.lang.IllegalArgumentException>, Exception caught in Display class
java.lang.IllegalArgumentException
 - java.lang.System.quickNativeThrow(), bci=0
 - hello.HelloCanvas.paint(), bci=9
 - javax.microedition.lcdui.CanvasLFImpl.uCallPaint(), bci=202
 - javax.microedition.lcdui.Display$ChameleonTunnel.callPaint(), bci=33
 - com.sun.midp.chameleon.layers.BodyLayer.paintBody(), bci=12
 - com.sun.midp.chameleon.CLayer.paint(), bci=46
 - com.sun.midp.chameleon.CWindow.paintLayers(), bci=115
 - com.sun.midp.chameleon.CWindow.paint(), bci=127
 - com.sun.midp.chameleon.MIDPWindow.callPaint(), bci=45
 - javax.microedition.lcdui.Display.callPaint(), bci=227
 - javax.microedition.lcdui.Display$ForegroundEventConsumerImpl.handleDisplayForegroundNotifyEvent(), bci=215
 - com.sun.midp.lcdui.ForegroundEventListener.process(), bci=53
 - com.sun.midp.events.EventQueue.run(), bci=179
 - java.lang.Thread.run(), bci=11
```


----------



## SlaterB (13. Okt 2009)

paint wird auch so aufgerufen, unabhängig von deiner keyPressed-Steuerung tritt da die Exception auf,
was es mit Graphics.BOTTOM auf sich hat, weiß ich nicht, in Tutorials sehe ich jedenfalls (in den letzten 30 Sekunden google)
nur Top | Left
J2ME Draw String

ob keyPressed() usw. funktioniert wäre danach eine andere Frage,
um das potentiell ständig aufgerufene paint() dort sauber zu beeinflussen, setze z.B. eine boolean-Variable,
nur wenn die true ist, dann in paint auch was zeichnen,
den Zustand der boolean-Variablen kannst du in keyPressed() steuern, die wird sicher kein anderer automatisch ändern


----------



## Hutmacher (13. Okt 2009)

Danke, es klappt soweit; aber kann mir jemand das 
	
	
	
	





```
Graphics.TOP | Graphics.LEFT
```
 erläutern? Was hat das 
	
	
	
	





```
|
```
 da zu suchen? Das steht doch, soweit ich weiß, für einen logischen Oder-Vergleich ohne Short-Circuit-Evaluation (heißt also beide Werte werden ausgewertet, anstatt nur des erstens, wenn dieser wahr ist) ...


----------



## SlaterB (13. Okt 2009)

bei Bits ist das eine Rechenoperation

001 | 010 = 011

irgendjemand anders schaut dann, welche Bits alle gesetzt sind,


Befehl Bit Operatoren

edit:
bei boolean ist es letztlich genauso eine Rechnung


----------

