-2

ユーザーがそれに接続し、すぐに入力を送信する場合と送信しない場合があるソケットサーバーの簡単な例があります(この場合は送信しません)。Java が例外をスローしますが、その理由がわかりません。

コードは次のとおりです。

public static void main(String[] args) {
    org.apache.log4j.PropertyConfigurator.configure("conf/log4j.properties");
    log.debug("Application started");

    try {
        // Setup socket server
        int port = 9999;
        sv = new ServerSocket(port);

        // Accept incoming sockets or block
        Socket s = sv.accept();
        log.warn("Accepted new client connection!");

        InputStreamReader reader = new InputStreamReader(s.getInputStream(), "UTF-8");

        while(!reader.ready()) {}

        char[] b = null;
        reader.read(b);
        log.warn(new String(b));

    } catch (Exception e) {
        System.out.print(e.getMessage() + "\n");
        e.printStackTrace();
        System.exit(1);
    }
}

そしてスタックトレース:

DEBUG [main] (Main.java:38) - Application started
WARN [main] (Main.java:47) - Accepted new client connection!
null
java.lang.NullPointerException
    at java.io.Reader.read(Reader.java:140)
    at com.cinefyapp.Main.main(Main.java:51)

助けてくれてありがとう。

4

2 に答える 2

5

あなたは null です。データを配列char[]に読み込むことはできませんnull

char[] b = null;

于 2012-07-02T07:47:22.370 に答える
1

char 配列を初期化する

char[] b = new char[256];

read(char[] cbuf, int offset, int length)を使用します。

于 2012-07-02T08:06:47.160 に答える