IllegalMonitorStateException: объект не заблокирован потоком перед wait (), используя синхронизированный метод stati c - PullRequest
0 голосов
/ 22 января 2020

Я уже читал об этом вопросе, но мой случай, по-моему, отличается: IllegalMonitorStateException при вызове wait ()

Я использую java в Android студии. Я получаю следующее сообщение об ошибке:

MiniatureAnnotations: Problem annotating via GMS.
    java.lang.IllegalMonitorStateException: object not locked by thread before wait()
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:422)
        at jaw.a(PG:20)
        at hnt.b(PG:115)
        at com.google.android.apps.messaging.shared.datamodel.action.GenericWorkerQueueAction.b(PG:81)
        at eqs.run(PG:1)
        at yya.run(PG:3)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at yws.run(PG:4)
        at java.lang.Thread.run(Thread.java:764)

Я не использую блокировку объекта, но синхронизировал метод. Например:

public synchronized static boolean send(Repository repository, Context context) {
   //  code... [I do not use wait or notify]
}

или:

 public static synchronized void checkWorkers(Context context) {
        WorkManager workManager = WorkManager.getInstance(context);
        ListenableFuture<List<WorkInfo>> senderWorker = workManager.getWorkInfosByTag(tagSenderWorker);
        if (senderWorker.isCancelled()) {
            PeriodicSmsWorker.initializePeriodicSmsWorker(context, REPLACE_POLICY);
            updateCheckSenderWorker();
    } else if (System.currentTimeMillis() - LAST_CHECK_SENDER_WORKER > MAX_TIME_WORKER_INACTIVE) {
        updateCheckSenderWorker();
        PeriodicSmsWorker.initializePeriodicSmsWorker(context, REPLACE_POLICY);
    }
}

Почему я получаю IllegalMonitorStateException, если я не использую wait или notify?

Edit1: отключить Dexguard на основании: Как отключить Dexguard?

в приложении gradle:

buildTypes {
        release {
            //minifyEnabled false
            minifyEnabled rootProject.ext.enableDexGuardPlugin
            //proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
dependencies {
    ...
    apply plugin: 'com.android.application'
    if(rootProject.ext.enableDexGuardPlugin) {
        apply plugin: 'dexguard'
    }
}

проект gradle:

 ext {
        roomVersion = '2.2.0-beta01'
        archLifecycleVersion = '2.2.0-alpha03'
        coreTestingVersion = "2.1.0-rc01"
        enableDexGuardPlugin = false
    }

Однако у меня такая же ошибка.

1 Ответ

3 голосов
/ 22 января 2020

Оскорбительный вызов wait() производится по методу jaw.a. Если вы не можете найти его настоящее имя, отключите DexGuard, пересоберите и снова запустите ваше приложение. Трассировка стека должна показывать точное место, где вызывается wait() без synchronized.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...