我正在編寫一個Java GUI多人遊戲。 我有一個GUI,用戶可以輸入端口號並點擊「啓動服務器」,它將啓動遊戲服務器並調出另一個GUI框架。但是,當點擊按鈕時,我的程序會凍結。 可以用這種方式啓動服務器嗎?或者我怎麼編碼,以便服務器啓動並等待玩家連接,同時顯示另一個GUI框架(用單獨的課程編寫)?提前致謝。多人Java遊戲 - 通過GUI啓動服務器時程序凍結
// part of GUI code
start = new JButton ("Start Game Server");
start.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent event) {
DEFAULT_PORT = Integer.parseInt(port.getText());
fgServer.run();
fgServerFrame = new FishingGameServerFrame();
//frame.dispose();
}
});
-
// server code
public class FishingGameServer {
private static int DEFAULT_PORT = 0;
public void run()
{
int port = DEFAULT_PORT;
port = Integer.parseInt(FishingGameConnectServerFrame.portNumber());
System.out.println("port #: " + port);
//setup server socket
ServerSocket reception_socket = null;
try {
reception_socket = new ServerSocket (port);
System.out.println("Started server on port " + port);
}
catch (IOException e) {
//to get text in GUI frame
System.out.println("Cannot create server");
System.exit(0);
}
for (;;) {
Socket client_socket = null;
try {
client_socket = reception_socket.accept();
System.out.println("Accepting requests from:" + client_socket.getInetAddress());
}
catch (IOException i) {
System.out.println ("Problem accepting client socket");
}
new FishingGameThreadedServer(client_socket);
}
}
public static void main (String[] args) {
new FishingGameServer().run();
}
您有一個無限'for'循環創建'FishingGameThreadedServer'實例,這些實例會阻塞事件分派線程。 – kiheru 2014-09-03 07:07:18