在我的 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;
}
所以 *problem 行在完成之前返回对象,因此它为空。