Java 套接字在.jar中赢得';无法连接到服务器套接字

Java 套接字在.jar中赢得';无法连接到服务器套接字,java,sockets,jar,serversocket,Java,Sockets,Jar,Serversocket,我编写了一个简单的即时通讯程序,它在eclipse中运行得非常好。我想将它导出到一个.jar中,并在多台计算机上运行它,而我的主计算机托管了JavaSocketServer。当在.jar中运行服务器但从eclipse执行客户机时,该程序工作。但是当我运行client.jar时,它不会连接到服务器。我的代码的两部分都很长。我正在使用实际的IPv4地址使用套接字(IP地址,端口#)进行操作。我也在操作端口号9000,我不确定这是否有任何影响。我一直在搜索这个网站和其他很多网站,但我似乎找不到一个关于

我编写了一个简单的即时通讯程序,它在eclipse中运行得非常好。我想将它导出到一个.jar中,并在多台计算机上运行它,而我的主计算机托管了JavaSocketServer。当在.jar中运行服务器但从eclipse执行客户机时,该程序工作。但是当我运行client.jar时,它不会连接到服务器。我的代码的两部分都很长。我正在使用实际的IPv4地址使用套接字(IP地址,端口#)进行操作。我也在操作端口号9000,我不确定这是否有任何影响。我一直在搜索这个网站和其他很多网站,但我似乎找不到一个关于这个主题的开放话题。我可能会补充说,我正在手动将IPv4地址输入GUI,因为我一直在台式机和笔记本电脑之间切换。我的笔记本电脑IPv4总是变化,这就是我手动输入它的原因

java中的代码

serverUser = new ServerSocket(9000);
textArea.append("User Server created on " + new Date() + "\n");
serverChat = new ServerSocket(9100);
textArea.append("Chat Server created on " + new Date() + "\n");

while(true)
{
    Socket socket = serverUser.accept();
    clientNum++;
    new DataOutputStream(socket.getOutputStream()).writeUTF("You have connected to the server");
    User user = new User(socket, new DataInputStream(socket.getInputStream()).readUTF());
    userList.add(user);
client.java中的套接字

public void actionPerformed(ActionEvent e) 
{
    boolean next = false;
    userName = userNameField.getText();
    password = new String(passwordField.getPassword());
    ipAddress = ipAddressField.getText();
    if(ipAddress.equals(""))
        status.setText("You must enter the IP Address of the Server");
    else
    {
        userNameField.setText("");
        ipAddressField.setText("");
        passwordField.setText("");
        query = "select * from User where userName = '" + userName + "' and password = '" + password + "'";
        try
        {
            line 328 ResultSet rs = statement.executeQuery(query);
            if(rs.next())
            next = true;    
            rs = statement.executeQuery("select * from User");
        }
        catch(SQLException ex)
        {
            System.out.println(ex.getMessage());
        }
        if(next)
        {
            tabbedPane.setEnabledAt(0, false);
            tabbedPane.setEnabledAt(1, true);
            tabbedPane.setSelectedIndex(1);
            logout.setEnabled(true);
            try
            {
                socket = new Socket(ipAddress, 9000);
                output = new DataOutputStream(socket.getOutputStream());
                input = new DataInputStream(socket.getInputStream());
                socket.setKeepAlive(true);
                socket.setTcpNoDelay(true);
                output.writeUTF(userName);
                output.flush();
                status.setText(input.readUTF());
                setTitle(userName);
                Thread thread = new Thread(new UpdateTask(userList));
                thread.start();
            }
            catch(IOException ex)
            {
                System.out.println(ex.getMessage());
            }
        }
        else
            status.setText("Invalid user name or password");
        }
    }
好吧,我搞错了,当然我把问题搞错了。这个问题最终像往常一样成为一个令人讨厌的空指针,我也不知道我是如何得到它的。 这是错误

C:\Users\Satokaheni\Programs\Java Workspace\Runnable Jars>java -jar Client.jar
Works
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at UserMenu$6.actionPerformed(UserMenu.java:328)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
伙计,我觉得自己真的很蠢,很抱歉我把问题搞错了,但你能帮我解决这个问题吗? 我知道查询不是空的,因为我已经打印出来了。所以我不知道为什么它会给我一个空指针

我找到了为什么我认为我得到了空指针

path to 'db/loginDB.db': 'C:\Users\Satokaheni\Programs\Java Workspace\Runnable Jars\db' does not exist
这是我的数据库代码

Class.forName("org.sqlite.JDBC");
try
{
    connection = DriverManager.getConnection("jdbc:sqlite:db/loginDB.db");
    statement = connection.createStatement();
}
catch(SQLException ex)
{
    System.out.println(ex.getMessage());
}
任何提示都将不胜感激

多谢各位


PS如果你愿意,我可以发布代码

请共享代码,至少是处理套接字的部分。如果可能产生任何错误,请检查是否可以使用telnet连接到服务器?该命令将是不带引号的“telnet”。另外,您是否收到任何错误?您的db查询是否正常工作?我看到一个空的catch块。
java.lang.NullPointerException位于UserMenu$6.actionPerformed(UserMenu.java:328)
。请在
actionperformed()
代码中标记行号328。