Domanda

Voglio chiamare un servlet da J2ME Midlet, quindi ho scritto il codice httpconnection per l'URL del servlet per chiamare il metodo di ricezione.

Quando Midlet Suites tenta di connettersi all'URL del servlet, ho il messaggio sotto nell'emulatore,

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

Se clicco né no o sì, non è successo nulla, è appena andato impiccato, sto usando Eclipseme e Sun WTK 2.5.2.E nella console c'era un avvertimento,

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

Il che significa che, se faccio rendendo il httpconnection in un thread separato, sarà risolto il problema?

È stato utile?

Soluzione

.

Se faccio il httpconnection in un thread separato, sarà risolto il problema?

Se lo fai bene - Sì, il problema sarà risolto. Questo è un problema tipico e c'è una soluzione StandAtd.

Avvertenza Si riferisce a indica il problema di progettazione nel midlet. Hai attività "pesante" (collegamento HTTP) che viene eseguito nello stesso thread dell'UI, bloccandolo e rendendolo irresponsabile.

Evitare il carico pesante nel filo evento dell'interfaccia utente. Quando c'è molto da fare di qualcosa all'interno di commandAction o keyPressed o pointerPressed ecc., Busy ha appena generato un nuovo filo per farlo. Per capire meglio perché, considera che studia questo tutorial per scoprire come farlo bene:

Networking, esperienza utente e fili

.

Questo articolo spiega come il tuo midlet può creare connessioni di rete senza compromettere l'interfaccia utente. Comprende sei esempi iterativi che illustrano la rete multithreading e l'uso di uno schermo di attesa ...

  • Dopo il primo esempio nel tutorial (PrimitiveMidlet), c'è anche una spiegazione dettagliata del problema che stai vivendo:

    .

    ... Il programmatore ha dirottato un filo di sistema per la sua lunga lavorazione. Il sistema chiama il suo metodo di comando () quando l'utente seleziona un comando. Il thread che chiama questo metodo appartiene al sistema, non allo sviluppatore. Questo non sarebbe un crimine se il metodo eseguito rapidamente, ma in questo caso, la connessione di rete potrebbe farsi un thread del sistema per un lungo periodo di tempo.

    Nella programmazione dell'applicazione J2SE e anche nella programmazione del Servlet, il sistema crea un thread per te e ci sono poche restrizioni su quanto tempo può prendere la tua elaborazione. La regola del threading Midlet è semplice e rigorosa: gli unici thread che appartengono a voi sono quelli che crei te stesso.

    In un Midlet, stai scrivendo il codice che il sistema chiamerà da uno dei propri thread. Quando i metodi StartApp (), PauseApp (), DestroyApp (), PauseApp (), DestroyApp () e il gestore di eventi sono chiamati, ad esempio, vengono eseguiti all'interno di un thread di sistema. I tuoi metodi devono tornare rapidamente in modo che il thread del sistema possa continuare il suo altro lavoro. Qualsiasi compito che non può essere completato rapidamente deve essere spostato dal filo del sistema.

    Questo stile di programmazione potrebbe prenderne un po 'di abituarsi, poiché si sta solo scrivendo solo il codice che viene chiamato dai fili del sistema. Se hai fatto qualsiasi altra programmazione GUI, tuttavia, questa tecnica sarà familiare. AWT e SWING hanno un thread di spedizione per eventi che gestisce gli eventi del sistema operativo e chiama i gestori di eventi nel codice. La regola è la stessa: i gestori di eventi dovrebbero eseguire rapidamente e restituire il controllo al thread di spedizione degli eventi in modo che il resto dell'interfaccia non blocchi ... Ulteriori esempi di codice nel tutorial Mostra come correggere gli errori di progettazione come sopra e come rendere l'interfaccia utente MIDLALT interfaccia integralmente interoperabile con le attività di rete.

Altri suggerimenti

Crea la sua connessione come filettatura separata come questa:

Thread myConnection = new Thread(new Runnable() {

        public void run() {
            // TODO open connection here


            HttpConnection conn = null;

            try {

                        conn = (HttpConnection) Connector.open(serverURL,
                                Connector.READ_WRITE, true);

                        conn.setRequestMethod(HttpConnection.GET); // or POST method

                    } catch (Exception e) {

                // TODO: handle exception

            } finally {

                // close connection here
            }

        }
    });
    myConnection.start();
.


In J2ME L'operazione di rete è messa in thread separato.
U Posizionare il modulo di rete in un thread separato. Se inserire il modulo di rete in thread separato, il seguente messaggio non viene visualizzato.

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


in J2ME (Sun / Oracle Chi è il proprietario di J2ME) dà alcuni limiti. Per la sicurezza Alcuni API hanno bisogno dei certificati di partito fidati. Per questo alcuni cellulari chiedono all'utente il permesso quando l'utente fa clic su Sì, lo consentirà, lo consentiràaltrimenti non lo consentirà.
Di seguito sono riportati alcuni degli API in questo gli scenari sono il fileconnection (lettura / scrittura a file) API, httpConnection, httpSconnection, ecc.
U Controlli il tuo dispositivo Se è supportato certificato auto-firmato. Se è il supporto dei supporti Utilizzare il certificato auto-firmato.
Il certificato di fidato di fidato è costoso. I costi minimi sono rupppees 10000 all'anno. I seguenti sono alcuni venditori di partito fidati di Thawte, Verizon, Semantec, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top