0

サンプル.java

class Sample
{
    private BufferedOutputStream output;

    public handleRequest(Socket socket)
    {
        this.output = new BufferedOutputStream(socket.getOutputStream(), BUFFSIZE);
        sendString("sometext");//This is working fine
    }

    public void sendString(String str) throws IOException
    {
        ByteArrayOutputStream bytestream;
        bytestream = new ByteArrayOutputStream(str.length());

        DataOutputStream out;
        out = new DataOutputStream(bytestream);

        for (int i = 0; i < str.length(); i++)
            out.write((byte) str.charAt(i));

        output.write(bytestream.toByteArray(), 0, bytestream.size());
        output.flush();
    }
}

AnotherClass.java

class AnotherClass
{
    public send()
    {
        Sample smp = new Sample();
        smp.sendString("somestring");//This is not working
    }
}

AnotherClass.javaでsendstringメソッドを呼び出すたびに、NullPointerExcetpiton.Iamがわかりません.誰か助けてください..よろしくお願いします....

4

2 に答える 2

2

初期化してないから

private BufferedOutputStream output;

だからあなたが呼び出すとき

smp.sendString("somestring");//This is not working

output無効です。public handleRequest(Socket socket){最初に出力 stremを初期化するメソッドを実行する必要があります

編集

メソッドをリファクタリングして、初期化を別のメソッドに抽出できます...しかし、これがあなたが探しているものかどうかはわかりません..

public OutputStream initializeOutputStream(Socket socket, int size) {
     return new BufferedOutputStream(socket.getOutputStream(), size)
}

public handleRequest(Socket socket)
{
    this.output = initializeOutputStream(socket, BUFFSIZE);
    sendString("sometext");//This is working fine
}

そして、代わりにclass AnotherClass使用するpublic OutputStream initializeOutputStream(Socket socket, int size)だけでpublic handleRequest(Socket socket)

于 2012-11-27T13:40:05.763 に答える
1

smp.sendString("something")コンストラクターの直後に呼び出すとSample smp=new Sample();、次の行に NPE があります

output.write(bytestream.toByteArray(), 0, bytestream.size());

BufferedOutputStream outputは初期化されていないため、ですnull

于 2012-11-27T13:39:11.613 に答える