# Java-Applet geht nicht (auf dem Webserver)



## Bud (17. Jan 2010)

Hallo Leute! 

Ich versuche mich gerade in Java und beobachte etwas komisches. Ich habe in meinem Java-Applet einen Thread erstellt und wenn ich das Applet lokal auf meiner Festplatte mit einem Browser ausführe, funktioniert es problemlos. 

Wenn ich das Applet aber auf meinen Webserver hochlade und es über das Internet mit meinem Browser  öffne, bekomme ich die folgende Fehlermeldung: 


> java.lang.NullPointerException
> at sun.plugin2.applet.Plugin2Manager.findAppletJDKLevel(Unknown Source)
> at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
> at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
> ...



Wenn ich den Thread rausnehme, funktioniert es auch über das Internet. Komisch, oder? Habt ihr eine Ahnung, woran das liegen kann?




Das Applet sieht wie folgt aus:


```
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Test_001 extends Applet implements MouseListener, MouseMotionListener {
   int width, height;
   boolean isButtonPressed = false;
   Image img;
   Graphics buffergrafikausgabe;
   Image buffergrafik;
   long startTime;

   public void init() 
   {
      width = getSize().width;
      height = getSize().height;
      setBackground( Color.blue );
      addMouseListener( this );
      addMouseMotionListener( this );
	  buffergrafik=createImage(width,height); 
	  buffergrafikausgabe=buffergrafik.getGraphics();
	  startTime = System.currentTimeMillis();
		Thread repeatThread = new Thread() {
			public void run() 
			{
				while(true) 
				{
					try 
					{
						Thread.sleep(404);
					} 
					catch(InterruptedException ex) 
					{
						// nix machen
					}
					repaint(); //Hier wird die Paintmethode aufgerufen, die die Zeit neu ausgibt.
				}
			}
		};
		repeatThread.start(); // Dieser Thread uebernimmt die  Erneuerung

   }

   public void mouseEntered( MouseEvent e ) {  }
   public void mouseExited( MouseEvent e ) {   }
   public void mouseClicked( MouseEvent e ) { }
   public void mousePressed( MouseEvent e ) {   }
   public void mouseReleased( MouseEvent e ) {    }
   public void mouseMoved( MouseEvent e ) {     }
   public void mouseDragged( MouseEvent e ) {    }
      
    public void paint( Graphics g ) 
		{		
		long timeNow = System.currentTimeMillis();
		long diff = timeNow-startTime;
		if ( isButtonPressed ) {			}
		else 
			{ 		 }
			buffergrafikausgabe.setColor (Color.blue);
			buffergrafikausgabe.fillRect (0,0,100,200); 
			buffergrafikausgabe.setColor (Color.black);		
			buffergrafikausgabe.drawString ("ms : "+diff, 3,75);				
			g.drawImage(buffergrafik,0,0,this);
		}
	public void update (Graphics g)
		{paint(g);}
		}
```


----------



## Bud (18. Jan 2010)

Moin! 

Hat denn wirklich keiner eine Idee?


----------



## z3r0 (19. Jan 2010)

habe genau das gleiche problem. Habe auch die Sufu genutzt aber überall wurde das thema ohne lösung einfach abgebrochen


----------



## DerEisteeTrinker (19. Jan 2010)

von Applets hab ich keinen Plan, aber könnte vllt daran liegen, dass der Server den Thread startet und der Client auf diesen Thread zugreifen will, ihn aber nicht bekommt, ergo NullPointer.

oder Browser machen für Applets keine Threads :bahnhof:

Wofür brauch ich bei einem Applet noch nen eigens angelegten Thread?


----------



## z3r0 (19. Jan 2010)

zb wenn dein applet 2 berechnungen gleichzeitig ausführen soll und zu dem das gui aber weiterhin benutzbar sein soll.


----------



## Bud (19. Jan 2010)

Hallo Leute, Moin z3ro,

es beruhigt mich, dass ich nicht der einzige mit dem Problem bin. Aber kann es denn wirklich sein, dass hier wirklich keiner eine Ahnung hat? 

Ist es vielleicht ein Rechte-Problem? Nehmen sich Threads zu viele Rechte heraus - ich bin echt ratlos.


----------



## L-ectron-X (20. Jan 2010)

Es sind einfach so viele Fehler drin, dass ich nicht glaube, dass sich der oben gepostete Code überhaupt kompilieren, geschweige denn ausführen lässt. (nicht mal lokal)

-createImage(...) gibts nicht in Applet, ergo brauchst du das passende Objekt (Graphics)
-Es gibt nur gaaanz wenige Ausnahmen, in denen getGraphics() augerufen werden sollte. Dein Code gehört nicht zu einer dieser Ausnahmen...
-Leere Code-Blöcke (if-Abfrage in der paint()-Methode) - was soll das?

Ist das oben dir komplette Fehlermeldung, oder fehlt da noch was?


----------



## Bud (20. Jan 2010)

Hallo L-ectron-X,

vielen Dank erstmal für Deine Hilfe. 

1. Ja, sicherlich sind da noch einige Fehler enthalten, aber ich programmiere ja nun auch erst seit 2 Wochen in java und genau dafür gibt es ja nun auch "Anfänger"-Foren.

2. Der Code wird ohne Probleme und anstandslos compiliert. Wie bereits gesagt, kann er lokal fehlerfrei ausgeführt werden.

3. Der Code ist eigentlich viel länger und ich habe die unwichtigen Passagen rausgenommen - Das sollte dann erklären, wieso einige Blöcke leer sind. 

4. Ich konnte feststellen, dass bei Beseitigung des Threads das Applet auch auf dem Webserver wunderbar ausgeführt wird - Ich vermute daher, dass der Fehler nicht in den leeren Blöcken, sind in dem Thread zu finden ist. Aber genau hier bin ich überfragt. 

Die Methode getGraphics() habe ich eingesetzt, um das Bild flimmerfrei darzustellen. Ist dafür nicht so gut geeignet?

Gruß,
Bud


----------



## Bud (21. Jan 2010)

Hilfe!


----------



## z3r0 (22. Jan 2010)

ich kann nur gestätigen, dass es an den threads liegen muss.
Ich habe mein applet nun von zusätzlichen threads befreit und siehe da, es läuft ohne Probleme.


----------

