Открытие файлов не работает с системными папками - Java
Формулировка задачи:
Добрый день.
Ошибка при работе с файловой системой виндовс. Приложение по типу файлового менеджера. Открытие папок работает при двойном клике но для системных директорий (Мой компютер, библиотеки итд) выскакивает нул поинтер ексепшн.
((FileTableModel)table.getModel()).getFile(row) - путь к файлу в выбранной строке таблицы.
Заранее благодарен
table.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { JTable table =(JTable) me.getSource(); Point p = me.getPoint(); int row = table.rowAtPoint(p); if (me.getClickCount() == 2) { System.out.println(((FileTableModel)table.getModel()).getFile(row)); if (((FileTableModel)table.getModel()).getFile(row).isDirectory()) { if (checkDisable.isSelected()) { File[] lFiles =((FileTableModel)table.getModel()).getFile(row).listFiles((FileFilter)HiddenFileFilter.HIDDEN); setTableData(lFiles); gui.repaint(); } else { File[] lFiles =((FileTableModel)table.getModel()).getFile(row).listFiles((FileFilter)HiddenFileFilter.VISIBLE); setTableData(lFiles); gui.repaint(); } } else { try { desktop.open(((FileTableModel)table.getModel()).getFile(row)); } catch(Throwable t) { showErrorMessage("No app associated with this filetype found","Failed to open file"); } gui.repaint(); } } } });
Решение задачи: «Открытие файлов не работает с системными папками»
textual
Листинг программы
class FileTableModel extends AbstractTableModel { private File[] files; private FileSystemView fileSystemView = FileSystemView.getFileSystemView(); private String[] columns = { "Icon", "File", "Path/name", "Size", "Last Modified", "Read", "Write", "Execute", "Directory", "File", }; FileTableModel() { this(new File[0]); } FileTableModel(File[] files) { this.files = files; } @Override public Object getValueAt(int row, int column) { File file = files[row]; switch (column) { case 0: return fileSystemView.getSystemIcon(file); case 1: return fileSystemView.getSystemDisplayName(file); case 2: return file.getPath(); case 3: return file.length(); case 4: return file.lastModified(); case 5: return file.canRead(); case 6: return file.canWrite(); case 7: return file.canExecute(); case 8: return file.isDirectory(); case 9: return file.isFile(); default: System.err.println("Logic Error"); } return ""; } @Override public int getColumnCount() { return columns.length; } @Override public Class<?> getColumnClass(int column) { switch (column) { case 0: return ImageIcon.class; case 3: return Long.class; case 4: return Date.class; case 5: case 6: case 7: case 8: case 9: return Boolean.class; } return String.class; } @Override public String getColumnName(int column) { return columns[column]; } @Override public int getRowCount() { return files.length; } public File getFile(int row) { return files[row]; } public void setFiles(File[] files) { this.files = files; fireTableDataChanged(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д