1

私のチャットルームプログラム。クライアント用とサーバー用の2つのパッケージがあります。サーバープログラムを実行し、PortFieldに入力して、[サーバーの開始]ボタンをクリックします。ウィンドウプログラムがスタックし、何もできませんが、サーバーは引き続き機能し、クライアントは接続してチャットします。

private void btnOpenActionPerformed(java.awt.event.ActionEvent evt) {                                        

    int port = Integer.parseInt(txtPort.getText());
    go(port);
}                                       
private void go(int port){
    try {
        listUser = new Hashtable<String, ClientConnect>();
        server = new ServerSocket(port);
        txaStatus.append("Server is started\n");
        txaStatus.append("IP Server : "+InetAddress.getLocalHost().getHostAddress()+"\n");
        txaStatus.append("Port : " + port + "\n");
        while(true){
            client = server.accept();
            new ClientConnect(this,client);//class ClientConnect for DataOutPut & DataInput Client <=> Server
        }
    } catch (IOException e) {
        txaStatus.append("Server cannot start\n");
                    JOptionPane.showMessageDialog(this,"Port busy","warning",JOptionPane.WARNING_MESSAGE);
                    System.exit(0);
    }
}
4

2 に答える 2

3

サーバーを GUI スレッドで実行することはできません。これにより、プログラムは他の入力を受け入れることができなくなります。go()メソッドを別のスレッドに移動する必要があります。

于 2012-09-13T15:17:18.267 に答える
0

この割り当ての性質を考えると、マルチスレッドについては既に紹介されていると想定しても問題ないと思います。これは、そのいくつかを試す良い機会のように思えます。

于 2012-09-13T15:18:14.603 に答える