有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您的错误是由最后一个Caused by引起的:

    Caused by: android.os.NetworkOnMainThreadException
    

    当您尝试在主线程上执行网络操作时,会引发此异常。要解决此问题,可以使用AsyncTask类作为后台操作执行连接