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