java - "Exception in thread "AWT-EventQueue-0 "java.lang.NullPointerException"Java 套接字编程中的错误

标签 java sockets

我正在尝试使用 GUI 制作一个基本的聊天应用程序,它在没有 GUI 的情况下几乎可以完美工作,但我想在 GUI 上构建该应用程序。 我想要做的是,当我按下按钮时发送一条我在 JTextField 上写的消息。 但是每当我尝试单击按钮通过按钮将数据发送到服务器时,应用程序都会抛出此错误。

gui.java

package program;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

public class gui
{
    Client client;
    server _server;
    JFrame pencere;
    JButton button;
    JTextArea area;
    JTextField type;
    public gui(){

        pencere = new JFrame("oxChat");
        pencere.setSize(640,480);
        pencere.setLayout(null);
        button = new JButton("gönder");
        button.addActionListener( new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                client.sendData("Hello");
            }
        });
        area = new JTextArea();
        type = new JTextField();
        pencere.add(type);
        pencere.add(area);
        pencere.add(button);
        area.setBounds(0,0,640,350);
        type.setBounds(0,370,640,25);
        button.setBounds(640/2-80/2,400,80,30);
        pencere.setVisible(true);
        pencere.setResizable(false);
        pencere.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        _server = new server();
        _server.start(4000);
        Client client = new Client("127.0.0.1",4000);
    }

    public static void main(String[] args) throws IOException {
        gui app = new gui();
    }

}

服务器.java

package program;

// A Java program for a Server
import java.net.*;
import java.io.*;

public class server
{
    private Socket socket;
    private ServerSocket server;
    // constructor with port
    public void start(int port){
        try {
            server = new ServerSocket(port);
            while(true){
                socket = server.accept();
                new Thread (new ConnectionHandler(socket)).start();
            }
        }catch(IOException i){

        }
    }
}

class ConnectionHandler extends Thread{
    private Socket       socket = null;
    private DataInputStream in   = null;
    private DataOutputStream out     = null;
    public ConnectionHandler(Socket socket){
        this.socket=socket;
    }
    @Override
    public void run() {
        try
        {
            System.out.println("Waiting for a client ...");
            System.out.println("Client accepted");
            in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
            out = new DataOutputStream(socket.getOutputStream());

            String line = "";

            // reads message from client until "Over" is sent
            while (!line.equals("Over"))
            {
                try
                {
                    line = in.readUTF();
                    System.out.println(line);
                }
                catch(IOException i)
                {
                    System.out.println(i);
                }
            }
            System.out.println("Closing connection");

            // close connection
            socket.close();
            in.close();
        }
        catch(IOException i)
        {
            System.out.println(i);
        }
    }
}

客户端.java

package program;

import java.net.*;
import java.io.*;
import java.util.Scanner;

public class Client
{
    // initialize socket and input output streams
    private Socket socket        = null;
    private DataInputStream input = null;
    private DataOutputStream out     = null;

    // constructor to put ip address and port
    public Client(String address, int port)
    {
        // establish a connection
        try
        {
            socket = new Socket(address, port);
            System.out.println("Connected");

            // takes input from terminal
            input = new DataInputStream(socket.getInputStream());

            // sends output to the socket
            out = new DataOutputStream(socket.getOutputStream());
        }
        catch(UnknownHostException u)
        {
            System.out.println(u);
        }
        catch(IOException i)
        {
            System.out.println(i);
        }

    }

   void sendData(String data){
        try{
            out.writeUTF(data);
        }catch(IOException i)
        {
        }
   }
}

完整错误代码

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at program.gui$1.actionPerformed(gui.java:27) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967) at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308) at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405) at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262) at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6636) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342) at java.desktop/java.awt.Component.processEvent(Component.java:6401) at java.desktop/java.awt.Container.processEvent(Container.java:2263) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5012) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2762) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743) at java.base/java.security.AccessController.doPrivileged(AccessController.java:391) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

最佳答案

客户端

 Client client = new Client("127.0.0.1",4000);

正在用相同的名称隐藏该字段。

更改为

client = new Client("127.0.0.1",4000);

关于java - "Exception in thread "AWT-EventQueue-0 "java.lang.NullPointerException"Java 套接字编程中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58600786/

相关文章:

java - TestNg xml 显示没有错误 - 但在运行时它给出了运行总测试数 : 0

java - 类路径在 linux 下不起作用

Java服务器安卓客户端

c++ - select 不等待 C++ 套接字中的超时值

c# - 如何通过套接字发送多条消息

c# - 从 Java 到 C++ 或 C#

java - GEF 和 GMF 之间的关系?

.net - NetMQ 代理与 XSub/Xpub 模式中的控制套接字使用示例?

sockets - 是否可以将文件用作两个远程进程之间的双向通信 channel (类似于 "sockets over files")?

linux - 使用 ZeroMQ 流连接到设备失败,但 Linux 套接字工作