Почему J2ME Midlet Suite и httpConnection должны быть в разных потоках

StackOverflow https://stackoverflow.com//questions/11664355

Вопрос

Я хочу позвонить в сервлете от Midlet j2me, поэтому я написал код httpConnection для URL-адреса сервлета, чтобы позвонить с методом получения.

Когда Midlet Suites пытается подключиться к URL-адресу сервлета, у меня есть сообщение ниже в эмуляторе,

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

Если я нажму ни нет, либо да, ничего не произошло, он просто повешен, я использую Eclipseme и Sun WTK 2.5.2.И в консоли было предупреждение,

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

Это означает, что если я сделаю httpconnection в отдельном потоке, будет решена проблема?

Это было полезно?

Решение

Если я сделаю httpconnection в отдельном потоке, будет решена проблема?

Если вы сделаете это правильно - да, проблема будет решена. Это типичная проблема, и существует резервное решение.

Предупреждение Вы ссылаетесь на то, что указывает на проблему дизайна в вашей мидлет. У вас есть «тяжеловесная» активность (HTTP-соединение), которое работает в том же потоке, что и пользовательский интерфейс, блокируя его и делая его безответственно.

Избегайте тяжелой нагрузки в потоке мероприятия UI. Когда есть много для чего-то внутри генеракодицетагкода или генеракодицетагкода или генеракодицетагкод и т. Д., Просто порогите новую нить, чтобы сделать это. Чтобы лучше понять, почему, подумайте, что изучать этот урок, чтобы узнать, как это сделать правильно:

Сетевое, пользовательский опыт и темы

Эта статья объясняет, как ваша мидлет может сделать сетевые соединения без ущерба для вашего пользовательского интерфейса. Он включает в себя шесть итеративных примеров, которые иллюстрируют многопоточную сеть и использование экрана ожидания ...

  • После самого первого примера в руководстве (commandAction) есть даже подробное объяснение проблемы, которое вы испытываете:

    ... программист угнал системный нить для его собственной длительной обработки. Система вызывает его комментарий () методом, когда пользователь выбирает команду. Нить, которая вызывает этот метод, принадлежит системе, а не разработчику. Это не будет преступлением, если метод был быстрым, но в этом случае сетевое подключение может в течение длительного времени.

    в программировании приложений J2SE и даже в программировании сервлета система создает для вас нить, и есть несколько ограничений на то, как долго ваша обработка может принимать. Правило мидлет резьба проста и строго: единственные нити, которые принадлежат вам, - это те, которые вы создаете сами.

    в мидле, вы пишете код, который система позвонит от одной из собственных потоков. Когда Midlet's StartApp (), PAUSEAPP (), DENSTRAPP () и методы обработчика обработчиков событий называются, например, они работают внутри системного потока. Ваши методы должны быстро вернуться, чтобы система системной нити может продолжить свою работу. Любая задача, которая не может быть завершена, должна быть перемещена из темы системы.

    Этот стиль программирования может принять некоторое использование, так как вы действительно только записываете код, который вызывается из потоков системы. Однако если вы проделали какое-либо другое программирование GUI, этот метод будет знаком. У AWT и Swing есть поток диспетчерской событий, которая обрабатывает события операционной системы и вызывает обработчики событий в вашем коде. Правило одинаково: обработчики событий должны выполняться быстро и вернуть управление на тему отправку событий, чтобы остальная часть интерфейса не заблокирована ... Дальнейшие примеры кода в руководяще показывают, как исправить ошибки дизайна, как выше, и как сделать интерфейс пользователя Midlet с плавным взаимодействием с сетевыми действиями.

Другие советы

Создает его соединение как отдельный поток, как это:

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();
.


в j2me операция сети помещается в отдельной нити.
U Поместите модуль сетевого модуля в отдельной теме. Если вы поместите модуль сетевого модуля в отдельной резьбе, то следующее сообщение не отображается.

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


в j2me (Sun / Oracle, который является владельцем J2ME), дает некоторые ограничения. Для обеспечения безопасности некоторые необходимые доверенные партийные сертификаты. Для этого некоторые мобильные телефоны задают возможность разрешения, когда пользователь нажимает да, то он позволит,В противном случае это не позволит.
Ниже приведены некоторые из API, приводится под эти сценарии - это FileConnection (чтение / запись в файл) API, httpConnection, httpsConnection и т. Д.
Вы проверяете ваше устройство, будь то поддержка самостоятельно подписанного сертификатом. Если поддерживается означает, что вы используете самостоятельный сертификат.
Сертификат доверенного вечеринка дорого. Это дорого. Это минимальная стоимость Ruppee 10000 в год. Ниже приведены некоторые доверенные поставщики партии Thawte, Verizon, Semantec и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top