日期:2014-05-20  浏览次数:20821 次

很奇怪的一个问题!!!
部分代码如下:
Java code

System.out.println(1);
listener=new portListener(2000);
System.out.println(2);


结果,打出了1,却没有打出2,也没有报错,求解啊!!

全部代码如下:
Java code

package com.qqserver;

/**
 * 
 *     服务器端:
 *     1,创建界面
 *  2,服务器监听: 监听类
 *    3,完成连接测试
 *    4,实现"发送"按钮的监听
 *  5,初步接受客户端信息
 *  6,初步向客户端发送消息
 */
import java.awt.*;
import javax.swing.*;

import com.qquser.QQClient;

import java.awt.event.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;

public class QQserver extends JFrame implements ActionListener{

    // 定义界面元素:一个按钮、一个输入文本框、一个显示文本框、一个滚轴、一个Jpanel
    JButton button=null;
    static JTextField textField=null;
    static JTextArea textArea=null;
    JScrollPane scrollPane=null;
    JPanel jPanel=null;
    
    // 定义监听端口对象
    PortListener listener=null;
    
    public static void main(String[] args) {
        
        // 建立窗体对象
        QQserver server=new QQserver(2000);

    }
    
    // 构造函数:初始化界面
    public QQserver(int port){
        
        // 初始化界面元素
        button=new JButton("发送");
        textArea=new JTextArea(13,10);
        textField=new JTextField(12);
        scrollPane=new JScrollPane(textArea);
        jPanel=new JPanel();
        
        // 组合添加到Jframe里的界面元素
        //scrollBar.add(textArea);
        jPanel.add(textField);
        jPanel.add(button);
        
        // 监听button
        button.addActionListener(this);
        
        // 添加组合元素到Jframe
        this.add(scrollPane,BorderLayout.NORTH);
        this.add(jPanel,BorderLayout.SOUTH);
        
        // 设置窗体属性
        this.setSize(400, 300);
        this.setTitle("服务器端");
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        System.out.println(1);
        listener=new PortListener(port);
        System.out.println(2);
    }
    
    // 事件监听
    public void actionPerformed(ActionEvent event) {
        
        if (event.getSource()==button) {
            
            // 当点击"发送"按钮,执行发送消息功能
            String news=" ";
            news=textField.getText();        // 获取输入框的值
            this.listener.WriterNews(news);
            
            // 测试
            System.out.println("服务器恢复成功");
        }
        
                
    }

}

// 监听类:监听知道端口
class PortListener{
    
    // 定义监听元素
    ServerSocket serverSocket=null;
    Socket socket=null;
    
    // 输入输出流:接受和发送信息
    InputStreamReader reader=null;
    BufferedReader bufferedReader=null;
    PrintWriter writer=null;
    
    // 构造函数:初始化端口监听
    public PortListener(int port){
        
        try {
            
            // 监听2000端口
            this.serverSocket=new ServerSocket(port);
            
            // 等待客户端连接:返回 套接字
            this.socket=this.serverSocket.accept();
            
            // 循环读取客户端的消息
            while(true){
                
                QQserver.textArea.append("客户端:\r\n"+this.ReaderNews()+"\r\n");
                
            }
            
            
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    }
    
    // 读取消息
    public String ReaderNews(){
        
        // 返回的消息
        String news=null;
        
        try {
            // 开始读取数据
            reader=new InputStreamReader(this.socket.getInputStream());
            bufferedReader=new BufferedReader(reader);
            news=bufferedReader.readLine();                // 目前,只能读取一行信息
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        // 返回读取到的信息
        return news;
    }
    
    // 写消息
    public void WriterNews(String news){
        
        try {
            // 开始读取信息:此处一定要时时刷新,即:参数设置为true
            writer=new PrintWriter(this.socket.getOutputStream(),true);
            writer.println(news);
            QQserver.textField.setText("");
            

            // 给自己打印消息
            QQserver.textArea.append("客户端:\r\n"+news+"\r\n");
            
            // 发送信息后,清空输入框
            QQserver.textField.setText("");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}