# Java Chat funktioniert nicht richtig



## chsm (8. Dez 2010)

Hallo,
Ich habe einen kleinen Chat in Java (und PHP) geschrieben. Wenn ich das Programm in Eclipse öffne funktioniert alles problemlos, wenn der Chat aber in eine HTML-Datei eingebunden ist, bleibt die Anzeige immer gleich (auch nach erneutem öffnen des Browsers)!
Ich habe auch versucht die Dateiattribute zu ändern, aber es bringt nichts.
Hier der Code (Der PHP Code wird dafür ja wohl kaum wichtig sein):

```
import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Font;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Calendar;
import java.util.Scanner;
import javax.swing.Timer;


public class Chat extends Applet{
	Label lName = new Label("Name:");
	TextField fName = new TextField(20);
	TextArea Eingabe = new TextArea("", 3, 80, TextArea.SCROLLBARS_VERTICAL_ONLY);
	TextArea Verlauf = new TextArea("", 20, 80, TextArea.SCROLLBARS_VERTICAL_ONLY);
	String host = "http://www.smchristoph.de";
	String pfad = "/Chat/chat_" + getDatum() + ".txt";
	String skript = "/Chat/chatscript.php";
	String url  = host+pfad;
	Scanner scanner;
	Button schicken = new Button("Schicken");
	
	ActionListener VerlaufsAktuallisierung = new ActionListener(){
		public void actionPerformed(ActionEvent e){
			String VerlaufS = "";
			
			try {
				scanner = new Scanner(new URL(url).openStream());
			} catch (Exception ex) {
				return;
			}
			
			while(scanner.hasNextLine())
				VerlaufS += scanner.nextLine()+"\n";
			scanner.close();
			if(Verlauf.getText() != VerlaufS)
				Verlauf.setText(VerlaufS);
		}
	};
	
	ActionListener SchickenListener = new ActionListener(){
		public void actionPerformed(ActionEvent e){
			if(Eingabe.getText().length() < 1 || fName.getText().length() < 1)
				return;
			try{
				String body = "name=" + URLEncoder.encode(fName.getText(), "UTF-8") + "&" +
	              "text=" + URLEncoder.encode(Eingabe.getText(), "UTF-8");

				URL urlurl = new URL(host+skript);
				HttpURLConnection connection = (HttpURLConnection) urlurl.openConnection();
				connection.setRequestMethod("POST");
				connection.setDoInput(true);
				connection.setDoOutput(true);
				connection.setUseCaches(false);
				connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
				connection.setRequestProperty( "Content-Length", String.valueOf(body.length()) );

				OutputStreamWriter writer = new OutputStreamWriter( connection.getOutputStream() );
				writer.write(body);
				writer.flush();


				BufferedReader reader = new BufferedReader(
	                          new InputStreamReader(connection.getInputStream()) );


				writer.close();
				reader.close();
			}
			catch(Exception ex){System.err.println("Fehler");}
			
			Eingabe.setText("");
		}
	};
	
	public String getDatum(){
		String Datum = "";
		String Tag = Integer.toString(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
		String Monat = Integer.toString(Calendar.getInstance().get(Calendar.MONTH)+1);
		String Jahr = Integer.toString(Calendar.getInstance().get(Calendar.YEAR));
		if(Tag.length() == 1)
			Tag = "0"+Tag;
		Datum += Tag;
		if(Monat.length() == 1)
			Monat = "0"+Monat;
		Datum += "_"+Monat;
		Datum += "_"+Jahr;
			
		return Datum;
	}
	
	public void init(){
		this.setLayout(null);
		Verlauf.setEditable(false);
		Verlauf.setBackground(Color.white);
		lName.setFont(new Font("Serif", 0, 20));
		lName.setBounds(30, 10, 60, 15);
		fName.setBounds(90, 8, 150, 22);
		Eingabe.setBounds(10, 40, 600, 70);
		Verlauf.setBounds(10, 115, 600, 400);
		schicken.setBounds(400, 7, 120, 25);
		add(lName);
		add(fName);
		add(Eingabe);
		add(Verlauf);
		add(schicken);
		
		schicken.addActionListener(SchickenListener);
		Timer t = new Timer(1000, VerlaufsAktuallisierung);
		t.start();
	}
}
```


----------



## XHelp (8. Dez 2010)

Benutz für den Code Java-Tags.
Ansonsten werte die catch-Blöcke sinnvoll aus. Vermutlich kannst du mit deinem Applet keine Verbindung aufbauen, weil es nicht signiert ist.


----------



## chsm (8. Dez 2010)

XHelp hat gesagt.:


> Benutz für den Code Java-Tags.
> Ansonsten werte die catch-Blöcke sinnvoll aus. Vermutlich kannst du mit deinem Applet keine Verbindung aufbauen, weil es nicht signiert ist.



Ich habe es jetzt signiert,
aber auch so funktioniert es nicht.


----------



## XHelp (8. Dez 2010)

Und was sagen die Exceptions?


----------



## chsm (9. Dez 2010)

XHelp hat gesagt.:


> Und was sagen die Exceptions?



In Eclipse gibt es keine und sieht man die überhaupt, wenn man ein Applet im Browser öffnet?


----------



## XHelp (9. Dez 2010)

```
} catch (Exception ex) {
  return;
}
```
Da wirst du auch nicht allzu viele Exception sehen, wenn du sowas machst.
Log die Exceptions in irgendeiner Art und Weise. Notfalls auch vorübergehend über GUI anzeigen.


----------



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

Die Exceptions, die ein Applet wirft werden generell in der Java-Konsole ausgegeben.
Man sollte auch nie Exceptions unbehandelt lassen.

Mindestens die Ausgabe des Stacktrace sollte gemacht werden.
Mit 
	
	
	
	





```
ex.printStackTrace();
```
 kommt zumindest eine Ausgabe über den Fehler auf die Konsole.


----------

