Я сделал проект с несколькими точками входа, где App2 настроен на автозапуск, а App1 запускается по запросу пользователя.Я пытаюсь вызвать глобальное событие из App1, полученное App2.
public class App2 implements GlobalEventListener {
static public int counter = 0;
public static final long countId = 0x1251402f595f81a5L;
public static final long eventId = 0xba4b84944bb7429eL;
private App2() {
Application.getApplication().addGlobalEventListener(this);
}
public static App2 waitForSingleton() {
counter = 2; // Added the counter in Runtime store in a similar way as
// added in eventOccured method
// Deleted some unuseful code
}
public void eventOccurred(long guid, int data0, int data1, Object object0,
Object object1) {
if (guid == eventId) {
callMethodOnOccuranceOfEvent();
}
}
public void callMethodOnOccuranceOfEvent() {
counter++;
RuntimeStore store = RuntimeStore.getRuntimeStore();
Object obj = store.get(countId);
if (obj == null) {
store.put(countId, new Integer(counter));
} else {
store.put(countId, new Integer(counter));
}
}
}
Затем в другом классе я попробовал как
public class App1 extends MainScreen {
public App1() {
}
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
menu.add(new MenuItem("Call", 20, 10) {
public void run() {
callMethodonclick();
}
});
}
public void callMethodonclick() {
ApplicationManager.getApplicationManager().postGlobalEvent(App2.eventId);
RuntimeStore store = RuntimeStore.getRuntimeStore();
Integer c = (Integer) store.get(App2.countId);
add(new RichTextField("Event Recived#counter#" + c));
}
}
Если я вызову событие три раза
Event Recived#counter#2
Event Recived#counter#2
Event Recived#counter#2
, покаОжидаемый результат -
Event Recived#counter#3
Event Recived#counter#4
Event Recived#counter#5
, который, как я предполагаю, предполагает, что объект для App2 в не null
, а eventOccurred никогда не вызывался.вывод ясно показывает, что callMethodonclick
не может опубликовать глобальное событие, даже если в конструкторе было добавлено globalEventListener
.