Android Java.Lang.IllegalStateException 수정: 활동의 메서드를 실행할 수 없음

Mehvish Ashiq 2023년10월12일
  1. java.lang.IllegalStateException: Could not execute method of the activity 오류를 재현합니다.
  2. java.lang.IllegalStateException: Could not execute method of the activity 오류의 원인
  3. java.lang.IllegalStateException: Could not execute method of the activity 오류 수정
Android Java.Lang.IllegalStateException 수정: 활동의 메서드를 실행할 수 없음

이 자습서에서는 Java에서 Android 애플리케이션을 만드는 동안 java.lang.IllegalStateException: Could not execute method of the activity 오류의 데모를 안내합니다. 또한 이 오류의 원인에 대해 설명하고 해결 방법을 제공합니다.

java.lang.IllegalStateException: Could not execute method of the activity 오류를 재현합니다.

예제 코드:

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);
  }
}

우리는 이 간단한 코드를 작성하여 준유용한 응용 프로그램을 만들었습니다.

우리는 기본적으로 Java 코드(ping A, 포트 스캔)의 유용한 부분을 가져오는 시간입니다. 그런 다음 응용 프로그램에 추가하지만 실행하면 런타임에 다음 오류가 생성됩니다.

오류 설명:

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

이 성가신 오류가 발생하는 이유는 무엇입니까? 가능한 원인을 찾으려면 다음 섹션을 확인하십시오.

java.lang.IllegalStateException: Could not execute method of the activity 오류의 원인

이 오류는 예외 체인에서 IllegalStateException을 생성하는 NullPointerException으로 인해 발생합니다. 따라서 이 오류가 발생하는 이유를 파악하려면 null, NullPointerExceptionIllegalStateException에 대해 충분히 알고 있어야 합니다.

null은 컴퓨터 프로그래머 사이에서 매우 잘 알려진 키워드입니다. 예를 들어 Arrays, Enums, InterfacesClasses와 같은 참조 변수 또는 데이터 유형에 대한 리터럴입니다.

NullPointerException은 애플리케이션이 null 값이 있는 메서드에 액세스하는 것을 의미하는 개체 참조를 검색하려고 할 때 발생하는 런타임 예외입니다. 우리 프로그램을 되돌아보면 어떤 변수도 null 값으로 초기화되지 않았음을 알 수 있습니다.

중요한 점은 null 값이 선언할 때마다 자동으로 참조 변수에 저장되지만 초기화하지 않는다는 것입니다. 참조 데이터 유형은 선언 프로세스 중에 초기화되지 않은 경우 기본값으로 null 값을 포함합니다.

반면 IllegalStateException은 메소드가 불법적이거나 잘못된 시간에 호출 또는 호출되었음을 보여주는 런타임 예외입니다.

이제 오류가 예외 체인에서 IllegalStateException을 생성하는 NullPointerException에 의해 발생한다는 것을 알고 있습니다. 자, 이것을 고치는 방법을 알아 봅시다.

java.lang.IllegalStateException: Could not execute method of the activity 오류 수정

MainActivity.java 클래스의 시작 부분에는 초기화하지 않았지만 선언한 EditText 유형의 startPortstopPort라는 두 개의 변수가 있습니다. 이는 다음 코드 행을 실행하려고 할 때 기본값이 null임을 의미합니다.

예제 코드:

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

java.lang.IllegalStateException: Could not execute method of the activity 오류가 발생하는 이유는 null을 포함하는 EditText 유형의 참조 변수에 액세스하려고 하기 때문입니다. 따라서 다음과 같이 findViewById()를 사용하여 onCreate() 메서드 내에서 startPortstopPort를 초기화해야 합니다.

예제 코드:

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

findViewById() 메서드는 구성 요소의 id 값을 매개 변수로 사용하고 Android 애플리케이션에 있는 구성 요소를 찾는 데 도움을 줍니다. 또 다른 해결책은 다음과 같이 try-catch 블록을 추가하는 것입니다.

예제 코드:

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

try-catch 블록을 사용하여 NullPointerException잡아 충돌 없이 애플리케이션을 실행할 수 있습니다. 여기에서는 예외를 생성할 수 있는 try 블록 내부의 코드 조각만 작성합니다.

catch 블록은 try 블록에서 발생하는 예외 처리를 담당하고 거기에서 실행을 재개합니다. catch 블록을 실행한 후 프로그램은 try 블록으로 돌아가지 않습니다.

그렇기 때문에 예외가 발생할 수 있는 try 블록에 해당 코드 줄만 작성합니다.

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

관련 문장 - Java Error