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

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

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

Добрый день. Ошибка при работе с файловой системой виндовс. Приложение по типу файлового менеджера. Открытие папок работает при двойном клике но для системных директорий (Мой компютер, библиотеки итд) выскакивает нул поинтер ексепшн.
 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(); 
                                            
                                        }
                    
                                }                   
                        }

                });
((FileTableModel)table.getModel()).getFile(row) - путь к файлу в выбранной строке таблицы. Заранее благодарен

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

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();
    }
}

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


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

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

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