对于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引用的属性)
- 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引用的属性)
为什么会发生这种情况?事实是,监视器对象肯定不是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停留在同步语句.即使我删除了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
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 "Reference Handler" java.lang.IllegalMonitorStateException
Exception in thread "Reference Handler" java.lang.IllegalMonitorStateExceptionat 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 "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)的相关信息,可以在本站进行搜索。
本文标签: