Frage

Ich möchte ein Servlet über ein J2ME-Midlet aufrufen, daher habe ich den HttpConnection-Code für die Servlet-URL geschrieben, um die GET-Methode aufzurufen.

Wenn Midlet-Suiten versuchen, eine Verbindung zur Servlet-URL herzustellen, wird im Emulator die folgende Meldung angezeigt,

{#MyMidlet} Midlet Suite wants to connect to {#Servlet URL} using air time,
  this may result in charges, Is it ok to use airtime ?

Wenn ich entweder auf Nein oder auf Ja klicke, ist nichts passiert, es wurde gerade aufgehängt, ich verwende EclipseME und SUN WTK 2.5.2.Und in der Konsole gab es eine Warnung,

Warning: To avoid potential deadlock, operations that may block, such as 
 networking, should be performed in a different thread than the 
 commandAction() handler.

Das heißt, wenn ich die HttpConnection in einem separaten Thread mache, wird das Problem gelöst?

War es hilfreich?

Lösung

Wenn ich die HttpConnection in einem separaten Thread mache, wird das Problem gelöst?

Wenn Sie es richtig machen - ja, das Problem wird gelöst.Dies ist ein typisches Problem und es gibt eine Standardlösung.

Die Warnung, auf die Sie sich beziehen, weist auf ein Entwurfsproblem in Ihrem Midlet hin.Sie haben eine "schwergewichtige" Aktivität (HTTP-Verbindung), die im selben Thread wie die Benutzeroberfläche ausgeführt wird, sie blockiert und unverantwortlich macht.

Vermeiden Sie eine hohe Belastung im UI-Ereignisthread.Wenn von etwas drinnen viel zu tun ist commandAction oder keyPressed oder pointerPressed etc, spawne einfach einen neuen Thread, um das zu tun.Um besser zu verstehen, warum das so ist, sollten Sie dieses Tutorial studieren, um herauszufinden, wie Sie es richtig machen:

Netzwerk, Benutzererfahrung und Threads

In diesem Artikel wird erläutert, wie Ihr MIDlet Netzwerkverbindungen herstellen kann, ohne Ihre Benutzeroberfläche zu beeinträchtigen.Es enthält sechs iterative Beispiele, die Multithread-Netzwerke und die Verwendung eines Wartebildschirms veranschaulichen...

  • Nach dem allerersten Beispiel im Tutorial (PrimitiveMidlet), gibt es sogar eine detaillierte Erklärung des aufgetretenen Problems:

    ...programmierer hat einen Systemthread für seine eigene langwierige Verarbeitung entführt.Das System ruft seine CommandAction () -Methode auf, wenn der Benutzer einen Befehl auswählt.Der Thread, der diese Methode aufruft, gehört zum System, nicht zum Entwickler.Dies wäre kein Verbrechen, wenn die Methode schnell ausgeführt würde, aber in diesem Fall kann die Netzwerkverbindung den Thread des Systems für eine lange Zeit blockieren.

    Bei der J2SE-Anwendungsprogrammierung und sogar bei der Servlet-Programmierung erstellt das System einen Thread für Sie und es gibt nur wenige Einschränkungen, wie lange Ihre Verarbeitung dauern kann.Die Regel des MIDlet-Threading ist einfach und streng:die einzigen Threads, die Ihnen gehören, sind die, die Sie selbst erstellen.

    In einem MIDlet schreiben Sie Code, den das System von einem seiner eigenen Threads aufruft.Wenn die Methoden startApp() , pauseApp(), destroyApp() und Event-Handler Ihres MIDlets aufgerufen werden, werden sie beispielsweise in einem Systemthread ausgeführt.Ihre Methoden müssen schnell zurückkehren, damit der Systemthread seine andere Arbeit fortsetzen kann.Jede Aufgabe, die nicht schnell erledigt werden kann, muss aus dem Thread des Systems verschoben werden.

    Diese Art der Programmierung kann gewöhnungsbedürftig sein, da Sie wirklich nur Code schreiben, der von den Threads des Systems aufgerufen wird.Wenn Sie jedoch eine andere GUI-Programmierung durchgeführt haben, ist diese Technik vertraut.AWT und Swing verfügen über einen Ereignisversand-Thread, der Betriebssystemereignisse verarbeitet und Ereignishandler in Ihrem Code aufruft.Die Regel ist die gleiche:Ereignishandler sollten schnell ausgeführt werden und die Steuerung an den Ereignisversandthread zurückgeben, damit der Rest der Schnittstelle nicht blockiert...

Weitere Codebeispiele im Tutorial zeigen, wie Designfehler wie oben behoben werden und wie die MIDlet-Benutzeroberfläche reibungslos mit Netzwerkaktivitäten zusammenarbeitet.

Andere Tipps

erstellt seine Verbindung als separates Thread so: generasacodicetagpre.



in J2ME Der Netzwerkbetrieb wird in einem separaten Thread gesetzt.
U Setzen Sie das Netzwerkmodul in ein separates Thread. Wenn Sie das Netzwerkmodul in separatem Thread setzen, wird die folgende Meldung nicht angezeigt. generasacodicetagpre.



in j2me (Sun / Oracle, der Eigentümer von J2ME ist) einiger Einschränkungen. Für die Sicherheit Einige APIs benötigen die Trusted Party-Zertifikate. Für diese ein paar Mobiltelefone bitten Benutzer zur Berechtigung, wenn der Benutzer auf Ja klickt, dann wird es erlaubt,Andernfalls erlaubt es nicht.
Die folgenden Schritte sind, dass einige der API unter diesen Szenarien stehen, die FileConnection (Lesen / Schreiben in Datei) API, HttpConnection, HTTPSConnection usw. sind.
u Überprüfen Sie Ihr Gerät, ob es sich um Selbst signiertes Zertifikat handelt. Wenn Sie Support bedeutet, verwenden Sie ein selbstsigniertes Zertifikat.
Die Trusted Party Certificate ist kostspielig. Mindestkosten sind Ruberes 10000 pro Jahr. Die folgenden sind einige vertrauenswürdige Anbieter Thawte, Verizon, Semantec usw.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top