在我的j2me JAVA應用程序中有一個線程,它初始化一個對象,我必須通過返回它的值來獲取其他類。返回在線程中更改/初始化的值
在我的主要類中,我之後調用線程,我必須得到在Thread中被更改的值,但問題是線程完成之前調用該函數並返回null並且程序沒有更進一步處理。
我所做的就是將返回的值等待,直到布爾狀態在線程內沒有變爲真,但是因爲while循環它掛在那裏並且不會回來。
我發佈了下面的代碼讓我知道最好的解決方案,請記住這個代碼是在J2ME(Java)中,即使對於線程也具有有限的功能,因此不建議像Latch或BackgroundWorker這樣的方法,因爲它不起作用這裏。
這裏是線程等功能,HSA返回值
public synchronized void run() {
try {
contacts.removeAllElements();
pim = PIM.getInstance();
String lists[] = pim.listPIMLists(PIM.CONTACT_LIST);
for (int i = 0; i < lists.length; i++) {
//code for custom backup operation
if (customCode == 1 && i == 0) {
continue;
} else if (customCode == 0 && i > 0) {
continue;
}
clist = (ContactList) pim.openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE, lists[i]);
Enumeration cenum = clist.items();
while (cenum.hasMoreElements()) {
Contact c = (Contact) cenum.nextElement();
ContactDTO contact = new ContactDTO();
parseContactInfo(c, contact);
contacts.addElement(contact);
}
clist.close();
}
readComplete = true;
} catch (Exception e) {
}
}
//Return contacts loaded into vector list
public ContactVector getLoadedContacts() {
while(!readComplete){
Thread.sleep(100);
}
return contacts;
}
這是從哪兒我必須把這個
public ContactVector getContactVector() {
DeviceContactRetriever dcr = new DeviceContactRetriever(this, language);
dcr.start();
ContactVector vector = dcr.getLoadedContacts(); //problem line*
return vector;
}
所以*問題行主類在完成之前返回對象,因此它是空的。
'readComplete' - 它被聲明爲'volatile'嗎?因爲如果沒有,你可能會陷入困境 – gnat