我必须建立一个聊天程序。有服务器类、客户端类和两个线程来编写和接收消息。这两个线程应该在一个无限循环中运行,并始终检查是否有输入,然后打印该输入。
但是我的程序只能运行一轮。因此,服务器和客户端可以写一条消息,之后它停止并且不检查另一条消息。为什么线程没有被中断,却不能从头开始呢?-->请参阅下面的代码我希望你知道我的问题是什么,我很难描述。
读取新消息的线程
public class MsgWriter extends Thread {
private Socket s;
public MsgWriter(Socket s){
this.s = s;
}
public void run(){
int i = 0;
OutputStream out = null;
PrintWriter writer;
Scanner input;
while(!interrupted()){
try{
synchronized(s){
input = new Scanner (System.in);
out = s.getOutputStream();
writer = new PrintWriter(out);
String toserver = input.nextLine();
writer.write(toserver);
writer.flush();
System.out.println("me: " + toserver);
}
try {
Thread.sleep((int) (100 * Math.random()));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}catch(Exception e) {
}
}
}
}
线程检查是否有新消息并打印。
public class MsgReader extends Thread {
Socket s;
public MsgReader(Socket s){
this.s = s;
}
public void run() {
int i = 0;
while (!interrupted()) {
try{
synchronized(s){
InputStream in = s.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String s = null;
while((s=reader.readLine()) != null){
System.out.println("d");
}
}
try {
Thread.sleep((int) (100 * 1));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}catch (Exception e){
}
}
}
}
Server类启动一个新服务器并等待客户端,然后启动两个线程。与客户端类相同,它连接到服务器并启动线程。
你可能在某处抛出了一个异常。在catch块中,打印错误。
try {
} catch (Exception e) {
System.out.println("Error: " + e);
}