java吧 关注:1,247,614贴子:12,728,339
  • 5回复贴,共1

读过HeadFirstJava的大神进来看看

只看楼主收藏回复

线程一章有个聊天程序,我运行之后客户端没将服务器的内容显示在JTextArea中,求解答
客户端程序
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class SimpleChatClientA {
JTextArea incoming;
JTextField outgoing;
BufferedReader reader;
PrintWriter writer;
Socket sock;
public void go(){
JFrame frame = new JFrame("Ludicrously Simple Chat Client");
JPanel mainPanel = new JPanel();
incoming = new JTextArea(15,50);
incoming.setLineWrap(true);
incoming.setWrapStyleWord(true);
incoming.setEditable(false);
JScrollPane qScroller = new JScrollPane(incoming);
qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
outgoing = new JTextField(20);
JButton sendButton = new JButton("send");
sendButton.addActionListener(new SendButtonListener());
mainPanel.add(qScroller);
mainPanel.add(outgoing);
mainPanel.add(sendButton);
Thread readerThread = new Thread(new IncomingReader());
readerThread.start();
frame.getContentPane().add(BorderLayout.CENTER, mainPanel);
setUpNetworking();
frame.setSize(400,500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void setUpNetworking(){
try{
sock = new Socket("127.0.0.1",5000);
InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(streamReader);
writer = new PrintWriter(sock.getOutputStream());
System.out.println("networking established");
}catch(IOException ex){
ex.printStackTrace();
}
}
public class SendButtonListener implements ActionListener{
public void actionPerformed(ActionEvent ev){
try{
writer.println(outgoing.getText());
writer.flush();
}catch(Exception ex){
ex.printStackTrace();
}
outgoing.setText("");
outgoing.requestFocus();
}
}
public class IncomingReader implements Runnable{
public void run(){
String message;
try{
while((message = reader.readLine())!=null){
System.out.println("read "+message);
incoming.append(message+"\n");
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public static void main(String[] args){
new SimpleChatClientA().go();
}
}
服务器程序
import java.io.*;
import java.net.*;
import java.util.*;
public class VerySimpleChatServer {
ArrayList clientOutputStreams;
public class ClientHandler implements Runnable{
BufferedReader reader;
Socket sock;
public ClientHandler(Socket clientSocket){
try{
sock = clientSocket;
InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(isReader);
}catch(Exception ex){
ex.printStackTrace();
}
}
public void run(){
String message;
try{
while((message = reader.readLine())!=null){
System.out.println("read $"+message);
tellEveryone(message);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public static void main(String[] args){
new VerySimpleChatServer().go();
}
public void go(){
clientOutputStreams = new ArrayList();
try{
ServerSocket serverSock = new ServerSocket(5000);
while(true){
Socket clientSocket = serverSock.accept();
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
clientOutputStreams.add(writer);
Thread t = new Thread(new ClientHandler(clientSocket));
t.start();
System.out.println("got a connection");
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public void tellEveryone(String message){
Iterator it = clientOutputStreams.iterator();
while(it.hasNext()){
try{
PrintWriter writer = (PrintWriter) it.next();
writer.println(message);
writer.flush();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}


1楼2018-08-20 09:35回复
    把客户端的JFrame拉大点试试


    IP属地:北京来自手机贴吧2楼2018-10-10 00:18
    回复
      你好,你解决这问题了吗,我也是一样显示不出来


      3楼2019-12-06 00:38
      回复
        println


        4楼2020-02-15 17:21
        回复
          注意调用printwriter的println方法而不是print方法


          5楼2020-02-15 18:03
          回复
            setNetupworking() 这句 要放在Thread readerThread = new Thread(new IncomingReader()); 上面。reader 是空的


            IP属地:广东6楼2020-03-06 18:00
            回复