簡単なインスタント メッセンジャー プログラムを作成しましたが、Eclipse では問題なく動作しました。メインコンピューターがJava socketServerをホストしている間に、それを.jarにエクスポートして複数のコンピューターで実行したかったのです。このプログラムは、.jar でサーバーを実行しているが、Eclipse からクライアントを実行している場合に機能します。しかし、client.jar を実行すると、サーバーに接続されません。私のコードの両方の部分は非常に長いです。実際のIPv4アドレスを使用してソケット(ipaddress、port#)を使用して操作しています。ポート番号 9000 でも動作していますが、それが影響するかどうかはわかりません。私はこのサイトや他の多くのサイトを検索してきましたが、この件に関してすでに開かれているトピックを見つけることができないようです. デスクトップとラップトップを切り替えていたので、IPv4 アドレスを手動で GUI に入力していることを付け加えておきます。
Server.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");
}
}
OK、エラーが発生しましたが、もちろん問題が間違っていました。問題は、私がどのように得ているのか見当もつかない、いつものようにすべて迷惑になることです。ここにエラーがあります
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)
男私は本当にばかげていると思います。問題を間違えて申し訳ありませんが、これを手伝ってもらえますか? クエリを印刷したので、クエリが null ではないことはわかっています。だから私はなぜそれが私にnullPointerを与えているのかわからない
nullポインタを取得していると思う理由を見つけました
path to 'db/loginDB.db': 'C:\Users\Satokaheni\Programs\Java Workspace\Runnable Jars\db' does not exist
これが私のDBコードです
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 必要に応じて、コードを投稿できます。