Java 使用ServerSocket的SWING应用程序

Java 使用ServerSocket的SWING应用程序,java,swing,sockets,Java,Swing,Sockets,我试图构建一个swing框架,该框架被调用并使用socket运行服务器。我试图使服务器在单独的线程上运行,如图所示 Interface.java public class Interface implements ActionListener{ User user; JFrame frame; JScrollPane scroll; JTextArea text; JButton b1,b2,b3,b4; ServerSocket ss; Socket socket; int port;

我试图构建一个swing框架,该框架被调用并使用socket运行服务器。我试图使服务器在单独的线程上运行,如图所示

Interface.java

public class Interface implements ActionListener{

User user;

JFrame frame;
JScrollPane scroll;
JTextArea text;
JButton b1,b2,b3,b4;

ServerSocket ss;
Socket socket;
int port;
ObjectInputStream in;
ObjectOutputStream out;
Packet packet;

public Interface(User u) 
{       
    user=u;

    port = DataBase1.getPortNumberOfUser(user.getUserName());

    frame=new JFrame(user.getUserName()+" - "+user.getEmail());

    text=new JTextArea("                        Welcome "+user.getName());

    scroll = new JScrollPane(text);

    b1=new JButton("UpLoad");
    b2=new JButton("GenerateKey");
    b3=new JButton("ShareKey");
    b4=new JButton("Exit");

    frame.setSize(500,400);
    frame.setLayout(null);
    frame.setVisible(true);

    text.setBounds(5,5,250,350);

    scroll.setBounds(5,5,250,350);
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

    b1.setBounds(275,50,200,50);
    b1.setActionCommand("upload");
    b1.addActionListener(this);

    b2.setBounds(275,125,200,50);
    b2.setActionCommand("generateKey");
    b2.addActionListener(this);

    b3.setBounds(275,200,200,50);

    b4.setBounds(275,275,200,50);
    b4.setActionCommand("exit");
    b4.addActionListener(this);


    frame.add(scroll);
    frame.add(b1);
    frame.add(b2);
    frame.add(b3);
    frame.add(b4);

    try {

        ss= new ServerSocket(port);
        System.out.println("Socket Created !");
        while(true)
        {
            System.out.println("Waiting for Multi client ..");
            socket = ss.accept();
            System.out.println("here");
            new MultiClientServerThread(socket,text).start();
        }


    } catch(Exception e) {
        e.printStackTrace();
    }
    finally {
        try {
            ss.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

}
多客户端服务器线程.java

public class MultiClientServerThread extends Thread {

protected Socket socket;
private ObjectInputStream in;
private ObjectOutputStream out;
private Packet packet;
private JTextArea display;

public MultiClientServerThread(Socket socket ,JTextArea display) {
    in=null;
    out=null;
    packet=null;
    this.socket=socket;
    this.display=display;
}

public void logIn()
{
    display.append("\n\n"+packet.getType()+"  :  "+packet.getContents());
}

public void signUp()
{
    display.append("\n\n"+packet.getType()+"  :  "+packet.getContents());
}

public void run() {
    try {

        out = new ObjectOutputStream(socket.getOutputStream());
        in = new ObjectInputStream(socket.getInputStream());

        packet = (Packet)in.readObject();
        System.out.println("\n\nType :  "+ packet.getType()+"\nKey : "+packet.getKey()+"\nContents : "+packet.getContents());
        if((packet.getType()).equals("LOGIN"))
            logIn();
        else if((packet.getType()).equals("SIGNUP"))
            signUp();
        out.writeObject("Received Your message client");        

    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        try {
            in.close();
            out.close();
            socket.close();
            return;
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
}

但是swing GUI没有加载,也就是说,我无法查看框架的内容。请任何人提供帮助,提前感谢…

while(true)条件将在某个时候使您内存不足。
移除它,当所有变量都正确初始化时,应该呈现您的帧。(您可以在单独的线程中进行服务器轮询)

while(true)条件将在某个时候使您内存不足。

移除它,当所有变量都正确初始化时,应该呈现您的帧。(您可以在单独的线程中进行服务器轮询)

我确实知道,虽然接口类中的循环看起来可疑,但在您完成UI更新之前,您也在使框架可见,而且空布局对您没有好处。我不知道,虽然接口类中的循环看起来可疑,但在完成UI更新之前,您也在使框架可见,同时null布局也没有给您带来任何好处