BlackBerry загружает файл - PullRequest
       9

BlackBerry загружает файл

1 голос
/ 08 декабря 2011

У меня есть приложение Blackberry, которое загружает файл из Интернета. Иногда загрузка завершается успешно, а иногда - где-то посередине. Это только кажется проблемой на устройстве Curve 9360. Когда происходит сбой, на устройстве оно закрывает мое приложение и показывает всплывающее окно с надписью

"Uncaught exeception Application [MyApp] не отвечает; процесс прекращено "

это цикл while, в котором он находится при сбое:

 byte data[] = new byte[1024];

         try {
            while ((count = is.read(data)) != -1) {
                 total += count;
                 progress = (int)(total*100/lengthOfWebFile);
                 if(model.getValue() < progress){
                     UiApplication.getUiApplication().invokeLater(new Runnable()
                     {
                         public void run()
                         {
                             EmbeddedMediaScreen.this.model.setValue(progress);
                         }
                     });
                 }
                 //write this chunk
                 os.write(data, 0, count);              
             }
        } catch (Exception e) {

            e.printStackTrace();
        }

Я не получаю никакой трассировки стека в консоли, когда это происходит. Я получаю следующее:

[710.328] Application BBCurve9360DemoLoop(314) is not responding; process terminated
[710.328] 
[710.429] [0 0]
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
.[lots more "0 2"s]
.
.
.
[710.429] 2 203
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
[710.429] 0 2
.[lots more "0 2"s
.
.

Кто-нибудь сталкивался с чем-то подобным во время программной загрузки файла на устройство Blackberry?

Может ли кто-нибудь увидеть в моем цикле ввода-вывода что-нибудь, что могло бы вызвать такой тип сбоя?

И, наконец, кто-нибудь знает, есть ли какой-нибудь способ, которым я могу получить фактическую трассировку стека любого генерируемого исключения?

Ответы [ 2 ]

2 голосов
/ 08 декабря 2011

Чтобы напечатать трассировку стека, вы должны ловить throwable вместо исключения.Мой вывод основан на примечании RIM, приведенном ниже

Примечание по внедрению RIM Только неперехваченные исключения имеют следы стека.Виртуальная машина проверяет текущий стек перехвата и, если она находит что-то, что перехватит исключение, она удаляет трассировку стека, чтобы сэкономить время и память.Любой код в текущем стеке, такой как catch (Exception e), исключает трассировку стека.Если исключение никогда не перехватывается, генерируется трассировка стека. Трассировка стека также генерируется при наличии такого кода, как catch (Throwable t).

Также

Вы получаетесообщение «процесс завершен», если цикл while не заканчивается и цикл непрерывно помещает в поток событий запускаемые объекты.Попробуйте избавиться от invokeLater () и посмотрите, завершится ли ваш процесс.

1 голос
/ 08 декабря 2011

Попробуйте добавить Thread.yield() после os.write(). Это даст возможность другим потокам запускаться и остановит JVM от остановки вашего приложения.

...