Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > получение иконки файла пол linux


Автор: Atum 13.4.2010, 15:32
Добрый день 

есть такой вот код под OS Window

Код


  JFrame frame = new JFrame("CustomIconDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setLocationRelativeTo(null);

        File file = new File("E:\\Project1.dll");

        ShellFolder sf = ShellFolder.getShellFolder(file);


        Icon icon32x32 = new ImageIcon(sf.getIcon(true));

        JButton btn = new JButton(icon32x32);
        frame.add(btn);
        frame.setVisible(true);

 

который возвращает  иконку 32 на 32 

файла или папки 

   File file = new File("E:\\Project1.dll");

но ShellFolder   sf.getIcon(true)  под linux возвращает null


вопрос : как получить иконку файла под linux ?

Автор: jk1 13.4.2010, 16:35
Видимо стоит указать правильный путь к файлу вместо E:\\Project1.dll

Автор: Atum 13.4.2010, 16:44
Цитата(jk1 @ 13.4.2010,  16:35)
Видимо стоит указать правильный путь к файлу вместо E:\\Project1.dll

Это пример под Window 

можно было записать E:\\TMP

где TMP - это папка 

соответственно под linux у меня идут правильные пути  для примера возьмите любой файл (папку) /home и т.д.

Автор: jk1 13.4.2010, 17:31
Код

Icon icon = new ImageIcon("путь к файлу")

При правильном указании пути работает под всеми осями. Что касается ShellFolder, то этот странный недокументированный класс может отсутствовать на некоторых JVM и в целях совместимости использовать его не стоит.

Автор: Atum 14.4.2010, 10:16
Хорошо Уточню свой вопрос - как мне получить Иконку файла или Папки под Linux ( у меня сейчас есть Solaris и Ubuntu  )


Автор: jk1 15.4.2010, 11:41
Под Linux (пробовал под Fedora) работает такой фокус
Код

Icon icon = FileSystemView.getFileSystemView().getSystemIcon(new File("/home/jk/log.xml"));

Автор: Atum 15.4.2010, 16:51
Цитата(jk1 @ 15.4.2010,  11:41)
Под Linux (пробовал под Fedora) работает такой фокус
Код

Icon icon = FileSystemView.getFileSystemView().getSystemIcon(new File("/home/jk/log.xml"));

Спасибо , но это решение я знаю - оно немного мне не подходит и вот почему : 

Возвращается иконка не операционной системы  , а java 
для примера возьмите и укажите в пути папку
 - и посмотрите как отображается иконка папки в системе её - цвет , размер и т.д. 

и то что вернется в icon  - вернется иконка java из java tree ...с размером  16 на 16 

, а мне надо 32 на 32 (ну или тот размер который стоит в системе сейчас).





Автор: Amp 15.4.2010, 18:27
В файловом менеджере muCommander на этот счет заморачиваться не стали и предоставили в настройках выбор - либо программа использует свой набор иконок, либо то, что возвращает java (т.е. в линуксе оно ничего вразумительного не возвращает). 

Из отвязанных от каких-то специфических библиотек и api вариантов решения проблемы вижу следующее: определение текущей темы иконок в системе (наверное это требует различных действий для разных десктоп-менеджеров). Далее по пути /usr/share/icons/<имя темы>/ извлекаются иконки в соответствии с требуемым размером и mimetype-ом. Костыли, как они есть.

Информация отсюда может чем-то поможет - http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html

Автор: Atum 16.4.2010, 08:39
спасибо - буду пробовать 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)