Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden

Mehvish Ashiq 12 Oktober 2023
  1. Reproduzieren Sie den Fehler java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden
  2. Ursache des Fehlers java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden
  3. Beheben Sie den Fehler java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden
Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden

Dieses Tutorial führt uns durch die Demonstration des Fehlers java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden, während eine Android-Anwendung in Java erstellt wird. Hier wird auch der Grund für diesen Fehler erläutert und die Lösung zu seiner Behebung bereitgestellt.

Reproduzieren Sie den Fehler java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden

Beispielcode:

package com.example.npe;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;

public class MainActivity extends Activity implements OnClickListener {
  EditText ipAddressField;
  TextView scanOut;
  TextView portResults;
  EditText startPort;
  EditText stopPort;

  protected void onCreate(Bundle instanceState) {
    super.onCreate(instanceState);
    setContentView(R.layout.activity_main);

    ipAddressField = (EditText) findViewById(R.id.ip_address_field);
    ipAddressField.getText();
    scanOut = (TextView) findViewById(R.id.scan_out);

    Button scanButton = (Button) findViewById(R.id.scanButton);
    scanButton.setOnClickListener(this);
  }

  public void onClick(View view) {
    Editable host = ipAddressField.getText();

    switch (view.getId()) {
      case R.id.scanButton:
        try {
          String pingCommand = "ping -c 5 " + host;
          String pingOutput = "";
          Runtime runtime = Runtime.getRuntime();
          Process process = runtime.exec(pingCommand);
          BufferedReader bufferedReader =
              new BufferedReader(new InputStreamReader(process.getInputStream()));

          String str;
          while ((str = bufferedReader.readLine()) != null) {
            System.out.println(str);
            scanOut.setText(str + "\n"
                + "\n");
            pingOutput += str;
            scanOut.setText("/n" + pingOutput);
          }

          bufferedReader.close();
        } // try
        catch (IOException exception) {
          System.out.println(exception);
        }
        break;
      default:
        break;
    }
  }

  public void OnClickPort(View view) {
    switch (view.getId()) {
      case R.id.button1:

        int rangeOfStartPort = Integer.parseInt(startPort.getText().toString());
        int rangeOfStopPort = Integer.parseInt(stopPort.getText().toString());

        for (int j = rangeOfStartPort; j <= rangeOfStopPort; j++) {
          try {
            Socket serverSocket = new Socket("192.168.0.1", j);
            Toast.makeText(getApplicationContext(), "Port that is in use: " + j, Toast.LENGTH_LONG)
                .show();
            serverSocket.close();
          } catch (Exception exception) {
            exception.printStackTrace();
          }

          System.out.println("Port that is not in use: " + j);
        }
    }
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.activity_main, menu);
    return super.onCreateOptionsMenu(menu);
  }
}

Wir haben diesen einfachen Code geschrieben, um die halbwegs nützliche Anwendung zu erstellen.

Wir nehmen im Grunde genommen nützliche Bits des Java-Codes (Ping A, Port-Scan). Dann fügen wir sie unserer Anwendung hinzu, aber wenn wir sie ausführen, wird zur Laufzeit der folgende Fehler generiert.

Fehlerbeschreibung:

FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method of the activity

Warum haben wir diesen ärgerlichen Fehler? Überprüfen Sie den folgenden Abschnitt, um den möglichen Grund herauszufinden.

Ursache des Fehlers java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden

Dieser Fehler wird durch NullPointerException verursacht, die in einer Ausnahmekette die IllegalStateException generiert. Daher ist es wichtig, genug über null, NullPointerException und IllegalStateException zu wissen, um herauszufinden, warum dieser Fehler auftritt.

Die null ist ein sehr bekanntes Schlüsselwort unter Computerprogrammierern. Es ist ein Literal für Referenzvariablen oder Datentypen, zum Beispiel Arrays, Enums, Interfaces und Classes.

Die NullPointerException ist eine Laufzeitausnahme, die auftritt, wenn die Anwendung versucht, eine Objektreferenz abzurufen, was bedeutet, dass auf Methoden mit einem null-Wert zugegriffen wird. Wenn wir auf unser Programm zurückblicken, können wir sehen, dass keine Variable mit einem null-Wert initialisiert wird.

Der wichtige Punkt ist, dass der null-Wert automatisch in einer Referenzvariablen gespeichert wird, wenn wir ihn deklarieren, aber nicht initialisieren. Die Referenzdatentypen enthalten als Standardwert einen null-Wert, wenn sie während des Deklarationsprozesses nicht initialisiert werden.

Andererseits ist die IllegalStateException eine Laufzeitausnahme, die anzeigt, dass die Methode zur illegalen oder falschen Zeit aufgerufen oder aufgerufen wurde.

Wir wissen jetzt, dass der Fehler durch NullPointerException verursacht wird, die in einer Ausnahmekette die IllegalStateException generiert. Lassen Sie uns also herausfinden, wie wir das beheben können.

Beheben Sie den Fehler java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden

Am Anfang der Klasse MainActivity.java haben wir zwei Variablen namens startPort und stopPort vom Typ EditText, die wir nicht initialisiert, aber deklariert haben. Dies bedeutet, dass ihr Standardwert zu dem Zeitpunkt, an dem wir versuchen, die folgenden Codezeilen auszuführen, null ist.

Beispielcode:

int rangeOfStartPort = Integer.parseInt(startPort.getText().toString());
int rangeOfStopPort = Integer.parseInt(stopPort.getText().toString());

Der Grund für den Fehler java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden ist, dass wir versuchen, auf die Referenzvariablen vom Typ EditText zuzugreifen, die null enthalten. Also müssen wir startPort und stopPort innerhalb der onCreate()-Methode initialisieren, indem wir findViewById() wie folgt verwenden.

Beispielcode:

startPort = (EditText) findViewById(R.id.write_start_field_here);
stopPort = (EditText) findViewById(R.id.write_stop_field_here);

Die Methode findViewById() nimmt den id-Wert der Komponente als Parameter und hilft, eine Komponente zu finden, die in der Android-Anwendung vorhanden ist. Eine andere Lösung besteht darin, einen try-catch-Block wie folgt hinzuzufügen.

Beispielcode:

try {
  int rangeOfStartPort = Integer.parseInt(startPort.getText().toString());
  int rangeOfStopPort = Integer.parseInt(stopPort.getText().toString());
} catch (Exception ex) {
  ex.printStackTrace();
}

Mit dem try-catch-Block können wir die NullPointerException abfangen und unsere Anwendung ausführen, ohne dass sie abstürzt. Hier schreiben wir nur den Codeabschnitt in den try-Block, der möglicherweise eine Ausnahme generiert.

Während der catch-Block für die Behandlung dieser Ausnahme verantwortlich ist, die im try-Block auftritt, und die Ausführung von dort aus fortsetzt. Denken Sie daran, dass das Programm nach Ausführung des catch-Blocks nicht zum try-Block zurückkehrt.

Deshalb schreiben wir nur solche Codezeilen in den try-Block, die zu Exceptions führen können.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - Java Error