如果不是发生异常或死循环的话,很有可能是serviceRepaints()造成的死锁,这时可以考虑采用以下方式做run
//#if NOKIA_S40E3
//@ if (s_isRunning)
//#else
while (s_isRunning)
//#endif
{
s_lTimeCur = System.currentTimeMillis();
repaint();
//#if NOKIA_S40E3
//@ Display.getDisplay(s_midlet).callSerially(this);
//#else
serviceRepaints();
//#endif
try
{
long dt = System.currentTimeMillis() - s_lTimeCur;
if (dt < FRAME_LIMIT)
Thread.sleep(FRAME_LIMIT - dt);
}
catch (Exception e)
{
}
}
//#if NOKIA_S40E3
//@ else
//#endif
{
s_midlet.destroyApp(true);
s_midlet = null;
}
//#if NOKIA_S40E3
//@ if (s_isRunning)
//#else
while (s_isRunning)
//#endif
{
s_lTimeCur = System.currentTimeMillis();
repaint();
//#if NOKIA_S40E3
//@ Display.getDisplay(s_midlet).callSerially(this);
//#else
serviceRepaints();
//#endif
try
{
long dt = System.currentTimeMillis() - s_lTimeCur;
if (dt < FRAME_LIMIT)
Thread.sleep(FRAME_LIMIT - dt);
}
catch (Exception e)
{
}
}
//#if NOKIA_S40E3
//@ else
//#endif
{
s_midlet.destroyApp(true);
s_midlet = null;
}
本文介绍了一种在特定环境下由serviceRepaints()引发的死锁现象及其解决方案。通过条件判断和循环控制,结合对系统时间的计算与线程睡眠控制,有效地避免了死锁的发生。

被折叠的 条评论
为什么被折叠?



