Witam moim problemem jest wysylanie wiadomosci na serwer uzywajac przy tym klasy podanej ponizej.
Wysylanie wiadomosci polega ( mowie tu o czesci kodu ktorego nie dolaczylem ) na ustawieniu
przy pomocy funkcji setAction(int a) zmiennej action na wartosc 1 oraz ustawieniu wiadomosci do wyslania za pomoca setMessage(String m). Utworzony watek SendingThread sprawdza czy zmienna action jest ustawiona na wartosc 1 i jesli tak jest to wysyla wiadomosc. Zauwazylem tutaj ze warunek jest sprawdzany ( i tym samym wiadomosc zostaje wyslana ) tylko wtedy gdy przed petla while(isConnected()) obiektu SendingThread dopisze jakas instrukcje np System.out.println("Jakis tekst"); . Prosze o wyrozumialosc jesli rozwiazanie jest oczywiste ( dopiero zaczynam przygode z jezykiem Java ) ;-)
public class ClientHandler
{
private Socket socket;
private InputStream inStream;
private OutputStream outStream;
private PrintWriter writer;
private BufferedReader reader;
private boolean connectionStatus;
private User client;
private int action;
private String message;
ClientHandler(String name)
{
try
{
/* Creating new User */
client = new User(name);
/* Connecting to the server */
socket = new Socket("localhost",2004);
/* Creating in/out streams */
inStream = socket.getInputStream();
outStream = socket.getOutputStream();
/* Creating objects for sending and receiving data */
writer = new PrintWriter(outStream);
reader = new BufferedReader(new InputStreamReader(inStream));
connectionStatus = true;
action = 0;
/* Creating sendingThread responsible for sending messages to other users */
SendingThread sendingThread = new SendingThread();
Thread t = new Thread(sendingThread);
t.start();
/* Creating receivingThread responsible for receiving messages from other users */
ReceivingThread receivingThread = new ReceivingThread();
Thread r = new Thread(receivingThread);
r.start();
}
catch(UnknownHostException e)
{
System.out.println("ERROR : "+e.getLocalizedMessage());
}
catch(IOException e)
{
System.out.println("ERROR : "+e.getLocalizedMessage());
}
}
public void setStatus(boolean s)
{
connectionStatus = s;
}
public boolean isConnected()
{
return connectionStatus;
}
public void setMessage(String m)
{
System.out.println("Message : "+m);
message = m;
}
public void setAction(int a)
{
System.out.println("There is one message to send");
action = a;
}
private class SendingThread implements Runnable
{
SendingThread()
{
}
public void sendMessage()
{
writer.println("<"+client.getName()+">"+" "+message+"\n");
writer.flush();
message = "";
}
public void run()
{
while(isConnected())
{
if(action == 1)
{
sendMessage();
setAction(0);
}
}
}
}
private class ReceivingThread implements Runnable
{
ReceivingThread()
{
}
public void run()
{
while(isConnected())
{
}
}
}
private class User
{
String name;
User(String n)
{
name = n;
}
public String getName()
{
return name;
}
public void changeName(String n)
{
name = n;
}
}
}
Powyzszy post byl moj ( mozna sie domyslic po nicku ). Chcialem jeszcze dodac iz kwestia uzycia tu klasy PrintWriter napewno nie jest powodem problemu ( wiem ze nie powinno jej sie uzywac w takich aplikacjach aczkolwiek dpiero to zmienie ) gdyz uzywanie funkcji sendMessage() bez sprawdzania warunku dzial :)