# Chat JFrame



## xDarkSunx (15. Mrz 2011)

Heaay Community

ich bin dabei ein chatfenster zu bassteln für meinen chat

bloß komm ich nicht mehr weiter ich weiss nicht wie ich die errors lösen kann aus der chat.java

CHAT SERVER :


```
import java.net.*;
import java.io.*;
import java.util.*;

public class chatserver implements Runnable
{
	public static final int PORT = 8766;
	protected ServerSocket listen;
	protected Vector connections;
	Thread connect;

	public chatserver()
	{
		try
		{
			listen = new ServerSocket(PORT);
		} catch (IOException e)
		{
			System.err.println("Fehler beim Erzeugen der Sockets:"+e);
			System.exit(1);
		}

		connections = new Vector();

		connect = new Thread(this);
		connect.start();
	}

	public void run()
	{
		try
		{
			while(true)
			{
				Socket client=listen.accept();

				connection c = new connection(this, client);
				connections.addElement(c);
			}
		} catch (IOException e)
		{
			System.err.println("Fehler beim Warten auf Verbindungen:"+e);
			System.exit(1);
		}
	}

	public static void main(String[] args)
	{
		new chatserver();
	}

	public void broadcast(String msg)
	{
		int i;
		connection you;

		for (i=0; i<connections.size(); i++)
		{
			you = (connection) connections.elementAt(i);
			you.out.println(msg);
		}
	}
}
```

CONNECTION:


```
import java.net.*;
import java.io.*;

class connection extends Thread
{
	protected Socket client;
	protected DataInputStream in;
	protected PrintStream out;
	protected chatserver server;

	public connection(chatserver server, Socket client)
	{
		this.server=server;
		this.client=client;

		try
		{
			in = new DataInputStream(client.getInputStream());
			out = new PrintStream(client.getOutputStream());
		} catch (IOException e)
		{
			try { client.close(); } catch (IOException e2) {} ;
			System.err.println("Fehler beim Erzeugen der Streams: " + e);
			return;
		}

		this.start();
	}


	public void run()
	{
		String line;

		try
		{
			while(true)
			{
				line=in.readLine();
				if(line!=null)
					server.broadcast(line);
			}
		} catch (IOException e)
		{
			System.out.println("Fehler:" + e);
		}
	}
}
```


CHAT:


```
import java.net.*;
import java.io.*;
import java.awt.*;
import java.*;
import javax.swing.*;
public class Chat extends JFrame implements Runnable
{
public static final int PORT = 8765;
Socket socket;
DataInputStream in;
PrintStream out;
TextField inputfield;
TextArea outputarea;
Thread thread;

public Chat()
{
super("Fenster");
setSize(300,300);
setLocation(300,300);

setVisible(true);
inputfield = new TextField();
outputarea = new TextArea();
outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
outputarea.setEditable(false);
this.setLayout(new BorderLayout());
this.add("South", inputfield);
this.add("Center", outputarea);
this.setBackground(Color.lightGray);
this.setForeground(Color.black);
inputfield.setBackground(Color.white);
outputarea.setBackground(Color.white);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

public static void main(String[] args)
{
Chat d = new Chat();
}


public void start()
{
try
{
socket = new Socket(this.getCodeBase().getHost(), PORT);
in = new DataInputStream(socket.getInputStream());
out = new PrintStream(socket.getOutputStream());
}
catch (IOException e)
{
this.showStatus(e.toString());
say("Verbindung zum Server fehlgeschlagen!");
System.exit(1);
}
say("Verbindung zum Server aufgenommen...");
if (thread == null)
{
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
}

public void stop()
{
try
{
socket.close();
} catch (IOException e)
{
this.showStatus(e.toString());
}
if ((thread !=null) && thread.isAlive())
{
thread.stop();
thread = null;
}
}

public void run()
{
String line;
try
{
while(true)
{
line = in.readLine();
if(line!=null)
outputarea.appendText(line+'\n' );
}
} 
catch (IOException e) { say("Verbindung zum Server abgebrochen"); }
}

 public void say(String msg)
{
outputarea.appendText("*** "+msg+" ***\n");
}
}
```

die fehler sind bei 

(->socket = new Socket(this.getCodeBase().getHost(), PORT);<-)
(->this.showStatus(e.toString());<-)
(-> this.showStatus(e.toString()); <-)

ich weiss echt nicht wie ich die fehler raus kriege hab schon gegoogelt wie wer weis was :rtfm:

Hilfe wäre Lieb


----------



## SlaterB (15. Mrz 2011)

```
new Socket(this.getCodeBase().getHost(), PORT);
```
gibts nicht, vielleicht bei Applets, gib stattdessen die benötigte IP direkt an, z.B.

```
new Socket("localhost", PORT);
```
wenn verschiedene Computer im Spiel sind brauchst du nun mal die IP, die kann nicht hergezaubert werden

showStatus() hast du wohl auch irgendwo kopiert, ist aber nicht in jedem Programm der Welt eine Grundfunktion,
was erwartest du überhaupt was dann passiert?
System.out.println() ist ein Standardbefehl für die Konsole, sollte man schon im aller ersten Hello World-Programm kennen,
wenn jetzt bei Netzwerk + GUI noch nicht, dann ist eh alle Hoffnung verloren

wenn du etwas in die JTextArea schreiben willst dann mache das auch, 
wie steht falls benötigt in entsprechenden Tutorials oder Internetsuche 'JTextArea example'


----------



## xDarkSunx (15. Mrz 2011)

```
import java.net.*;
import java.io.*;
import java.awt.*;
import javax.swing.*;


public class Chat extends JFrame implements Runnable
{
public static final int PORT = 8765;
Socket socket;
DataInputStream in;
PrintStream out;
JTextField inputfield;
JTextArea outputarea;
Thread thread;

public void start()
{
try
{
socket = new Socket("localhost", PORT);
in = new DataInputStream(socket.getInputStream());
out = new PrintStream(socket.getOutputStream());
}
catch (IOException e)
{
//this.showStatus(e.toString());
say("Verbindung zum Server fehlgeschlagen!");
System.exit(1);
}
say("Verbindung zum Server aufgenommen...");
if (thread == null)
{
thread = new Thread(this);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
}

public void stop()
{
try
{
socket.close();
} catch (IOException e)
{
//this.showStatus(e.toString());
}
if ((thread !=null) && thread.isAlive())
{
thread.stop();
thread = null;
}
}
 
public void run()
{
String line;
try
{
while(true)
{
line = in.readLine();
if(line!=null)
outputarea.append(line+'\n' );
}
} 
catch (IOException e) { say("Verbindung zum Server abgebrochen"); }
}


public void say(String msg)
{
outputarea.append("*** "+msg+" ***\n");
}

public Chat()
{
super("Fenster");
setSize(300,300);
setLocation(300,300);

setVisible(true);
inputfield = new JTextField();
outputarea = new JTextArea();
outputarea.setFont( new Font("Dialog", Font.PLAIN, 12));
outputarea.setEditable(false);
this.setLayout(new BorderLayout());
this.add("South", inputfield);
this.add("Center", outputarea);
this.setBackground(Color.lightGray);
this.setForeground(Color.black);
inputfield.setBackground(Color.white);
outputarea.setBackground(Color.white);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}









public static void main(String[] args)
{
Chat d = new Chat();
}
}
```

habe es jetzt so aber es will immer noch nicht das fenster startet zwar man kann aber nichts geschriebenes abschicken oder empfangen


----------



## SlaterB (15. Mrz 2011)

wie gesagt, von nix passiert auch nichts, du brauchst Textfelder, Buttons, oder die JTextArea muss auf getippte reagieren,
alle komplizierte Logik fehlt in deinem Programm, nur 3 Komponenten einzufügen reicht nicht

zwei erste Schritte:
> setVisible(true); 
solltest du an das Ende des Konstruktors schieben,
danach könntest du noch start(); aufrufen, dann passiert zumindest, was in dieser Methode alles steht,

System.exit(1);
im catch dort ist kontraproduktiv, wenn du die Fehlermeldung in der JTextArea noch lesen willst,

so, nun aber genug von mir, ich will das gar nicht alles begleiten,
eine mögliche Internetsuche: 'java chat jframe example'
erster Link:
Java TCP Sockets and Swing Tutorial
das sieht wirklich passend aus, bitte durcharbeiten


----------

