# JAVA Chat



## Extremefall (23. Dez 2010)

Hallo,
ich möchte für meine Website einen JAVA-Chat programmieren. Nun bräuchte ich dazu ein paar grundliegende Informationen. Wo werden die Texte gespeichert? Empfiehlt sich eher MYSQL oder eine Textdatei? Wo liegen Vor -und Nachteile? Wie bewerkstellige ich das ganze am besten? 

Meine Idee:
Ich habe eine Eingabe Klasse, die die Eingaben empfängt und weiterverarbeitet (speichert) und eine Ausgabe Klasse, die die Eingaben aus einer Datei oder Datenbank ausliest und dem Client dann zukommen lässt.

MFG


----------



## kay73 (23. Dez 2010)

Das ist natürlich ein sehr sehr grober Ansatz. ;-) Was ist denn Dein Server für einer? Apache/PHP/MySQL? Kann der überhaupt Java-Jobs laufen lassen? Falls ja, ist das nicht schwer zu machen. Für einen simplen UDP-Chat braucht es nicht mal eine Datenbank.


----------



## Extremefall (23. Dez 2010)

Ich habe jetzt den folgenden Chat (http://java.seite.net/chat/quellcode.txt) übernommen, doch es kommt dieser Fehler: Chat. Woran könnte das liegen? Port habe ich schon geprüft.


----------



## kay73 (23. Dez 2010)

Das Applet ist nicht signiert und versucht irgendetwas zu machen, was es nicht darf, wenn der Anwender ihm nicht vertraut. Es fliegt eine AccessControlException. Denke mal, ein Verbindungsversuch wird unterbunden.


----------



## Extremefall (23. Dez 2010)

Ok, dass habe ich soweit verstanden. Nur wie kann man den Fehler beheben? Mit Netzwerkprogrammierung kenn ich mich noch nicht so gut aus.


----------



## kay73 (23. Dez 2010)

Du musst das JAR File, das das Applet enthält signieren. Dazu musst Du einen Keystore mit einem Schlüsselpaar erzeugen.

```
keytool -genkeypair -v -validity 999 -alias Extremefall -keypass geheim123 -keystore mein_keystore.jks -storepass geheim321 -dname "cn=schmitz Katze, ou=management, o=Microsoft, c=US"
```
Dann mit jarsigner das Applet signieren.
	
	
	
	





```
jarsigner -verbose  -keypass geheim123 -keystore mein_keystore.jks -storepass geheim321 myjar.jar Extremefall
```
Wenn das Applet geladen wird, kommt ein Dialog hoch, in dem gefragt wird, ob man dem Applet vertraut.

Was mich nur wundert ist, warum die Exception fliegt, weil es eigentlich erlaubt ist, dass sich das Applet zum Host verbindet, von dem es geladen wurde. Eigentlich sollte hätte die Exception nicht fliegen sollen.


----------



## Extremefall (23. Dez 2010)

Ich habe aber das Applet über eine Klasse eingebunden. Muss es ein JAR File sein?


----------



## kay73 (23. Dez 2010)

Extremefall hat gesagt.:


> Muss es ein JAR File sein?


Grundsätzlich nicht notwendigerweise, weil ich vermute, dass die Fehlerursache eine andere ist. Zum Signieren muss es natürlich ein JAR-File sein.


----------



## L-ectron-X (23. Dez 2010)

Die Fehlermeldung lautet:


			
				Java Console hat gesagt.:
			
		

> java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.1)
> at java.security.AccessControlContext.checkPermission(Unknown Source)
> at java.security.AccessController.checkPermission(Unknown Source)
> at java.lang.SecurityManager.checkPermission(Unknown Source)
> ...



Das Applet versucht die VM zu schließen, das ist einem unsignierten Applet verboten.
Aber selbst wenn man es einem Applet durch Signieren (FAQ-Beitrag) erlauben würde, wäre das nicht schön, weil der Browser geschlossen werden würde.

```
System.exit(0);
```
 gehört in kein Applet!


----------



## Extremefall (23. Dez 2010)

Hallo,
der Fehler mit der Verbindung lässt sich dann aufhalten, wenn man das System.exit aus dem Code entfernt. Allerdings funktioniert es dann immer noch nicht wie gewollt. Muss es signiert sein? Könnte da der Fehler liegen?

Chat


----------



## L-ectron-X (23. Dez 2010)

Die Fehlermeldung lautet:


			
				Java Console hat gesagt.:
			
		

> Exception in thread "Thread-11" java.lang.NullPointerException
> at chat.chatapplet.run(chatapplet.java:85)
> at java.lang.Thread.run(Unknown Source)


In Zeile 85 in _chatapplet.java_ wurde etwas nicht initialisiert.
Das Applet muss signiert werden, wenn es sich zu einem anderen Rechner/Host verbindet, als zu dem, von dem es heruntergeladen wurde.


----------



## Extremefall (23. Dez 2010)

Eine Frage zum Signieren: Ich habe die Bat Datei erstellt, nur kann kein Passwort eingeben. Woran könnte das liegen? Habe alles angepasst. Und wo muss die Datei hin? Ist da das bin Verzeichnis gemeint oder das Projektverzeichnis? Weil dann der Pfad ja noch angepasst werden müsste.

Wo siehst du die Exception? Ich finde die momentan nicht:


> *** Verbindung zum Server fehlgeschlagen! ***
> *** Verbindung zum Server aufgenommen... ***


----------



## kay73 (23. Dez 2010)

Ich habe das Applet mal in zwei Browsern localhost und einem im LAN gestartet. Geht zumindest im LAN auch auch ohne Signieren. Es reicht, chatapplet.class in dasselbe Verzeichnis wie die HTML Seite zu kopieren.

Der Code ist aber allenfalls zu Lehrzwecken geeignet, (wenn man Java-Historiker ist...)

Ich würde vorschlagen, daß der Server UDP statt TCP/IP verwendet. Das spart Connections und vermeidet Threads. Dann hat es keine Usernamen, -verwaltung, Authentifizierung usw...


----------



## L-ectron-X (23. Dez 2010)

Habe gerade noch mal deine Webseite aufgesucht. Gut, dein Applet wurde signiert, gibt aber immer noch den Fehler in der Java Console aus:


			
				Java Console hat gesagt.:
			
		

> Exception in thread "Thread-12" java.lang.NullPointerException
> at chat.chatapplet.run(chatapplet.java:85)
> at java.lang.Thread.run(Unknown Source)


Schau dir mal den Code von chatapplet.java an, in Zeile 85 ist noch etwas ohne Initialwert.


----------



## kay73 (23. Dez 2010)

Scheint der InputStream des Sockets zu sein. In start() fliegt eine stille Exception, das catch{} geht aber durch, "in" bleibt uninitialisiert.

Dieser Code ist für die Praxis unbrauchbar.


----------



## L-ectron-X (23. Dez 2010)

@Extremefall: Wenn du einen Chat in deine Seite einbauen möchtest, kannst du dir die Jar-Dateien von EIRC (benutzt auch java-forum.org) oder PJIRC (benutzt auch byte-welt.net) in eine HTML-Datei einbinden.


----------



## Extremefall (23. Dez 2010)

Danke, werde ich einmal versuchen.


----------



## kay73 (23. Dez 2010)

Das sind doch normale IRC Clients. Wenn man einen eigenen Server hat, könnte man auch schönere Sachen machen.


----------



## XHelp (23. Dez 2010)

kay73 hat gesagt.:


> Das sind doch normale IRC Clients. Wenn man einen eigenen Server hat, könnte man auch schönere Sachen machen.



Welche denn z.B.?
IRC Client reicht doch völlig aus. Wer will, kann dann auch einen anderen Client nehmen, die gibt es ja sie Sand am Meer.


----------



## L-ectron-X (23. Dez 2010)

kay73 hat gesagt.:


> Wenn man einen eigenen Server hat, könnte man auch schönere Sachen machen.


Sicher, aber bei den Vorkenntnissen von Extremefall erscheint mir das als die beste und schnellste Lösung.


----------

