0

サーバーにデータを送信する単純な ChatClient があります。チャット クライアントがデータを送信するために、ソケットを作成し、socket.getOutputStream() に対して PrintWriter を作成し、次に writer.println("") を実行します。何らかの理由で、大きな脂肪の例外が発生します。私と同様の例外を調べたところ、多くの人が Java を更新するように言いました。しかし、私の Mac には最新バージョンがあります。それは私が Leopard を持っているからですか、それとも私のお粗末なプログラミングですか? ご覧ください。

private void setUpNetworking() {

        try {
            **sock = new Socket("127.0.0.1", 65534);**
            InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
            reader = new BufferedReader(streamReader);

            **writer = new PrintWriter(sock.getOutputStream());**
            System.out.println("made connection... everything here works");

        }
        catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("setup fail, but i didn't get this");

        }
    }

    public class SendButtonListener implements ActionListener{
        public void actionPerformed (ActionEvent ev){
            try {
                **writer.println(entertext.getText());**
                **writer.flush();**
                System.out.println("PROBLEM IS RIGHT HERE!!!");

            }
            catch (Exception ex) {
                ex.printStackTrace();
                System.out.println("i get a exception. HELP");

            }

ここに私の例外があります:

java.lang.NullPointerException
    at SimpleChatClient$SendButtonListener.actionPerformed(SimpleChatClient.java:52)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1882)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2202)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:246)
    at java.awt.Component.processMouseEvent(Component.java:5617)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3129)
    at java.awt.Component.processEvent(Component.java:5382)
    at java.awt.Container.processEvent(Container.java:2010)
    at java.awt.Component.dispatchEventImpl(Component.java:4083)
    at java.awt.Container.dispatchEventImpl(Container.java:2068)
    at java.awt.Component.dispatchEvent(Component.java:3918)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4256)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3936)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3866)
    at java.awt.Container.dispatchEventImpl(Container.java:2054)
    at java.awt.Window.dispatchEventImpl(Window.java:1801)
    at java.awt.Component.dispatchEvent(Component.java:3918)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:501)
    at java.awt.EventQueue.access$000(EventQueue.java:80)
    at java.awt.EventQueue$1.run(EventQueue.java:462)
    at java.awt.EventQueue$1.run(EventQueue.java:461)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:84)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:95)
    at java.awt.EventQueue$2.run(EventQueue.java:476)
    at java.awt.EventQueue$2.run(EventQueue.java:475)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:84)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:473)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
    **at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)**

これが何を意味するのかわかりません。助けてください。

4

3 に答える 3

1

スタック トレースとメモから、次のように聞こえます。

writer.println(entertext.getText());

あなたのactionPerformedメソッドではSendButtonListener、どちらかwriter enterTextがnullです。

どちらが null であり、どのようにしてそのようになったのかはコードからは明らかではありませんが、デバッガーまたはログを使用して把握できるはずです。

于 2011-04-17T16:01:38.713 に答える
0

これをデバッグする方法は次のとおりです。

  • println例外が発生する直前に、null である可能性のあるすべてのものを印刷するために個人を配置します。
  • または、デバッガーで実行し (たとえば、Eclipse が提供します)、その行を取得したときの変数の値を確認します。
于 2011-04-17T16:03:59.727 に答える
0

.SimpleChatClient の 52 行目を確認してください。ir.null の何かがあります。

于 2011-04-17T16:04:29.277 に答える