0

マルチプレイヤー Java ゲームをプログラミングしているだけで、サーバーを作成しようとしました。しかし、私がそれを開始するたびに、それは単に機能せず、Eclipseはエラーメッセージさえ出さない. エラーは次の行にあるに違いないことがわかりました: Socket sock = serverSock.accept(); 誰でも間違いを見ることができますか?

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JPanel;


public class Frame {

JFrame frame;
JPanel panel;
JButton start;
JLabel status;



public Frame() {

    frame = new JFrame("Server");
    panel = new JPanel();
    start = new JButton("Start");
    status = new JLabel("Server is not running.");

    start.addActionListener(new ActionListener () {
        public void actionPerformed(ActionEvent e) {



        try {

            ServerSocket serverSock = new ServerSocket(5000);
            Socket sock = serverSock.accept();
            InputStreamReader isReader = new    InputStreamReader(sock.getInputStream());
            BufferedReader reader = new BufferedReader(isReader);

        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        status.setText("Server is running.");
        status.setForeground(Color.green);
        start.setText("Stop");




    }});

    status.setForeground(Color.RED);
    frame.setVisible(true);
    frame.setSize(150,100);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);

    frame.add(panel);
    panel.add(start);
    panel.add(status);

}

}

ありがとうレナート

4

1 に答える 1

1

ここでのエラーの原因の 1 つは、EDT. Swing はシングルスレッドであるため、 などの処理負荷の高い呼び出しやブロック呼び出しはUIServerSocket#accept()フリーズさせます。ここでは、代わりにSwingWorkerを使用できます。

また、 を実装する場合は、 を使用してクライアントからデータを読み取るSwingWorker必要があります。現在、クライアント データは表示されていません。BufferedReader

于 2013-03-18T20:02:03.930 に答える