私のj2me Javaアプリには、オブジェクトを初期化するスレッドがあり、その直後に他のクラスの値を返すことによって取得する必要があります。
その直後にスレッドを呼び出すメインクラスでは、スレッドで変更された値を取得する必要がありますが、スレッドが完了する前に関数が呼び出され、null が返され、プログラムが続行されないという問題が発生します。
私がしたことは、ブール値のステータスがスレッド内で真にならないまでその戻り値を待機させることでしたが、そのため while ループがそこにハングアップし、戻ってきません。
以下のコードを投稿して、最善の解決策を教えてください。このコードは J2me (Java) にあり、スレッドでも機能が制限されていることを覚えておいてください。
値を返すための Thread およびその他の関数を次に示します。
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 行は完了する前にオブジェクトを返すため、null になります。