请老手帮忙解答,自己实在找不出问题,这个架构是书上的,我用自己的写做方式写出来也是不能访问,是不是逻辑上有问题,请明示,谢谢
代码片段如下/*
 * Created on 2005-7-1
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package a.a.a;//import
import java.awt.*;
import java.awt.Event;
import java.awt.event.*;
import java.awt.color.*;
import java.awt.Color;
import java.applet.*;
import java.net.*;import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JApplet;import java.io.*;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.io.BufferedReader;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.util.StringTokenizer;
/**
 * @author Administrator
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class chatServer extends JFrame{
/**
 * @see constructor
 * */
public chatServer(){
//init port
int serverInPort = 6001;
int serverOutPort = 6002;
ServerSocket serverInSocket;
ServerSocket serverOutSocket;
MainThread mainThread;


// create panel
Container cp = getContentPane();
cp.setLayout(new FlowLayout(FlowLayout.LEFT));
setSize(400,350);
setResizable(false);
setTitle("Chat Server");
cp.setLocation(100,30);
JTextArea serverInfo = new JTextArea(15,35);
serverInfo.setBackground(Color.black);
serverInfo.setForeground(Color.white);
JButton closeWindow = new JButton("Close Server");
closeWindow.addActionListener(new closeButtonListener());
cp.add(new JScrollPane(serverInfo));
cp.add(closeWindow);
show();
try{
serverInSocket = new ServerSocket(serverInPort);
serverOutSocket = new ServerSocket(serverOutPort);
}catch(IOException e){
System.out.println("Create ServerSocket Fail!");
System.exit(1);
}
} /**
 * @see action listener close button
 * */
class closeButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
System.exit(0);
}
}
/**
 * @see main thread
 * */
class MainThread extends Thread{
public void run(){
while(true){
try{
synchronized(this){
Socket clientInSocket = serverInSocket.accept();
Socket clientOutSocket = serverOutSocket.accept();
ChildThread childThread = new ChildThread(clientInSocket,clientOutSocket);
childThread.start();
}
}catch(IOException e){
System.out.println("Client Connect Fail");
System.exit(0);
}
}
}
}
/**
 * @see chile thread
 * */
class ChildThread extends Thread{
Socket clientInSocket;
Socket clientOutSocket;
PrintStream serverWriter;
BufferedReader serverReader;
String receiveMsg;
StringTokenizer st;
String serverIp;
ChildThread(Socket clientInSocket,Socket clientOutSocket){
this.clientInSocket = clientInSocket;
this.clientOutSocket = clientOutSocket;
try{
//send message to client
serverWriter = new PrintStream(clientOutSocket.getOutputStream());
// synchronization
//synchronized(this){}
}catch(IOException e){
System.out.println("Thread Create Fail");
System.exit(0);
}
}
}
/**
 * @see log
 * */
public void logWrite(String s){
serverInfo.setText(s + "/n");  
//问题出在上面和下边几个代码段里,我想使用 serverInfo的setText的属性,但是访问不了,请问是什么原因???
}
/**
 * @see set null
 * */
public void finalize(){

}
/**
 * main function
 * */
public static void main(String[] args) {
chatServer newServer = new chatServer();
}}

解决方案 »

  1.   

    /*
     * Created on 2005-7-1
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    //import
    import java.awt.*;
    import java.awt.Event;
    import java.awt.event.*;
    import java.awt.color.*;
    import java.awt.Color;
    import java.applet.*;
    import java.net.*;import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.JApplet;import java.io.*;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    import java.io.Reader;
    import java.io.Writer;
    import java.io.BufferedReader;
    import java.io.BufferedOutputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.util.StringTokenizer;
    /**
     * @author Administrator
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class chatServer extends JFrame{
    /**
     * @see constructor
     * */
     ServerSocket serverInSocket;
     ServerSocket serverOutSocket;
     JTextArea serverInfo = new JTextArea(15,35); public chatServer(){
    //init port
    int serverInPort = 6001;
    int serverOutPort = 6002;
    //ServerSocket serverInSocket;
    //ServerSocket serverOutSocket;
    MainThread mainThread;


    // create panel
    Container cp = getContentPane();
    cp.setLayout(new FlowLayout(FlowLayout.LEFT));
    setSize(400,350);
    setResizable(false);
    setTitle("Chat Server");
    cp.setLocation(100,30);
    //JTextArea serverInfo = new JTextArea(15,35);
    serverInfo.setBackground(Color.black);
    serverInfo.setForeground(Color.white);
    JButton closeWindow = new JButton("Close Server");
    closeWindow.addActionListener(new closeButtonListener());
    cp.add(new JScrollPane(serverInfo));
    cp.add(closeWindow);
    show();
    try{
    serverInSocket = new ServerSocket(serverInPort);
    serverOutSocket = new ServerSocket(serverOutPort);
    }catch(IOException e){
    System.out.println("Create ServerSocket Fail!");
    System.exit(1);
    }
    } /**
     * @see action listener close button
     * */
    class closeButtonListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
    System.exit(0);
    }
    }
    /**
     * @see main thread
     * */
    class MainThread extends Thread{
    public void run(){
    while(true){
    try{
    synchronized(this){
    Socket clientInSocket = serverInSocket.accept();
    Socket clientOutSocket = serverOutSocket.accept();
    ChildThread childThread = new ChildThread(clientInSocket,clientOutSocket);
    childThread.start();
    }
    }catch(IOException e){
    System.out.println("Client Connect Fail");
    System.exit(0);
    }
    }
    }
    }
    /**
     * @see chile thread
     * */
    class ChildThread extends Thread{
    Socket clientInSocket;
    Socket clientOutSocket;
    PrintStream serverWriter;
    BufferedReader serverReader;
    String receiveMsg;
    StringTokenizer st;
    String serverIp;
    ChildThread(Socket clientInSocket,Socket clientOutSocket){
    this.clientInSocket = clientInSocket;
    this.clientOutSocket = clientOutSocket;
    try{
    //send message to client
    serverWriter = new PrintStream(clientOutSocket.getOutputStream());
    // synchronization
    //synchronized(this){}
    }catch(IOException e){
    System.out.println("Thread Create Fail");
    System.exit(0);
    }
    }
    }
    /**
     * @see log
     * */
    public void logWrite(String s){
    serverInfo.setText(s + "/n");  
            //问题出在上面和下边几个代码段里,我想使用 serverInfo的setText的属性,但是访问不了,请问是什么原因???
    }
    /**
     * @see set null
     * */
    public void finalize(){

    }
    /**
     * main function
     * */
    public static void main(String[] args) {
    chatServer newServer = new chatServer();
    }}
    因为你定义的那个东东在构造函数中,所以不能调用.只要将变量定义在类中成全局变量就可以的.
    我修改后的代码现在好使了.