Java lang illegalstateexception как исправить ошибку

An unexpected, unwanted event that disturbed the normal flow of a program is called Exception.

Most of the time exception is caused by our program and these are recoverable. Example: If our program requirement is to read data from the remote file locating in U.S.A. At runtime, if a remote file is not available then we will get RuntimeException saying fileNotFoundException.  If fileNotFoundException occurs we can provide the local file to the program to read and continue the rest of the program normally.

There are mainly two types of exception  in java as follows:

1. Checked Exception:

The exception which is checked by the compiler for the smooth execution of the program at runtime is called a checked exception. In our program, if there is a chance of rising checked exception then compulsory we should handle that checked exception (either by try-catch or throws keyword) otherwise we will get compile-time error.

Examples of checked exceptions are ClassNotFoundException, IOException, SQLException, etc.

2. Unchecked Exception:

The exceptions which are not checked by the compiler, whether programmer handling or not such type of exception are called an unchecked exception.

Examples of unchecked Exceptions are ArithmeticException, ArrayStoreException etc.

Whether the exception is checked or unchecked every exception occurs at run time only if there is no chance of occurring any exception at compile time.

IllegalStateException is the child class of RuntimeException and hence it is an unchecked exception. This exception is rise explicitly by programmer or by the API developer to indicate that a method has been invoked at the wrong time. Generally, this method is used to indicate a method is called at an illegal or inappropriate time.

Example: After starting a thread we are not allowed to restart the same thread once again otherwise we will get Runtime Exception saying IllegalStateException.

Example 1: We call start() method when it’s already executing the run() method.

Java

import java.io.*;

import java.util.*;

class myThread extends Thread {

    public void run()

    {

        for (int i = 0; i < 5; i++) {

            System.out.println("GeeksForGeeks");

        }

    }

}

class Thread1 {

    public static void main(String[] args)

    {

        myThread t = new myThread();

        t.start();

        System.out.println("Main Thread");

        t.start();

    }

}

Example 2: We call start() method on a thread when it has finished executing run() method. 

Java

import java.io.*;

import java.util.*;

class myThread extends Thread {

    public void run()

    {

        for (int i = 0; i < 5; i++) {

            System.out.println("GeeksForGeeks");

        }

    }

}

class Thread1 {

    public static void main(String[] args)

    {

        myThread t = new myThread();

        t.start();

        try {

            System.out.println("Main Thread is going to sleep");

            t.sleep(2000);

            System.out.println("Main Thread awaken");

        }

        catch (Exception e) {

            System.out.println(e);

        }

        System.out.println("Main Thread");

        t.start();

    }

}

 How to solve this error?

In order to avoid java.lang.IllegalStateException in Java main Thread we must ensure that any method in our code cannot be called at an illegal or an inappropriate time.

In the above example if we call start() method only once on thread t then we will not get any java.lang.IllegalStateException because we are not calling the start() method after the starting of thread (i.e we are not calling the start() method at an illegal or an inappropriate time.) 

Java

import java.io.*;

import java.util.*;

class myThread extends Thread {

    public void run()

    {

        for (int i = 0; i < 5; i++) {

            System.out.println("GeeksForGeeks");

        }

    }

}

class Thread1 {

    public static void main(String[] args)

    {

        myThread t = new myThread();

        t.start();

        try {

            System.out.println("Main Thread is going to sleep");

            t.sleep(2000);

            System.out.println("Main Thread awaken");

        }

        catch (Exception e) {

            System.out.println(e);

        }

        System.out.println("Main Thread");

    }

}

Last Updated :
03 Mar, 2022

Like Article

Save Article

An IllegalStateException is a runtime exception in Java that is thrown to indicate that a method has been invoked at the wrong time. This exception is used to signal that a method is called at an illegal or inappropriate time.

For example, once a thread has been started, it is not allowed to restart the same thread again. If such an operation is performed, the IllegalStateException is thrown.

Since the IllegalStateException is an unchecked exception, it does not need to be declared in the throws clause of a method or constructor.

What Causes IllegalStateException

The IllegalStateException is thrown when the Java environment or application is not in an appropriate state for the requested operation. This can occur when dealing with threads or the Collections framework of the java.util package under specific conditions. Here are examples of some situations where this exception can occur:

  • When the Thread.start() method is called on a thread that has already been started.
  • When the remove() method of the Iterator interface is called on a List without calling the next() method. This leaves the List collection in an unstable state, causing an IllegalStateException.
  • If an element is attempted to be added to a Queue that is full. Adding elements beyond the size of the queue will cause an IllegalStateException.

IllegalStateException Example

Here’s an example of an IllegalMonitorStateException thrown when the Iterator.remove() method is called to remove an element from an ArrayList before calling the next() method:

import java.util.ArrayList;
import java.util.Iterator;

public class IllegalStateExceptionExample {
    public static void main(String args[]) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");

        Iterator<String> it = list.iterator();
        it.remove();
    }
}

Since the remove() method is used to remove the previous element being referred to by the Iterator, the next() method should be called before an element is attempted to be removed. In this case, the next() method was never called, so the Iterator attempts to remove the element before the first element.

Since this action is illegal, running the above code throws an IllegalStateException:

Exception in thread "main" java.lang.IllegalStateException
    at java.base/java.util.ArrayList$Itr.remove(ArrayList.java:980)
    at IllegalStateExceptionExample.main(IllegalStateExceptionExample.java:12)

How to Fix IllegalStateException

To avoid the IllegalStateException in Java, it should be ensured that any method in code is not called at an illegal or inappropriate time.

In the above example, calling the Iterator.next() method on the ArrayList before using the remove() method to remove an element from it will help fix the issue:

import java.util.ArrayList;
import java.util.Iterator;

public class IllegalStateExceptionExample {
    public static void main(String args[]) {
        ArrayList<String> list = new ArrayList<String>();
        list.add("a");
        list.add("b");
        list.add("c");

        Iterator<String> it = list.iterator();
        it.next();
        it.remove();

        System.out.println(list);  
    }
}

Calling the next() method moves the Iterator position to the next element. Calling the remove() method afterwards will remove the first element in the ArrayList, which is a legal operation and helps fix the exception.

Running the above code produces the correct output as expected:

[b, c]

Track, Analyze and Manage Errors With Rollbar

Rollbar in action

Managing Java errors and exceptions in your code is challenging. It can make deploying production code an unnerving experience. Being able to track, analyze, and manage errors in real-time can help you to proceed with more confidence. Rollbar automates error monitoring and triaging, making fixing Java errors easier than ever. Sign Up Today!

An exception is an unwanted and unexpected error thrown in the program. Most of the time, an exception occurs when there is an error in our code but it can be handled. It disrupts the normal flow of the code.

For example, the code throws an exception if the user has entered invalid information, if the code is unable to read the file located at the remote place, or if the network connection is lost in the middle of the communication.

IllegalStateException in Java

IllegalStateExceptionis the sub-class of RuntimeException class, and therefore it is an unchecked exception. It is raised by the programmer or by the API developer explicitly. It is thrown when a method call illegal or a method is called at incorrect time.

For example, once we start a thread, we cannot restart the same thread again; if we try to do that, it throws a runtime exception i.e., IllegalStateException.

The exception may arise in the code usually when we are working with the Collections framework. The List, Queue, Maps, Tree are some of the collections. Out of these, List and Queues tend to throw the illegal state exception at the specific conditions.

Note: IllegalStateException exception is not just limited to the Collections framework.

Let’s see some of the scenario where the IllegalStateException will be thrown.

Example 1:

The following Java program depicts the situation where we try to call the start() method when the run() method is already executing.

IllegalStateExceptionTest1.java

Output:

How to resolve IllegalStateException in Java

Example 2:

The following code depicts the situation where we call the start() method on a thread when the execution of run() method is over.

IllegalStateExceptionTest2.java

Output:

How to resolve IllegalStateException in Java

Example 3:

The following code explains the situation where we are using the remove() method to remove the element from the ArrayList, before moving to the first element.

IllegalStateExceptionTest3.java

Output:

How to resolve IllegalStateException in Java

Solution for the IllegalStateException

To avoid the java.lang.IllegalStateException in Java we should take care that any method in our code cannot be called at inappropriate or illegal time.

Solution for example 1 and 2:

Consider the above example 1 and 2 where we have called the start() method more than once. If we call it only once, we will not get this exception. Because start() method is not called after starting the thread.

IllegalStateExceptionSolution.java

Output:

How to resolve IllegalStateException in Java

Solution for Example 3:

The remove() method of the ArrayList class is used to remove the last element after calling the next() method.

  • After removing element at current index we have to move next element to remove it. (for every call of the next() method, we have to invoke the remove() method only once).
  • As the initial position of list will be before the first element, we cannot call the remove() method without calling the next() method.

In order to prevent the exception we need to follow the above steps in our Java code.

IllegalStateExceptionSolution2.java

Output:

How to resolve IllegalStateException in Java


Сбои — головная боль для всех вовлеченных. Команды разработки ненавидят разбираться с ними, а пользователи не желают мириться — 62% пользователей удаляют приложение в случае сбоев, говорит исследование DCI. Нестабильность приложения может быстро привести к провалу всего проекта или, по крайней мере, дорого обойтись. Чтобы свести к минимуму сбои приложения и время, необходимое для их устранения, мы собрали наиболее распространенные ошибки Android-приложений и способы их устранения.

5 самых распространенных ошибок в Android-приложениях и способы их устранения

java.lang.NullPointerException

Определенно, самый частый креш в Android. Скорее всего, если вы когда-либо разрабатывали приложение для Android, то сталкивались с этой ошибкой. Наиболее частой причиной NullPointerException является ссылка на данные после выхода за пределы области видимости или сборки мусора.

Обычно это происходит, когда приложение переходит в фоновый режим, и избавляется от ненужной памяти. Это приводит к потере некоторых ссылок, и когда метод Android onResume () вызывается снова, это может привести к ошибке NullPointException.

Чтобы точно определить, где произошла ошибка, используйте трассировку стека. И, чтобы избежать ошибки и потери данных, вы должны стремиться сохранить свои данные в более надежном месте, когда вызывается метод onPause(). Просто вытащите их обратно при вызове onResume(). И, в общем, старайтесь обрабатывать любые потенциальные нулевые указатели, которые могут вызвать ошибку.

java.lang.IllegalStateException

Одна из наиболее распространенных ошибок Android-приложений, имеющих дело с Фрагментами. Ошибка IllegalStateException может происходить по множеству причин, но в основе ее лежит неправильное управление состояниями Activity.

Она возникает, когда в фоновом потоке выполняется трудоемкая операция, но тем временем создается новый Фрагмент, который отсоединяется от Activity до завершения фонового потока. Это приводит к вызову отсоединенного фрагмента и появлению такого исключения.

Чтобы решить эту проблему, вы должны отменить фоновый поток при приостановке или остановке Фрагмента. Кроме того, вы можете использовать метод isAdded(), чтобы проверить, прикреплен ли Фрагмент, а затем использовать getResources() из Activity.

java.lang.IndexOutOfBoundsException

IndexOutOfBoundsException — одно из самых распространенных исключений RunTimeExceptions, с которыми вы можете столкнуться. Эта ошибка указывает на то, что какой-либо индекс (обычно в массиве, но может быть и в строке или векторе) находится вне допустимого диапазона.

Есть несколько распространенных причин возникновения этого сбоя — использование отрицательного индекса с массивами, charAt или функцией substring. Также, если beginIndex меньше 0 или endIndex больше длины входной строки, или beginIndex больше endIndex. Другая причина — когда endIndex — beginIndex меньше 0. Но, вероятно, наиболее распространенная причина — когда входной массив (строка/вектор) пуст.

Исправить эту проблему относительно просто, всегда лучше проверять трассировку стека всякий раз, когда возникает ошибка. Первым ключевым шагом является понимание того, что вызвало сбой. После этого нужно убедиться, что этот массив, строка или вектор соответствуют требуемому индексу.

java.lang.IllegalArgumentException

Вероятно, наиболее общая причина сбоя в списке — исключение IllegalArgumentException. Самое простое его определение заключается в том, что ваш аргумент неправильный. Этому может быть много причин. Однако есть несколько общих правил.

Одна из наиболее частых причин — попытка получить доступ к элементам пользовательского интерфейса непосредственно из фонового потока. Также, если вы пытаетесь использовать переработанное растровое изображение. Другая распространенная причина — вы забыли добавить Activity в Manifest. Это не будет показано компилятором, так как это RuntimeException.

Чтобы предотвратить этот сбой, сосредоточьтесь на том, чтобы кастинг всегда был правильный. Компилятор не отлавливает множество ошибок, поэтому вам нужно проявлять понимание при обращении к ресурсам, поскольку, например, многие методы пользовательского интерфейса принимают как строки, так и целые числа.

java.lang.OutOfMemoryError

И последний, но не менее важный в нашем списке — один из самых неприятных крешей. Устройства Android бывают всех форм и с разным объемом памяти. Часто бывает, что вы имеете дело с ограниченными ресурсами. OutOfMemoryError возникает, когда ОС необходимо освободить память для высокоприоритетных операций, и она берется из выделенной вашему приложению кучи. Управление памятью становится проще, поскольку новые устройства имеют гораздо больше памяти. Однако не все пользователи вашего приложения будут работать с ними.

Что касается самой ошибки, то одна из основных причин утечки памяти, приводящей к OutOfMemoryError, — это слишком долгое сохранение ссылки на объект. Это может привести к тому, что ваше приложение будет использовать намного больше памяти, чем необходимо. Одна из наиболее распространенных причин — растровые изображения, которые в настоящее время могут быть большого размера. Поэтому не забудьте утилизировать любой объект, который возможно, когда он больше не нужен.

Вы можете запросить у ОС больше памяти для кучи, добавив в свой файл манифеста атрибут

android:largeHeap="true"

Однако это не рекомендуется, кроме случаев крайней необходимости, поскольку это всего лишь запрос и он может быть отклонен.

Источник

Если вы нашли опечатку — выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.

Asked
8 years, 6 months ago

Viewed
584 times

I am developping an app and i wanna display a google map v2 on activity but it doesn’t show
this is a snippet form logcat

11-30 19:14:56.681: E/AndroidRuntime(6062):
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.cultural/com.example.cultural.MainActivity}:
android.view.InflateException: Binary XML file line #20: Error
inflating class fragment

11-30 19:14:56.681: E/AndroidRuntime(6062): Caused by:
java.lang.IllegalStateException: The meta-data tag in your app’s
AndroidManifest.xml does not have the right value. Expected 6171000
but found 0. You must have the following declaration within the
element:

Rami's user avatar

Rami

7,87912 gold badges35 silver badges66 bronze badges

asked Nov 30, 2014 at 17:24

Ufuk Garip's user avatar

0

Make sure you add this to your manifest application tag :

<application
   ... >
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="YOUR KEY HERE" />
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

and see comment below or check this :

Android Google Maps API «Error inflating class fragment»

Community's user avatar

answered Nov 30, 2014 at 17:30

A Honey Bustard's user avatar

A Honey BustardA Honey Bustard

3,4332 gold badges22 silver badges38 bronze badges

5

Make sure you have the following inside the <application> element in your AndroidManifest.xml.

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version"/>

answered Nov 30, 2014 at 17:27

Eugen Pechanec's user avatar

Eugen PechanecEugen Pechanec

37.4k7 gold badges102 silver badges123 bronze badges

1

Понравилась статья? Поделить с друзьями:
  • Как найти клиентов отделочника
  • Как найти своих предков по фамилии бесплатно
  • Как найти противолежащий угол в четырехугольника
  • Как найти телефон xiaomi если его украли
  • Как исправить дела на работе