Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
-
Reproduzieren Sie den Fehler
java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden
-
Ursache des Fehlers
java.lang.IllegalStateException: Methode der Aktivität konnte nicht ausgeführt werden
-
Beheben Sie den Fehler
java.lang.IllegalStateException: 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.
Verwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse