socket通讯的小程序编译时总是报错non-static variable s1In cannot be referenced from a static context”
我想做一个socket通讯的小程序。server端有一个按钮两个文本框。点击按钮可把第一个文本框里的内容发送到client端。第二个文本框里实时显示client端发送过来的内容。
在编译时总是报错“non-static variable s1In cannot be referenced from a static context”。
server端代码如下:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class FrameSocketServer extends JFrame {
InputStream s1In;
DataInputStream dis;
JButton jButton1=new JButton();
ReadClientThread jTextField1=new ReadClientThread(dis);
JTextField jTextField2=new JTextField();
public FrameSocketServer() {
setTitle("YQserver");
setSize(new Dimension(500,500));
jButton1.setText("sender");
jButton1.setBounds(142,20,121,25);
jTextField1.setBounds(142,57,121,25);
jTextField2.setBounds(142,96,121,25);
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
send(e);
}
});
this.addWindowListener(new java.awt.event.WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.getContentPane().add(jButton1,null);
this.getContentPane().add(jTextField1,null);
this.getContentPane().add(jTextField2,null);
}
public static void main(String[] args) throws IOException {
FrameSocketServer frame=new FrameSocketServer();
frame.setVisible(true);
String toClient; //写到客户端的信息
boolean runable = true; //与客户端通话的状态
//创建SeverSocket的服务接口
ServerSocket serverSocket = null;
try {
//使该接口应用端口1111
serverSocket = new ServerSocket(1111);
} catch (IOException e) {
System.err.println("不能创建1111端口");
System.exit(1);
}
//创建Socket的客户接口,当有客户端的程序访问该服务接口时激活该类
Socket clientSocket = null;
try {
//通过accept()方法使服务器与客户端的Socket接口建立联系
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("访问端口失败");
System.exit(1);
}
//-----此处报错------------------------------------------------------
s1In = clientSocket.getInputStream();
dis = new DataInputStream(s1In);
//-----此处报错-------------------------------------------------------
}
void send(ActionEvent e){
}
}
class ReadClientThread extends JTextField implements Runnable {
DataInputStream dis;
String fromClient = "";
boolean runable = true;
private Thread clientThread=null;
public ReadClientThread(DataInputStream dis) {
this.dis = dis;
if (clientThread==null){
clientThread=new Thread(this,"ReadClient");
clientThread.start();
}
}
public void run() {
while(runable){
//显示客户端的信息
try{
fromClient = dis.readUTF();
if(fromClient.equals("")){
}
else
this.setText("客户端:" + fromClient);
}
catch(Exception e){runable = false;}
//当客户端输入Bye.时,服务端结束显示客户端信息与向客户端写入信息的两个循环
if(fromClient.equals("Bye.")) {
this.setText("客户端程序退出");
runable = false; //结束向客户写入信息循环
break; //结束显示客户端信息循环
}
}
}
}
请问该怎么修改
或者谁能给个用线程在文本框里显示socket接收到的信息的例子。
我试过把“InputStream s1In和DataInputStream dis”放在main函数里,程序可编译成功。可是“ReadClientThread jTextField1=new ReadClientThread(dis);
”这句该如何处理