Открытие файлов не работает с системными папками - 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д