日期:2014-05-20  浏览次数:20654 次

关于线程等待的问题,求高手解答
进来分类才发现java分了这么多分类,完全搞不懂,我就说我的问题好了,是jdk 1.3的。。。。。

简单的说,我的程序开新线程去读取网络数据,在读取之前要检查accesstoken的有效性,如果无效,需要在读取数据之前打开一个网页浏览器去进行手动授权,授权成功之后继续后边的读取数据操作,但是我的问题是,在新线程中打开网页浏览器,同时后边的代码也执行了,没有授权也就读取不了数据,程序逻辑上就出问题了,求高手解答一下如何等待网页浏览器关闭后继续后边的操作?

public void refreshAccessToken(boolean force) throws vDiskException
{
synchronized (UiApplication.getEventLock())
{
if (force) // || !isAccessTokenValid()) {
{
setAccessToken(null);
if (Application.isEventDispatchThread())
{
UiApplication.getUiApplication().pushModalScreen(new LoginScreen());
} else {
UiApplication.getApplication().invokeLater(new Runnable() {
public void run() {
UiApplication.getUiApplication().pushModalScreen(new LoginScreen());
}
});
}

if (!hasAccessToken()) {
throw new vDiskException("Unable to refresh the Access Token");
}
}
}
}


在pushModelScreen的同时,就抛出了"Unable to refresh the Access Token"错误
------解决方案--------------------
一定要用 1.3 ?

是 Swing 程序吗?

1.3 的模态 (modal) 是怎样工作的,不太清楚……

另外:

1 - 这个方法是在哪个线程调用的? 有没有可能是 EDT?
2 - 有没有要求方法必须是同步执行,即方法确保工作完成以后才返回?
3 - 那个 synchronized (UiApplication.getEventLock())是要确保什么?
------解决方案--------------------
那个锁的位置不是应该放在下面吗?