gpt4 book ai didi

java - JSch 断开按钮

转载 作者:太空宇宙 更新时间:2023-11-04 07:24:25 24 4
gpt4 key购买 nike

过去几周我一直在自学 Java(很可能做错了什么)!

我开发了一个简单的程序,可以连接到数据库列表位置。我可以使用 JSCH 连接到它们来建立隧道。这样我就可以通过 VNC 访问它。

这一切都运行良好。但是,我的问题在于其中的断开连接部分。

我有一个名为 WinConnect 的 Public Void,如果单击了连接按钮,则会触发该函数,并且如上所述,该函数将作为线程工作。

在我尝试过的断开连接按钮上:

相关按钮代码的当前部分

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

}

  • session session.disconnect();//表示预期;并且找不到符号 方法断开连接

  • Session.session.disconnect();//这表示找不到变量 session

  • JSch.session.disconnect//这表示找不到变量 session

等等,它们都不起作用。 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;

编辑:猜测是因为变量 Session 位于 winconnect 中,而不是在按钮中,所以找不到它?

编辑2:尝试下面的建议后,单击“断开连接”时它会锁定

Edit3:正确的新代码应该可以工作,但是如果我调用 session.delPortForwardingL(7051);,session.disconnect 似乎存在问题;它有效,但我不确定连接是否仍然 Activity ,不确定为什么 session.disconnect 不活动!

Edit4:检查了服务器并且连接仍然存在,它只是删除了我的 VNC 的转发停止,不好:(

Edit5:检查调用 session.disconnect 是否确实有效,但它会导致我的程序由于某种原因锁定

最佳答案

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

尝试将变量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();
}
});
...
}
}

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

关于java - JSch 断开按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18784123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com