Witamy, nie chciałyśmy zaczynać nowego tematu więc piszem tutaj. Chciałyśmy napisać czata w javie. Na razie mamy tylko 2 okienka - jedno jest klientem, drugie działa jako server...przynajmniej takie było założenie ;-) Problem pojawia sie w momencie wysyłania wiadomości, a mianowicie nie pokazuje sie ona w drugim oknie. Miałyśmy już zrobioną wersję z możliwością wysyłania i odbierania wiadomości (drugie okienko czekało na odbiór wiadomości z pierwszego, dopiero wówczas drugie mogło odpowiedzieć - a to nie o to przecież chodzi w czacie). Chciałybyśmy aby odbierać/wysyłać można było w każdym momencie.
Może od razu napiszemy, że jesteśmy początkujące w javie, więc prosimy się nie śmiać z głupot w kodzie ;-P Z góry dziękujemy za pomoc :)
Oto nasz kod:
Server:
import javax.swing.;
import java.awt.;
import java.awt.event.;
import java.net.;
import java.io.*;
public class Server_beta extends JFrame{
JTextArea ta = new JTextArea();
JTextField tf = new JTextField();
JScrollPane sp=new JScrollPane(ta);
JButton nasluchuj = new JButton("Nasłuchuj");
JPanel fp = new JPanel();
BufferedReader in1;
PrintStream out;
Klient_beta kb;
public Server_beta()
{
super("Server");
ta.setEditable(false);
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
cp.add(tf,"North");
cp.add(sp,"Center");
cp.add(fp,"South");
fp.setLayout(new FlowLayout());
fp.add(nasluchuj);
nasluchuj.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
ServerSocket server = new ServerSocket(777);
Socket gniazdo = server.accept();
in1 = new BufferedReader(new InputStreamReader(gniazdo.getInputStream()));
out = new PrintStream(gniazdo.getOutputStream());
nasluchuj.setEnabled(false);
}
catch(IOException ex){
System.out.println(ex);
}
}});
tf.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
w = new Watek(ta, tf, out, kb);
w.start();
}});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,300);
setVisible(true);
}
public void odbierz_server(){
try{
String s = in1.readLine();
ta.append("Gustaw: "+s+" \n");
}
catch(IOException ex){
System.out.println(ex);
}
}
public static void main(String[] a)
{
Server_beta sb = new Server_beta();
}
Watek w = new Watek(ta, tf, out, kb);
}
class Watek extends Thread{
JTextArea pole;
JTextField wpis;
PrintStream wyjscie;
Klient_beta klie;
Watek(JTextArea p, JTextField wpi,PrintStream ps, Klient_beta kkk){
pole=p;
wpis=wpi;
wyjscie=ps;
klie=kkk;
}
public void run(){
String cos = wpis.getText();
if(!cos.equals(""))
{
wyjscie.println(cos);
pole.append("Konrad: "+cos+" \n");
wpis.setText("");
}
klie.odbierz_klient();
}
}
Klient:
import javax.swing.;
import java.awt.;
import java.awt.event.;
import java.net.;
import java.io.*;
public class Klient_beta extends JFrame{
JTextArea ta = new JTextArea();
JTextField tf = new JTextField();
JScrollPane sp=new JScrollPane(ta);
JButton polacz = new JButton("Połącz");
JPanel fp = new JPanel();
BufferedReader in;
PrintStream out;
Server_beta sb;
public Klient_beta()
{
super("Klient");
ta.setEditable(false);
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
cp.add(tf,"North");
cp.add(sp,"Center");
cp.add(fp,"South");
fp.setLayout(new FlowLayout());
fp.add(polacz);
polacz.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
String host = "localhost";
int port =777;
Socket gniazdo = new Socket(host,port);
in = new BufferedReader(new InputStreamReader(gniazdo.getInputStream()));
out = new PrintStream(gniazdo.getOutputStream());
polacz.setEnabled(false);
}
catch(IOException ex){
System.out.println(ex);
}
}});
tf.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
w3 = new Watek3(ta, tf, out, sb);
w3.start();
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,300);
setVisible(true);
}
public void odbierz_klient(){
try{
String s = in.readLine();
ta.append("Konrad: "+s+" \n");
}
catch(IOException ex){
System.out.println(ex);
}
}
public static void main(String[] a)
{
Klient_beta kb = new Klient_beta();
}
Watek3 w3 = new Watek3(ta, tf, out, sb);
}
class Watek3 extends Thread{
JTextArea pole;
JTextField wpis;
PrintStream wyjscie;
Server_beta serv;
Watek3(JTextArea p, JTextField wpi,PrintStream ps, Server_beta sss){
pole=p;
wpis=wpi;
wyjscie=ps;
serv=sss;
}
public void run(){
String cos = wpis.getText();
if(!cos.equals(""))
{
wyjscie.println(cos);
pole.append("Konrad: "+cos+" \n");
wpis.setText("");
}
serv.odbierz_server();
}
}