java服务器使用jframe

时间:2014-06-11 09:10:04

标签: java jframe

我正在为我的java服务器程序制作GUI但是当我启动它时,程序显示白色JFrame并且不会将组件加载到帧中。 这里有代码:

public ServerFrame() throws SQLException, ClassNotFoundException, IOException {
    initComponents();

    server = new ServerSocket(4444);
    textList.setText("Waiting for client to connect...");

    SimpleDataSource.init("database.properties");
    net = new Network();

}

public static void main(String args[]) {

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable(){
            @Override
            public void run(){

                ServerFrame sf;
                try{
                    sf = new ServerFrame();
                    sf.setVisible(true);

                    s = server.accept();
                    InetAddress clientAddress = s.getInetAddress();
                    textList.setText("Incoming connection from: " + clientAddress.getHostName() + "[" + clientAddress.getHostAddress() + "]\n");

                    ServiceClass service = new ServiceClass(s,net);
                    Thread t = new Thread(service);
                    t.start();

                }catch (SQLException | ClassNotFoundException | IOException ex){
                    Logger.getLogger(ServerFrame.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
    }

当程序启动时,它不会将组件显示到框架中,因为它等待客户端连接。当客户端连接时,它会正确显示所有组件。如何在没有连接客户端的情况下显示所有组件?

感谢

1 个答案:

答案 0 :(得分:1)

我不知道这些行究竟是做什么的,所以下面发生的也可能适用于它们。

SimpleDataSource.init("database.properties");
net = new Network();

主要问题很可能是这一行:server = new ServerSocket(4444);在客户端连接之前挂起所有内容,这使得应用程序的主线程继续执行,从而显示所有内容。

要解决此问题,请在单独的线程上启动服务器。

像这样:

new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                server = new ServerSocket(4444);
            }
        }).start();

您需要声明您的服务器是最终的,以便可以从run方法中访问它。