我正在为我的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);
}
}
});
}
当程序启动时,它不会将组件显示到框架中,因为它等待客户端连接。当客户端连接时,它会正确显示所有组件。如何在没有连接客户端的情况下显示所有组件?
感谢
答案 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
方法中访问它。