Заставить Мидлет J2ME спать без ниток? - PullRequest
0 голосов
/ 20 июня 2009

Быстрый вопрос ... Используя J2ME (CLDC 1.1, MIDP-2.1), можно ли перевести Мидлет на некоторое время (без использования потоков) ... Например:

public class myMidlet extends MIDlet{
    public void startApp() {
        /* Sleep for 10 seconds */

        /* The answer was: */
        try {
            Thread.sleep(time_ms);
        } catch (Exception e) {}
    }
...

Я не очень часто использую Java и не хочу программировать потоки просто для сна.

Заранее спасибо

Краткое содержание ответа

Мое отсутствие знаний Java. Примеры, которые я видел с помощью Thread.sleep (), привели меня к мысли, что его можно использовать только в объекте потока, созданном Мидлетом, а не в самом мидлете. Я не хотел разбивать логику мидлета на поток, чтобы усыпить его ... Но теперь я знаю, что мидлет работает в потоке по умолчанию :) Собираюсь найти ту книгу по Java, которую я никогда не читал, потому что я этого не делал. Не думаю, что я буду использовать язык когда-либо

Ответы [ 4 ]

6 голосов
/ 20 июня 2009

Я не понял, подразумеваете ли вы перевод мидлета в состояние паузы или просто остановку выполнения на указанное время.

Если это последнее, на самом деле я не понимаю, почему вы не хотите использовать потоки, это не страшно. Вы просто вставляете три следующие строки, где вам нужно:

try {
    Thread.sleep(10000);
} catch (Exception ex) {}

Вот и все, ничего сложного.

2 голосов
/ 20 июня 2009

Я не знаю точного ответа, но я также не понимаю, в чем заключается проблема с вызовом статического метода Thread.sleep (миллисекунды), который "заставляет текущий выполняющийся поток спать (временно прекращать выполнение) для указанного числа миллисекунд ". Вы называете это потоками программирования?

1 голос
/ 20 июня 2009

Я бы выбрал подход Малкольма, поскольку ваш поток может выдать исключение.

[...] и не хочу программировать темы просто [...]

Ох, вам будет сложно программировать J2ME и пытаться избежать многопоточного программирования. Если ваше приложение становится немного сложнее, особенно при использовании сетевых подключений, вам придется использовать потоки. Более того, если какая-либо операция занимает более 2-3 секунд, настоятельно рекомендуется запустить ее в отдельном потоке, возможно (одновременно), уведомив пользователя о текущей работе.

Кстати, что я забыл. Я недавно написал приложение J2ME для университетского курса. Там я построил то, что я назвал «ExecutableTask», что позволило мне обрабатывать потоки удобным и простым способом. Если вы хотите, чтобы посмотрел на источник ... К сожалению, вы не можете просмотреть его онлайн в репозитории Google из-за какой-то ошибки в решении хостинга Google (какое-то название моего проекта, по моей причине). *

0 голосов
/ 27 июня 2009

Вы можете попробовать использовать Object.wait(), Object.wait(long timeoutValue). Хотя я бы не советовал вам пытаться отложить основной запуск startApp () / системный поток.

...