当前位置: 首页 > 知识库问答 >
问题:

JSch断开按钮

张德佑
2023-03-14

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

relivant按钮代码的当前部分

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

}

 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;

编辑:猜是因为varible会话在winconnect中,而不是在按钮中,所以找不到它?

Edit2:尝试下面的建议后,单击断开连接就会锁定

Edit5:如果调用session.disconnect确实有效,则选中此选项,但由于某种原因,它会导致我的程序锁定

共有1个答案

葛承德
2023-03-14

因为你只是发布了一段源代码,我只能猜测。根据错误消息,方法.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();
     }
   });  
   ...
  }
}

如果你愿意,你可以否决我的答案。不过请记住,目前您还没有发布足够的源代码。所以我只能猜测。

 类似资料:
  • 我正在使用JSch在远程机器上运行shell脚本,并使用JSch通道在日志文件中打印命令日志。问题是,当脚本结束时,我会创建一个通道。断开连接,断开连接后不久,系统将关闭。out停止打印到日志文件中。代码如下: 日志文件中的行: 之前断开这里退出-状态: 0 如果您在我上面粘贴的方法中看到,sysout打印的实际上就是“通道”上方的一个。断开'。下面的那个没有打印出来!所有功能正常,总体输出符合我

  • 我有一个带有两个按钮的swing应用程序,用于运行和停止执行JSch命令。所以我有下一个方法,当我们点击开始按钮时调用: 正如你上面看到的,我们有is取消变量,它是布尔变量,当点击停止按钮时,我们将其设置为false。所以我的问题是当用户点击停止按钮和通道与会话成为断开,zgrep表达式继续工作在服务器上。我认为channel.disconnect()应该停止我在服务器上运行的所有命令,有人能建议

  • 我使用java ssh客户端(http://www.jcraft.com/jsch/)连接到远程机器并执行命令。代码工作正常,直到我连接到远程机器并执行命令。然而,问题是,即使命令执行成功,通道和会话也不会断开。 我也打电话给session.disconnect和channel.disconnect,但仍然是问题所在。 这是我的代码: 请建议

  • JSch 是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的 程序中。同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器。

  • 这是一个会议应用程序,我正在启动传出呼叫,以使我的VoIP呼叫具有高优先级,并且在我进行VoIP呼叫时不会中断传入呼叫。 我在我的应用程序中使用WebRTC CallKit。我开始了一个呼叫,当我按下锁定/电源按钮,然后CallKit呼叫断开,我的Voip呼叫音频路由更改为接收器并保持不变。 为什么要锁定iPhone以终止通话。 这是我的代码。

  • 断开与wifi的连接. 请求方式: "|2|2|\r" 返回值: "|2|1|\r" wifi连接状态:wifi断开连接 Arduino样例: softSerial.print("|2|2|\r");