java - JSch断开按钮

  显示原文与译文双语对照的内容

在最后几周的( 可能是在做错误的事情) 上我已经是teached自己了 !

我已经开发了一个简单的程序来连接数据库列表的位置。 我可以用JSCH连起来建立隧道。 所以我可以把它放在上面。

这一切都正常。不过,我的问题是。

我有一个名为WinConnect的public 空格,如果连接按钮被点击了 cliked,以上就是线程。

在断开连接按钮上,我尝试了:

relivant按钮代码的当前部分


private void jButtonDisconnectActionPerformed(java.awt.event.ActionEvent evt) { 
 this.channel.disconnect();
 this.session.disconnect(); 

}

  • 需要会话 session.disconnect();//says ;并且找不到符号方法断开连接

  • Session.session.disconnect();//this 表示无法找到可变会话

  • JSch.session.disconnect//this 表示无法找到可变会话

等等,他们都不工作。 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 不正确。

Edit4: 检查服务器并且connecetions仍然在位,它只是删除了 fowarding stoppign我的VNC,不好?

Edit5: 检查是否调用 session.disconnect 实际上是正常工作的,但是我的程序会因为某些原因而锁定

时间: 原作者:

因为你只发布了一段源代码我只能猜测。 根据错误消息,方法 .addActionListener() 创建一个变量范围。 所以你不能访问家长的上下文。

尝试将变量 Session session 移动到全局范围,如下所示:


public class YourJavaClass
{
 private Session session;

 public static void main()
 {
. . .
 }

 private void connect(String location)
 {
 try
 {
 JSch jsch=new JSch();

 jsch.setKnownHosts(location);

 this.session=jsch.getSession(user, host, SshPortNum);

 String passwd = PasswordVal;
 this.session.setPassword(passwd);
 this.session.connect(30000); 

 session.setPortForwardingL(7051, PcIpNum, VncPortNum);
 }

 private void yourGuiMethod()
 {
. . .
 jButtonDisconnect.addActionListener(new ActionListener()
 {
 public void jButtonDisconnectActionPerformed(java.awt.event.ActionEvent evt)
 {
 this.session.disconnect();
 }
 }); 
. . .
 }
}

如果你想的话,你可以给我答案。 记住,在这个timepoint中,你还没有发布足够的源代码。 所以我只能猜测。

原作者:
...