私はここ数週間、Java を独学で学んできました (おそらく何か間違ったことをしている可能性があります)。
データベース リストの場所に接続する簡単なプログラムを開発しました。JSCH を使用してトンネルをセットアップすることで、それらに接続できます。だから私はそれにVNCすることができます。
これはすべてうまくいきます。ただし、私の問題は、これの切断部分にあります。
私は WinConnect と呼ばれる Public Void を持っています。これは、接続用のボタンがクリックされた場合に起動され、上記のようにスレッドとして機能します。
私が試した切断ボタンで:
Relivant ボタン コードの現在の部分
private void jButtonDisconnectActionPerformed(java.awt.event.ActionEvent evt) {
this.channel.disconnect();
this.session.disconnect();
}
セッション session.disconnect(); //期待されていると言います。シンボルメソッドの切断が見つかりません
Session.session.disconnect(); //これは、可変セッションが見つからないことを示しています
JSch.session.disconnect //これは、変数セッションが見つからないことを示しています
など、どれも機能しません。Netbeans は、コード内にエラーがあると言っています。明らかに私の知識不足は、私が何か間違ったことをしていることを意味しています。
WinConnect のすべて:
private void WinConnect(){
String SshPortNumb = (String)SshPort.getSelectedItem();
int SshPortNum = Integer.parseInt(SshPortNumb);
String PcIpNum = (String)PcIp.getText();
String host = (String)SiteIp.getText();
String VncPortNumb = VncPort.getText();
int VncPortNum = Integer.parseInt(VncPortNumb);
String user = (String)UserName.getText();
String PasswordVal = (String)Password.getText();
String VncPathpre = VncPath.getText();
String VncPathdat = "\""+VncPathpre+"\"";
try{
JSch jsch=new JSch();
jsch.setKnownHosts("known_hosts");
this.session=jsch.getSession(user, host, SshPortNum);
String passwd = PasswordVal;
this.session.setPassword(passwd);
UserInfo ui = new MyUserInfo(){
public void showMessage(String message){
JOptionPane.showMessageDialog(null, message);
}
public boolean promptYesNo(String message){
Object[] options={ "yes", "no" };
int foo=JOptionPane.showOptionDialog(null,
message,
"Warning",
JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE,
null, options, options[0]);
return foo==0;
}
};
jButtonDisconnect.setEnabled(true);
jButtonConnect.setEnabled(false);
this.session.setUserInfo(ui);
this.session.connect(30000);
this.session.setPortForwardingL(7051, PcIpNum, VncPortNum);
this.channel=session.openChannel("shell");
this.channel.setInputStream(System.in);
this.channel.setOutputStream(System.out);
this.channel.connect(3*1000);
}
catch(Exception e){
System.out.println(e);
}
}
public class RemoteDesktop extends javax.swing.JFrame {
private Session session;
private Channel channel;
編集:変数セッションがボタンではなくwinconnectにあるため、それを見つけることができないと思いますか?
Edit2:以下の提案を試した後、切断をクリックするとロックされます
Edit3:新しいコードは正常に機能するはずですが、session.delPortForwardingL(7051); を呼び出すと、session.disconnect に問題があるようです。それは機能しますが、接続がまだアクティブであるかどうかはわかりません。なぜ session.disconnect がアクティブでないのかわかりません!
Edit4:サーバーをチェックしましたが、接続がまだ整っているため、VNCの転送停止が削除されますが、良くありません:(
Edit5:session.disconnectの呼び出しが実際に機能しているかどうかを確認しましたが、何らかの理由でプログラムがロックされます