Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поток и список. 
:(
    Опции темы
drMIG
Дата 9.3.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 23.2.2009

Репутация: 1
Всего: 1



В потоке производится получение дерева каталогов с телефона. Полученный список выводится на List. Естественно, перед выводом список надо очистить: frmBrowser.deleteAll().
Код

private void showCurrDir() {
      new Thread(new Runnable() {
      public void run() {
          try{
        frmBrowser.deleteAll();
        Enumeration e;
        FileConnection currDir = null;
        try {
            if (MEGA_ROOT.equals(currDirName)) {
                e = FileSystemRegistry.listRoots();
            } else {
                currDir = (FileConnection)Connector.open("file://localhost/" + 
                            currDirName);
                e = currDir.list();
                frmBrowser.append(UP_DIRECTORY, null);
            }
                    
            while (e.hasMoreElements()) {
                String fileName = (String)e.nextElement();
                if (fileName.charAt(fileName.length()-1) == SEP) {
                    // Каталог
                    frmBrowser().append(fileName, null);
                } else {
                    // Файл
                    frmBrowser().append(fileName, null);
                }
            }        
            if (currDir != null) {
                currDir.close();
            }
            frmBrowser.setTitle(currDirName);
            } catch (IOException ioe) {
            ioe.printStackTrace();
        }  
          }
          catch (Exception ex)
          {System.out.println(ex.toString());}
       }
                   }).start();   
        
    }


Эта функция выводит список файлов и папок из выбранного каталога. На эмуляторе всё работает прекрасно. На телефоне тоже, но только для двух папок, т.е открывается корневой элемент, отображаются его вложенные папки, а при выборе одной из них список вложенных файлов и папок отображается, но невозможно выбрать ни один из этих элементов. При этом если закоментировать   frmBrowser.deleteAll(); то всё будет работать для любой глубины вложенности, просто не будут удаляться предыдущие отображенные каталоги. Что-то мне подсказывает, что это связано с тем, что я недопонимаю принципы работы потоков в Java2ME.

Это сообщение отредактировал(а) drMIG - 9.3.2009, 22:34
PM MAIL   Вверх
W0LF
Дата 10.3.2009, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



потому, как мне кажеццо,  currDirName по ходу ссылается на выделенный элемент из списка. в смысле берется выделенный элемент, у него берется getText или просто getSelectedValue() уже не помню, а так как элемента нет после frmBrowser.deleteAll(), то он равен null

И еще, создание потока занимает не мало времени. зачем каждый раз его создавать? можно переписать класс как-то так:
Код

public class MyCurrentClass implements Runnable {
    public static final Object monitor = new Object();
    String currDirName = null;
    Thread myThread;

    public MyCurrentClass() {
        Thread myThread = new Thread(this);
        myThread.start();
    }

    private synchronized void showCurrDir(String currDirName) {
        this.currDirName = currDirName;
        monitor.notify();
    }


    public synchronized void run() {
        while (true) {
            try {
                //вместо if лучше юзать while до 5 джавы вроде как иногда 
                // самопроизвольно может запуститься, де-то я такое слышал.
                while (currDirName == null) {
                    monitor.wait();
                }

                if (currDirName == null) {
                    break;
                }

                frmBrowser.deleteAll();
                Enumeration e;
                FileConnection currDir = null;


                if (MEGA_ROOT.equals(currDirName)) {
                    e = FileSystemRegistry.listRoots();
                } else {
                    currDir = (FileConnection) Connector.open("file://localhost/" +
                            currDirName);
                    e = currDir.list();
                    frmBrowser.append(UP_DIRECTORY, null);
                }

                while (e.hasMoreElements()) {
                    String fileName = (String) e.nextElement();
                    if (fileName.charAt(fileName.length() - 1) == SEP) {
                        // Directory
                        frmBrowser().append(fileName, null);
                    } else {
                        // File
                        frmBrowser().append(fileName, null);
                    }
                }
                if (currDir != null) {
                    currDir.close();
                }
                frmBrowser.setTitle(currDirName);

            }
            catch (IOException ioe) {
                ioe.printStackTrace();
            }
            catch (Exception ex) {
                System.out.println(ex.toString());
            }

        }
    }

    public synchronized void stopThread() {
        currDirName = null;
        monitor.notify();
        
    }


Это сообщение отредактировал(а) W0LF - 10.3.2009, 02:31


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.