2013-05-23 2 views
0

Я получаю NullPointerException каждый раз, когда я открываю файл-браузер, а затем закрываю его, не выбирая файл.NullPointerException при попытке доступа к файлу из JFileBrowser

@Override 
    public void actionPerformed(ActionEvent e) { 
     if(!(dndfolder.exists())) { 
      new File(homefolder + "DND").mkdir(); 
     } 
     browse = new JFileChooser(homefolder+"DND"); 
     returnVal = browse.showOpenDialog(loadchar); 
     browse.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     if(browse.getSelectedFile().exists()) { 
      sheet = browse.getSelectedFile(); 
     } 
     if(sheet.exists() && sheet.getName().endsWith(".txt")) { 
      if (Desktop.isDesktopSupported()) { 
       try { 
        Desktop.getDesktop().edit(sheet); 
       } catch (IOException ex) { 
        Logger.getLogger(panel.class.getName()).log(Level.SEVERE, null, ex); 
       } 
      } else { 
       error = "*I don't really know what to put here"; 
       repaint(); 
      } 
     } else { 
      error = "*File type not supported"; 
       repaint(); 
     } 
    } 

Я могу открыть текстовые файлы, но это не удается, если выбранный элемент не существует. Я попытался создать код вокруг него, но я не могу заставить его работать. Есть идеи?

+0

'Я пытался закодировать вокруг И что Оно деталь A.' точно вы пробовали? – Doorknob

ответ

1
if(browse.getSelectedFile().exists()) 

Если вы не выбрали файл, то browse.getSelectedFile() вероятно возвращает null, но вы идете вперед и называть exists() на нем.

Вы должны сделать что-то вроде:

if (browse.getSelectedFile != null && browse.getSelectedFile().exists()) 
+0

может это исправить тогда if (browse.getSelectedFile()! = Null) –

+0

Я только что отредактировал свой ответ. Попробуй это. –

+0

Что делать, если пользователь отменяет функцию 'JFileChooser', но по какой-то причине выбранный файл все еще возвращается ... это поведение не определено. Результатом будет выполнение действия над файлом, который пользователь сказал, чтобы отменить! В первую очередь было бы лучше использовать 'JFileChooser'. –

1

Вы не используете JFileChooser правильно. Возвращаемое значение говорит вам, если пользователь отменил или нет, вы должны проверить, что ...

if(returnVal == JFileChooser.APPROVE_OPTION) { 
    File selectedFile = browse.getSelectedFile(); 
    // Do file stuff here, and nowhere else. 
} 

Кроме того, returnVal = browse.showOpenDialog(loadchar);, блоки до тех пор, пока пользователь не делает что-то, так что, когда вы звоните, browse.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);, после этого, он делает ничего. Это происходит потому, что он меняет только режим выбора после окно закрыто и ушло.

Возможно, вы выиграли бы от этого учебника: http://docs.oracle.com/javase/tutorial/uiswing/components/filechooser.html

+0

Я использовал документацию. я просто отбил его, когда я попытался поместить все это в actionlistener. теперь я работаю с открытой кнопкой, но теперь, когда я закрываю файл выбора, я не могу повторно открыть его в том же экземпляре панели. –

+0

Обновите код в своем вопросе, чтобы отразить новый, скорректированный код, а затем мы можем продолжить работу над этой проблемой. –

+0

+1 для правильного использования JFileChooser, а не только обходной путь. @NolanGormley, если вам нужен учебник для новичков, попробуйте эту статью: http://www.thepcwizard.in/2013/05/complete-guide-to-jfilechooser.html – ThePCWizard

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