Hi, wollte grad nen kleinen Netzwerkchat schreiben, er ist bis jetzt noch ein Grundbaustein, den ich nachher zu der Endversion weiterführen möchte, doch beim versuch in Zeile 34 den OutPutstream im JTextArea wiederzugeben, gab es wohl probleme, was kann ich falsch gemacht haben.
wenn ihr noch verbesserungsvorschläge hab wäre ich dankbar dafür.
Java:
importjava.net.*;importjava.awt.Font;importjava.io.*;importjavax.swing.*;publicclassChatHost{publicstaticvoidmain(String[] args){ServerSocket echod;JFrame frame =newJFrame();JPanel panel =newJPanel();JTextArea tarea =newJTextArea("",30,29);
panel.add(tarea);
frame.setContentPane(panel);
frame.setVisible(true);
frame.setSize(1919,1079);
frame.setLocation(1,1);
frame.setTitle("Chat Host");try{System.out.println("Warte auf Verbindung auf Port 7...");
echod =newServerSocket(7);Socket socket = echod.accept();//System.out.println("Verbindung hergestellt");InputStream in = socket.getInputStream();OutputStream out = socket.getOutputStream();byte[] b =newbyte[100];int c;while((c = in.read(b))!=-1){
out.write(b,0,c);String strin =newString(b,0,c);System.err.println(strin);
tarea.setFont(newFont("Areal",Font.ITALIC,22));
tarea.setText(strin);
tarea.setEnabled(false);}System.out.println("Verbindung beenden");
frame.dispose();
socket.close();
echod.close();}catch(IOException e){System.exit(1);}}}
Habe mir Deinen Code kopiert und bei mir ausprobiert. Klappt bei alles wunderbar. Ist also schwer abzuschätzen, wo es bei Dir hakt. Deswegen nur ein paar allgemeine Tipps zur Fehlersuche:
- Mach noch mehr Sysout.printlns, um den Wert einzelner Variablen zu überprüfen
- Mach bei der IOException wenigstens noch einen printStacktrace, bevor Du Dein Programm verlässt. Du machst zwar korrekter weise ein exit mit ungleich 0, was der korrekte Wert für einen Fehler ist. Aber ich bin fast sicher, dass Du den Wert nicht prüfst und deswegen garnicht mitbekommst, wenn eine IOException geflogen ist. In diesem Fall könnte es z.B. sein, dass Port 7 schon belegt ist oder, dass Du (weil auf einem Unix unterwegs) ohne Root-Rechte gar kein ServerSocket auf Port 7 aufmachen darfst.
Das komische ist nur, ALLES im Programm funktioniert, sogar die Ausgabe zum testen in Zeile 33 klappt, warum aber nicht der befehl in Zeile 34??
Kann sein, dass ich was Grundlegendes vergessen hab, obwohl ich schon bestimmt 10 mal drübergelesen hab und nichts gefunden habe....
ist die JTextArea überhaupt zu sehen, kannst du etwas eintippen?
setze den setVisible(true);-Aufruf NACH das setSize(), dann verhinderst du gewisse Layout-Probleme,
hier ein Testprogramm ohne Socket:
Java:
publicclassChatHost2{publicstaticvoidmain(String[] args){JFrame frame =newJFrame();JPanel panel =newJPanel();JTextArea tarea =newJTextArea("hallo",30,29);
panel.add(tarea);
frame.setContentPane(panel);
frame.setSize(400,100);
frame.setLocation(1,1);
frame.setTitle("Chat Host");
frame.setVisible(true);try{System.out.println("Warte auf Verbindung auf Port 7...");Thread.sleep(2000);String strin ="test";System.out.println(strin);
tarea.setText(strin);// tarea.setEnabled(false);Thread.sleep(5000);System.out.println("Verbindung beenden");
frame.dispose();}catch(Exception e){System.exit(1);}}}
Ja, man hat es schon gesehen.
Funktioniert nich, is aba nich so schlimm, hab ne andere Methode und gefunden, so isses nich so gut aber auch ok. Danke für euer bemühen