GVKun编程网logo

java.lang.IllegalMonitorStateException:(m = null)无法获取监视器(无法获取null引用的属性)

10

对于java.lang.IllegalMonitorStateException:感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍m=null无法获取监视器,并为您提供关于Android:jav

对于java.lang.IllegalMonitorStateException:感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍m = null无法获取监视器,并为您提供关于Android:java.lang.IllegalMonitorStateException:对象在wait()之前没有被线程锁定、driver.wait()抛出IllegalMonitorStateException、Exception in thread "Reference Handler" java.lang.IllegalMonitorStateException、Exception in thread "Thread-1" java.lang.IllegalMonitorStateException at java.lang.Object.notifyAll(Native Method)的有用信息。

本文目录一览:

java.lang.IllegalMonitorStateException:(m = null)无法获取监视器(无法获取null引用的属性)

java.lang.IllegalMonitorStateException:(m = null)无法获取监视器(无法获取null引用的属性)

为什么会发生这种情况?事实是,监视器对象肯定不是null,但仍然经常会遇到此异常:

java.lang.IllegalMonitorStateException: (m=null) Failed to get monitor for (tIdx=60)        at java.lang.Object.wait(Object.java:474)        at ...

引发此问题的代码是一个简单的池解决方案:

    public Object takeObject() {        Object obj = internalTakeObject();        while (obj == null) {            try {                available.wait();            } catch (InterruptedException e) {                throw new RuntimeException(e);            }            obj = internalTakeObject();        }        return obj;    }    private Object internalTakeObject() {        Object obj = null;        synchronized (available) {            if (available.size() > 0) {                obj = available.keySet().iterator().next();                available.remove(obj);                synchronized (taken) {                    taken.put(obj, Boolean.valueOf(true));                }            }        }        return obj;    }    public void returnObject(Object obj) {        synchronized (taken) {            taken.remove(obj);        }        synchronized (available) {            if (available.size() < size) {                available.put(obj, Boolean.valueOf(true));                available.notify();            }        }    }

我想念什么吗?

编辑 :例外发生available.wait();在行中。

答案1

小编典典

请参阅javadoc中的Object.wait。

特别是“当前线程必须拥有该对象的监视器。” 和“ [throws] IllegalMonitorStateException-
如果当前线程不是对象监视器的所有者。” 也就是说,您需要在要调用的对象上进行同步。

因此您的代码应为:

synchronized (available) {    available.wait();}

Android:java.lang.IllegalMonitorStateException:对象在wait()之前没有被线程锁定

Android:java.lang.IllegalMonitorStateException:对象在wait()之前没有被线程锁定

我有此代码为Android停留在同步语句.即使我删除了process1.wait(),我也捕捉到异常.对您有帮助吗?

 private class LongOperation extends AsyncTask<String, Void, String>
   {

      @Override
      protected String doInBackground(String... params)
      {
         try
         {
     Process process1 = new ProcessBuilder("sh", "/data/local/bin/tcpdump.sh").start();            
            synchronized(process1){
               process1.wait();
             }
         }
         catch (Exception e)
         {
            Log.e("Tcpdump function error", "Unable to capture the packets into the buffer");
         }
         return null;
      }

      /* (non-Javadoc)
       * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
       */
      @Override
      protected void onPostExecute(String result)
      {
         try
         {  
            StringBuffer output = new StringBuffer();
            File file = new File("/data/local/bin/dump.txt");
            BufferedReader br = new BufferedReader(new FileReader(file), 8 * 1024);
            String line;
            while ((line = br.readLine()) != null)
            {
               output.append(line + "\n");
            }
            tv.setText(output);
            setContentView(tv);
         }
         catch (Exception e)
         {
            e.printstacktrace();
         }
      }

      /* (non-Javadoc)
      * @see android.os.AsyncTask#onProgressUpdate(Progress[])
      */
     @Override
     protected void onProgressUpdate(Void... values)
      {

      }
}

tcpdump.sh有这一行
tcpdump -c 10> /data/local/bin/dump.txt

解决方法:

您确定要调用Process.waitFor()吗?不是wait()?

driver.wait()抛出IllegalMonitorStateException

driver.wait()抛出IllegalMonitorStateException

wait(…)的所有变体都从以下代码引发以下异常。我究竟做错了什么?

java.lang.IllegalMonitorStateException    at java.lang.Object.wait(Native Method)    at java.lang.Object.wait(Object.java:485)    at LoginPage.main(LoginPage.java:29)try        {            driver.get("http://domain:port/coco/webapp/login/login.faces");            driver.findElement(By.id("clientCode")).sendKeys("coco");            driver.findElement(By.id("systemCode")).sendKeys("consumer");            driver.findElement(By.id("userId")).sendKeys("ffadmin");            driver.findElement(By.id("password")).sendKeys("password");            driver.findElement(By.className("af_commandButton")).click();            driver.wait();            Assert.assertTrue(driver.getPageSource().contains("Administration"));        }        catch (Exception e)        {            e.printStackTrace();        }

答案1

小编典典

wait如果您已使用获取了锁,则只能在该对象上使用synchronized

我不知道您是否 打算wait使用WebDriver 来使用-如果需要,则需要类似以下内容:

synchronized (driver){    driver.wait();}

但是,如果您正在等待某些事情发生,则很有可能会使用另一种方法。也许WebDriverWait吧?

Exception in thread

Exception in thread "Reference Handler" java.lang.IllegalMonitorStateException

Exception in thread "Reference Handler" java.lang.IllegalMonitorStateException
at java.lang.Object.notifyAll(Native Method)
at java.lang.ref.ReferenceQueue.enqueue(ReferenceQueue.java:73)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:171)

Exception in thread

Exception in thread "Thread-1" java.lang.IllegalMonitorStateException at java.lang.Object.notifyAll(Native Method)

-------------1-3-5-7-9-
11-13-15-17-19-2-4-6-8-10-12-14-16-18-20-Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.lang.Object.notifyAll(Native Method)
at test.MyTwoprintThread$2.run(MyTwoprintThread.java:66)
at java.lang.Thread.run(Unknown Source)

我们今天的关于java.lang.IllegalMonitorStateException:m = null无法获取监视器的分享就到这里,谢谢您的阅读,如果想了解更多关于Android:java.lang.IllegalMonitorStateException:对象在wait()之前没有被线程锁定、driver.wait()抛出IllegalMonitorStateException、Exception in thread "Reference Handler" java.lang.IllegalMonitorStateException、Exception in thread "Thread-1" java.lang.IllegalMonitorStateException at java.lang.Object.notifyAll(Native Method)的相关信息,可以在本站进行搜索。

本文标签: