# Applet & MySql



## mdoemli (23. Jun 2005)

Hallo zusammen,

hab mir hier im Forum alles durchgelesen was so über Datenbanken drinnen steht.
Im voraus, habe mir auch FAQ Warum manche Browser .... auch durchgelesen.

Also jetzt zu meinem Problem.
Ich lese Koordinaten aus einer MySql Datenbank aus, und zeichne die Punkte auf ein Bild und lass dieses ausgeben.
Wenn ich das Applet von Eclipse aus starte funktioniert es auch, wenn ich es aber über nen Browser aufmache funktioniert es nicht mehr.
Hab aber auch schon Punkte selbst reingeschrieben und dann werden sie auch vom Browser dargestellt.

Nun weiß jemand warum das so ist?

Applet:

```
public class PrintMap extends Applet {                   
	
	 public Image image; 
	 Database data_array[];
	 public void init(){
	  	try {
	  			image = getToolkit().createImage(new URL(getDocumentBase(), "http://miramonte.homelinux.net/portal/pic/muc2.jpg"));
	  		} catch(IOException ioe) {
	  			System.out.println("Fehler beim erstellen des Bild-Pfades");
	  		}
	  	}
	
	 public void paint (Graphics g) {

		try {
			g.drawImage( image, 0, 0, this );
			g.setColor(Color.red);

			data_array = getDataFromDatabase(2);
			int count_x = 0;
			int count_y = 0;
			while (data_array[count_x] != null){
				double x = data_array[count_x++].m_x;//Math.round(-1*(data_array[count++].m_x-575414219)/600);
				double y = data_array[count_y++].m_y;//Math.round((data_array[count++].m_y-135915119)/900);
				
				g.fillOval((int)y, (int)x, 10, 10);
				
				System.out.println("X-Wert "+x+" Y-Wert "+y);
			}
					
			} catch (SQLException e) {
			
			e.printStackTrace();
		}
			
	 } 
	 
	 public Database[] getDataFromDatabase(int id) throws SQLException{
	 	Database db = new Database();
		Connection conn = db.makeConnection("root","ei44","jdbc:mysql://localhost/trackingtool");
		id = 2;
		Database lokal_data_array[] = db.readFromDatabaseTrackingTool(conn, id);
	 	return lokal_data_array;
	 }
	

}
```

Gruß,

mdoemli


----------



## mdoemli (23. Jun 2005)

mhh,

der Fehler lieg im Aufruf der Datenbank, denke ich.


```
Connection conn = db.makeConnection("root","ei44","jdbc:mysql://localhost/trackingtool");
```

localhost stimmt im Falle eines Applets glaube ich nicht (bei Servlets passt das). 
Wenn das der Fehler ist, kann mir dann vielleicht jemand sagen wie das richtig heißen würde?

Gruß,

mdoemli


----------



## L-ectron-X (23. Jun 2005)

Diese Zeile solltest du umformen.

```
image = getToolkit().createImage(new URL(getDocumentBase(), "http://miramonte.homelinux.net/portal/pic/muc2.jpg"));
```

Bitte mal ersetzen mit:

```
image = getImage(new URL(getDocumentBase(), "pic/muc2.jpg");
```
getDocumentBase() liefert immer den Speicherort der HTML-Datei zurück, die das Applet einbettet.


----------



## mdoemli (23. Jun 2005)

mhh,
wenn ich das so mache werden die Punkte trotzdem nicht angezeigt.
Liegt das nicht an "localhost"?


----------



## L-ectron-X (23. Jun 2005)

Oh, sorry. Ich habe den catch-Block erst zu spät gelesen.
Hast du vor, ein Verzeichnis zu erstellen bzw. Bild zu speichern?
Welche Fehler werden ausgegeben, auch mal die Java-Console im Browser kontrollieren!


----------



## mdoemli (23. Jun 2005)

Nö möcht ich nicht.

Also:
-> Ich sammle über ein Servlet GPS-Daten und speichere diese in einer Datenbank.
-> nach der Fahrt soll man sich nun im Internet die gefahrene Route anschauen können
d.h. Applet liest die Daten aus der Datenbank rechnet dies um und zeichnet dies auf ein Bild.
-> Das bild  bzw. Karte wird angezeigt bloß die gezeichneten Punkte nicht. Funktioniert nur wenn ich aus Eclipse starte.

Fehlermeldung aus Konsole:



```
Exception in thread "AWT-EventQueue-6" java.lang.NoClassDefFoundError: com/bmw/online/portal/service/Database
	at PrintMap.getDataFromDatabase(PrintMap.java:62)
	at PrintMap.paint(PrintMap.java:45)
	at sun.awt.RepaintArea.paintComponent(Unknown Source)
	at sun.awt.RepaintArea.paint(Unknown Source)
	at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
```


----------



## mdoemli (23. Jun 2005)

Ach misst,

kann das sein dass das nicht funktioniert, da die Klasse Database in WEB-INF liegt, d.h. bei der Ausführung vom Applet auf dem Client kann ja eigentlich nicht darauf zugegriffen werden.


----------



## Bleiglanz (23. Jun 2005)

alles unterhalb WEB-INF/

=> kann von externen clients (eines Webcontainers) NICHT erreicht werden


----------



## mdoemli (23. Jun 2005)

Ok,
das ist blöd.

Wenn ich das Bild von einem Servlet aufbereiten lasse und dann auf der Platte speichere und dann nur noch mit dem Applet das Bild aufrufe muss ja funktionieren.

Hat jemand vielleicht ein kleines Beispiel über Bild öffen und wieder speichern. Geht das auch über die Klasse Image?

Gruß,

mdoemli


----------



## Bleiglanz (23. Jun 2005)

mdoemli hat gesagt.:
			
		

> Ok,
> Wenn ich das Bild von einem Servlet aufbereiten lasse und dann auf der Platte speichere und dann nur noch mit dem Applet das Bild aufrufe muss ja funktionieren.


das geht auch ohne zwischenspeichern

servlets die dynamisch bilder erzeugen (und bytes zurückschicken, also ohne Writer arbeiten) sind ganz ok

google einfach mal, gibts genügend beispiele im netz

aber halt ein servlet-mapping dafür einrichten


----------



## mdoemli (23. Jun 2005)

Ok Klasse,

vielen Dank, und noch nen schönen Tag.


----------

