Открытие файлов не работает с системными папками - 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();
}
}