Открытие файлов не работает с системными папками - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день. Ошибка при работе с файловой системой виндовс. Приложение по типу файлового менеджера. Открытие папок работает при двойном клике но для системных директорий (Мой компютер, библиотеки итд) выскакивает нул поинтер ексепшн.
Листинг программы
  1. table.addMouseListener(new MouseAdapter()
  2. {
  3. public void mousePressed(MouseEvent me)
  4. {
  5. JTable table =(JTable) me.getSource();
  6. Point p = me.getPoint();
  7. int row = table.rowAtPoint(p);
  8. if (me.getClickCount() == 2)
  9. {
  10. System.out.println(((FileTableModel)table.getModel()).getFile(row));
  11. if (((FileTableModel)table.getModel()).getFile(row).isDirectory())
  12. {
  13. if (checkDisable.isSelected())
  14. {
  15. File[] lFiles =((FileTableModel)table.getModel()).getFile(row).listFiles((FileFilter)HiddenFileFilter.HIDDEN);
  16. setTableData(lFiles);
  17. gui.repaint();
  18. }
  19. else
  20. {
  21. File[] lFiles =((FileTableModel)table.getModel()).getFile(row).listFiles((FileFilter)HiddenFileFilter.VISIBLE);
  22. setTableData(lFiles);
  23. gui.repaint();
  24. }
  25. }
  26. else
  27. {
  28. try
  29. {
  30. desktop.open(((FileTableModel)table.getModel()).getFile(row));
  31. }
  32. catch(Throwable t)
  33. {
  34. showErrorMessage("No app associated with this filetype found","Failed to open file");
  35. }
  36. gui.repaint();
  37. }
  38. }
  39. }
  40.  
  41. });
((FileTableModel)table.getModel()).getFile(row) - путь к файлу в выбранной строке таблицы. Заранее благодарен

Решение задачи: «Открытие файлов не работает с системными папками»

textual
Листинг программы
  1. class FileTableModel extends AbstractTableModel {
  2.  
  3.     private File[] files;
  4.     private FileSystemView fileSystemView = FileSystemView.getFileSystemView();
  5.     private String[] columns = {
  6.         "Icon",
  7.         "File",
  8.         "Path/name",
  9.         "Size",
  10.         "Last Modified",
  11.         "Read",
  12.         "Write",
  13.         "Execute",
  14.         "Directory",
  15.         "File",
  16.     };
  17.  
  18.     FileTableModel() {
  19.         this(new File[0]);
  20.     }
  21.  
  22.     FileTableModel(File[] files) {
  23.         this.files = files;
  24.     }
  25.  
  26.     @Override
  27.     public Object getValueAt(int row, int column) {
  28.         File file = files[row];
  29.         switch (column) {
  30.             case 0:
  31.                 return fileSystemView.getSystemIcon(file);
  32.             case 1:
  33.                 return fileSystemView.getSystemDisplayName(file);
  34.             case 2:
  35.                 return file.getPath();
  36.             case 3:
  37.                 return file.length();
  38.             case 4:
  39.                 return file.lastModified();
  40.             case 5:
  41.                 return file.canRead();
  42.             case 6:
  43.                 return file.canWrite();
  44.             case 7:
  45.                 return file.canExecute();
  46.             case 8:
  47.                 return file.isDirectory();
  48.             case 9:
  49.                 return file.isFile();
  50.             default:
  51.                 System.err.println("Logic Error");
  52.         }
  53.         return "";
  54.     }
  55.  
  56.     @Override
  57.     public int getColumnCount() {
  58.         return columns.length;
  59.     }
  60.  
  61.     @Override
  62.     public Class<?> getColumnClass(int column) {
  63.         switch (column) {
  64.             case 0:
  65.                 return ImageIcon.class;
  66.             case 3:
  67.                 return Long.class;
  68.             case 4:
  69.                 return Date.class;
  70.             case 5:
  71.             case 6:
  72.             case 7:
  73.             case 8:
  74.             case 9:
  75.                 return Boolean.class;
  76.         }
  77.         return String.class;
  78.     }
  79.  
  80.     @Override
  81.     public String getColumnName(int column) {
  82.         return columns[column];
  83.     }
  84.  
  85.     @Override
  86.     public int getRowCount() {
  87.         return files.length;
  88.     }
  89.  
  90.     public File getFile(int row) {
  91.         return files[row];
  92.     }
  93.  
  94.     public void setFiles(File[] files) {
  95.         this.files = files;
  96.         fireTableDataChanged();
  97.     }
  98. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут