ボタンのクリックで SSH Unix サーバーに接続しようとしています (actionPerformed() メソッドで記述されたコード)。SSHサーバーへの接続にJSchを使用しています。ネットワーク操作なので、コードは SwingWorker クラスで記述します。
private void testConnectionButtonActionPerformed(java.awt.event.ActionEvent evt) {
SwingWorker<Boolean, Void> sw = new SwingWorker<Boolean, Void>(){
@Override
protected Boolean doInBackground() throws Exception {
JSch jsch = new JSch();
String host = "ServerHost";
String username = "username";
String password = "password";
Session session = jsch.getSession(username, host);
session.setPassword(password);
session.setTimeout(20000);
System.out.println("Connecting to server...");
session.connect();
return true;
}
@Override
public void done(){
try {
System.out.println(get().toString());
} catch (Exception ex) {
System.out.err(ex);
}
}
};
sw.execute();
}
しかし、正しいホスト、ユーザー名、およびパスワードの詳細を使用して を実行すると、常に次のエラーが発生します。
com.jcraft.jsch.JSchException: timeout: socket is not established
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at javax.swing.SwingWorker.get(SwingWorker.java:583)
しかし、スタンドアロン プログラムで同じコードを実行する場合は常に、actionPerformed() メソッドを記述する代わりに、通常のメソッドで記述して main() メソッドから呼び出す場合を意味します。それが動作します。同じコードをボタン クリックの actionPerformed() メソッドと統合すると、上記の例外が発生します。
ここで私が間違っていることを誰かが提案できますか、またはコードに変更を加える必要があります。
「SSHJ」実装を使用して SSH サーバーに接続しようとしましたが、次のエラーが表示されます。
java.net.SocketException: Connection reset
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at javax.swing.SwingWorker.get(SwingWorker.java:583)
誰かが私を助けてくれますか - どうすれば前進できますか?