2012-07-23 3 views
2

Я создаю приложение Java Java, которое использует bluetooth.Невозможно изменить текущий Отображаемый с помощью setCurrent

Независимо от того, как я пытаюсь изменить текущий Displayable, он не меняется.

Мое приложение устанавливает текстовое поле под названием «устройства» как текущее, отображаемое при запуске, и меняю ток на список, называемый «devicelist» в методе другого класса.

Но когда я пытаюсь сменить текущий текст на текстовое поле (устройства), оно не изменяется.

Я попытался использовать экранный объект в классе мидлета, а также использовать gestDisplay в другом классе. Но объект List (deviceList) остается текущим.

обновление В моем тестировании, похоже, есть некоторые ошибки. TextBox (устройства) является текущим Отображаемым, но когда я проверяю isShown, он приходит как false. Вместо этого отображается другой отображаемый: List (deviceList) при тестировании с isShown. Хотя спецификации api показывают, что эффект метода setCurrent не является непосредственным, текущее значение Displayable изменяется, но оно не отображается на экране. И это происходит как в реальном устройстве, так и в эмуляторе.

+2

если вы правильно получить объект Display в случае вашего класса MIDlet, в StartApp - то setCurrent должно делать то, что вы ожидаете. Ваша проблема в том, что в вашем коде есть ошибки. Добавляйте журналы, проверяйте, изучайте журналы, когда что-то идет не так, добавьте больше протоколирования и повторного тестирования, пока вы не избавитесь от ошибок. – gnat

+0

да, вот как я узнал, что текущий не меняется. И также я не вижу никаких исключений. лучший способ создания журналов, за исключением того, что что-то печатает в текущем.? Извините, я новичок в форуме. Должен ли я отправить код здесь? –

+1

, если вы протестируете эмулятор, самый простой способ - использовать 'System.out.println' для отслеживания выполнения мидлета в консоли. Существуют также различные библиотеки журналов для Java ME, которые стоит рассмотреть для тестирования с помощью реальных устройств, но для эмулятора system.out.println просто отлично – gnat

ответ

1

Вы нашли одну правую часть спецификации, но не все из них - вот почему вы в замешательстве.

Ваше понимание того, что эффект метода setCurrent не является непосредственным составляет 100% право на самом деле, это то, что API Javadocs указать, OK:

  • Display.setCurrent(Displayable):

    ... Изменение обычно не вступают в силу немедленно. Он может задерживаться, так что это происходит между вызовами метода доставки событий, хотя это не гарантируется, прежде чем будет вызван следующий метод доставки событий. Метод setCurrent() возвращает немедленно, не дожидаясь изменения, чтобы иметь место ...

Теперь ваше внимание, что ток Displayable меняется, но это не показано заставляет меня чувствовать, что вы используете getCurrent и ожидать он надежно скажет, когда отображается экран. Это не так, посмотрите на API Docs:

  • Display.getCurrent():

    Получает текущий Displayable объект для этого мидлета ... Возвращаемый объект не может быть на самом деле видно .. . Метод Displayable.isShown() может быть вызван, чтобы определить, действительно ли отображаемый отображается на дисплее.

Таким образом, простой ответ, скорее всего, будет использовать isShown() (вместо getCurrent), чтобы узнать, когда станет видимым экран. Хотя ...

... факт, что вы испытываете задержки и особенно это происходит даже на эмуляторе, заставляет меня чувствовать, что в вашем мидле может быть проблема с дизайном.Я бы сильно рекомендую проверить, есть ли какие-то «тяжеловесные» действия, которые вы запускаете в том же потоке, что и пользовательский интерфейс, блокируя его и делая его безответственным.

Избегайте большой нагрузки в потоке событий пользовательского интерфейса. Когда есть что-то делать внутри commandAction или keyPressed или pointerPressed и т. Д., Просто создайте новый поток, чтобы сделать это. Если вы обнаружите, что это имеет место в вашем мидлет, рассмотреть вопрос об изучении этого учебника, чтобы узнать, паклю, чтобы сделать это правильно:

  • Networking, User Experience, and Threads

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

Смежные вопросы