J2ME MIDlet Dual Thread zu Rückruf fehlgeschlagen
-
10-10-2019 - |
Frage
ok so ich dieses Setup bekam: ein midlet
Gui extends Midlet{
private static Gui instance;
protected void startApp() {
Display.getDisplay(this).setCurrent(MyForm.getInstance());
}
private static final Logger log = LoggerFactory.getLogger();
public static Datacheck getInstance() {
return instance;
}
public Gui() {
// Configure logging
}
protected void startApp() {
instance = this;
Display.getDisplay(this).setCurrent(MyForm.getInstance());
}
protected void pauseApp() {
}
protected void destroyApp(boolean bool) {
// Shutdown Microlog gracefully
LoggerFactory.shutdown();
notifyDestroyed();
}
public static void log(Level level, String message) {
log.log(level, message);
}
public void requestScreen(Form screen) {
log.info("request screen called");
Display.getDisplay(this).setCurrent(screen);
}
}
eine Form
MyForm extends Form{
private static MyForm instance;
public static MyForm getInstance() {
if (instance == null) {
instance = new MyForm();
}
return instance;
}
private Form(){
//start task
new Timer().scheduleAtFixedRate(new PollingService(CallsDialog.getInstance()), 0, UPDATE_INTERVAL);
//add gui elements ....
}
private void updateForm() {
//never gets executed
}
}
und ein Thread
MyThread implements Runnable{
private MyForm handle;
public PollingService(MyForm handle) {
this.handle = handle;
}
public void run() {
handle.updateForm();
}
}
so die midlet beginnt, setzt seine Form in eine Instanz MyForm erzeugt dann einen neuen Thread myform Dieser Thread soll eine Funktion des myform ruft alle 5 Sekunden
Dies ist ein stark vereinfachtes Beispiel für die reale Sache so bitte nicht den Faden Design ändern
Wenn ich jetzt eine Methode aus der „MyForm“ Klasse ausführen es wird nicht ausgeführt Ich bekomme keine Fehler
Wer weiß, was ich falsch mache?
Bearbeiten geändert, so erstellt es kein Thread (bereits durch Timertask geschehen)
Lösung
1) Sie brauchen keine separaten Thread erstellen Timertask auszuführen. Timer und Timertask Mechanismus enthält bereits Schaffung neuen Thread für jede Timertask Ausführung.
2) Können Sie Code bereitstellen, die mehr Realität hat? Es gibt keine MyThread Schöpfung in Ihrem Beispiel, noch starten () aufgerufen wird. Manchmal Fehler wird nur Methodenaufruf fehlt.