java Android ganymed ssh2
我尝试打开到服务器的ssh连接。为此,我使用Ganymed SSH2修订版262
我创建了一个SSHJava类
public class SSH {
public String connection() {
String Hostname = "XX.XX.XX.XX";
String Login = "XXXXX";
String PWD = "*******";
String result = "";
try {
Connection connection = new Connection(Hostname);
connection.connect();
boolean isAuthenticated = connection.authenticateWithPassword(Login, PWD);
if (isAuthenticated == false)
throw new IOException("Authentication failed.");
Session session = connection.openSession();
session.execCommand("uname -a");
InputStream stream = new StreamGobbler(session.getStdout());
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
while (true)
{
String line = bufferedReader.readLine();
if (line == null)
break;
result = line;
}
session.close();
connection.close();
}
catch (IOException e)
{
e.printStackTrace(System.err);
System.exit(2);
}
return result;
}}
我试着通过按下按钮来连接我的活动
public void sshConnect(View view) {
SSH ssh = new SSH();
SSHResult = ssh.connection();
}
但是我收到了一个错误
java.lang.IllegalStateException: Could not execute method of the activity
at 安卓.view.View$1.onClick(View.java:4026)
at 安卓.view.View.performClick(View.java:4785)
at 安卓.view.View$PerformClick.run(View.java:19858)
at 安卓.os.Handler.handleCallback(Handler.java:739)
at 安卓.os.Handler.dispatchMessage(Handler.java:95)
at 安卓.os.Looper.loop(Looper.java:155)
at 安卓.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:823)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at 安卓.view.View$1.onClick(View.java:4021)
at 安卓.view.View.performClick(View.java:4785)
at 安卓.view.View$PerformClick.run(View.java:19858)
at 安卓.os.Handler.handleCallback(Handler.java:739)
at 安卓.os.Handler.dispatchMessage(Handler.java:95)
at 安卓.os.Looper.loop(Looper.java:155)
at 安卓.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:823)
Caused by: 安卓.os.NetworkOnMainThreadException
at 安卓.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1155)
at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
at libcore.io.IoBridge.connect(IoBridge.java:122)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
at java.net.Socket.connect(Socket.java:882)
at ch.ethz.ssh2.transport.ClientTransportManager.connect(ClientTransportManager.java:62)
at ch.ethz.ssh2.transport.ClientTransportManager.connect(ClientTransportManager.java:34)
at ch.ethz.ssh2.Connection.connect(Connection.java:754)
at ch.ethz.ssh2.Connection.connect(Connection.java:628)
at info.senyk.ustat.SSH.connection(SSH.java:28)
at info.senyk.ustat.StatsActivity.sshConnect(StatsActivity.java:118)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at 安卓.view.View$1.onClick(View.java:4021)
at 安卓.view.View.performClick(View.java:4785)
at 安卓.view.View$PerformClick.run(View.java:19858)
at 安卓.os.Handler.handleCallback(Handler.java:739)
at 安卓.os.Handler.dispatchMessage(Handler.java:95)
at 安卓.os.Looper.loop(Looper.java:155)
at 安卓.app.ActivityThread.main(ActivityThread.java:5696)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:823)
帮帮我,我哪里做错了
# 1 楼答案
您的错误是由最后一个
Caused by
引起的:当您尝试在主线程上执行网络操作时,会引发此异常。要解决此问题,可以使用AsyncTask类作为后台操作执行连接