过去几周我一直在自己教Java(很可能做错了)!
我开发了一个连接到数据库列表位置的简单程序。我可以使用JSCH连接到它们来建立隧道。所以我可以VNC到它。
一切正常。但是,我的问题在于断开部分。
我有一个名为WinConnect的Public Void,如果单击cliked连接按钮并且如上所述作为线程,则会触发此事件。
在我尝试的断开连接按钮上:
relivant按钮代码的当前部分
private void jButtonDisconnectActionPerformed(java.awt.event.ActionEvent evt) {
this.channel.disconnect();
this.session.disconnect();
}
Session 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;
编辑:猜猜是因为变量Session在winconnect中而不是在按钮中找不到它?
Edit2:尝试下面的建议后,只需在点击断开连接时锁定
Edit3:对新代码应该正常工作,但是如果我调用session.delPortForwardingL(7051),则session.disconnect似乎存在问题;它工作但我不确定连接是否仍然有效,不确定为什么session.disconnect没有!
Edit4:检查了服务器并且连接仍然存在,它只是删除了我的VNC的fowarding stoppign,不是很好:(
Edit5:检查调用session.disconnect是否实际正在运行,但是由于某种原因导致我的程序锁定
答案 0 :(得分:1)
因为你只发布了一段源代码,我只能猜测。基于错误消息,问题是方法.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();
}
});
...
}
}
如果你愿意,你可以投票给我答案。虽然请记住,在这个时间点你还没有发布足够的源代码。所以我只能猜到。