Откройте путь с помощью Desktop.open () из Java на Ubuntu (Linux) - PullRequest
6 голосов
/ 14 марта 2012

Из моего приложения, написанного на Java, я хочу открыть папку, используя проводник файлов операционной системы.

Я использую Desktop.open (новый файл (путь))

Это отлично работаетна окнах, но на Ubuntu 11.10 (Linux) это не работает.Использование Desktop.open для открытия файла работает, как в Ubuntu, так и в Windows.

Использование промежуточного этапа: File fPath = new File (fPath) и тестирование его с помощью fPath.exists () и fPath.isDirectory () возвращает true.

при использовании Desktop.open (новый файл (путь)) дает мне следующее исключение:

java.io.IOException: Failed to show URI:file:/and/here/the/path/I/use/
at sun.awt.X11.XDesktopPeer.launch(Unknown Source)
at sun.awt.X11.XDesktopPeer.open(Unknown Source)
at java.awt.Desktop.open(Unknown Source)

Я не смог проверить это на компьютере Appleпока, но я надеялся, что Desktop.open (новый файл (путь)) не зависит от системы ..... кстати,

, полный код:

    Desktop desktop = null;
    // Before more Desktop API is used, first check
    // whether the API is supported by this particular
    // virtual machine (VM) on this particular host.
    if (!Desktop.isDesktopSupported()) {
        // show Error
        return;
    }
    desktop = Desktop.getDesktop();
    String path = "here the path ";
    // by the way: I use System.getProperty("file.separator") as file seperator
    try {
        File fPath=new File(path);
        if(!fPath.exists()){
            // show Error
            return;

        }
        if(!fPath.isDirectory()){
            // show Error
            return;

        }
        desktop.open(new File(path));
    } catch (IOException e) {
        log.severe(e.getMessage());
        e.printStackTrace();
        // show Error
        return;
    }

Некоторая дополнительная информация: ОС: Linux (3.0.0-16-generic - amd64)

Java: 1.6.0_30-b12

Java home: /opt/java/64/jre1.6.0_30

Ответы [ 5 ]

2 голосов
/ 08 августа 2018

У меня была такая же проблема.Но в моем случае это была Ubuntu 18.04 и java 1.8.0_161-b12. В Windows 10 все работает нормально.Но на Ubuntu

Desktop.getDesktop().open(new file) 

программа перестала отвечать.Я решил обернуть вызов в исполнителя:

private ExecutorService executorService; 
   BasicThreadFactory factory = new BasicThreadFactory.Builder()
            .namingPattern("YourPatternIndeficator")
            .build();
    executorService = Executors.newSingleThreadExecutor(factory);
if (Desktop.isDesktopSupported()) {
        File myFile = new File(path);
        executorService.execute(() -> {
            try {
                Desktop.getDesktop().open(myFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
        });

    }
1 голос
/ 27 июля 2012

Я столкнулся с тем, что звучит как та же проблема на Mint 13. Из того, что я могу сказать, изменения в обработке MIME для открытия каталогов сломали Java Desktop API. Я смог обойти проблему, отредактировав

~/.local/share/applications/defaults.list

и добавление этой строки

x-directory/normal=nautilus.desktop

Я использую Mint 13 Cinnamon с Java-версией "1.7.0_05"

0 голосов
/ 12 февраля 2015

У меня такая же проблема на моем Linux Mint (а не в Windows).

Эта ссылка помогла мне: Проблемы с методом java.awt.Desktop browse () .

Это похоже на мой Linux Mint-KDE.Я изменил строку

Desktop.getDesktop().desktop.open(new File("/home/user/mypath"));// this throws IOException: Failed to show URI (except in Windows)

с

Desktop.getDesktop().desktop.open(new File("///home/user/mypath"));// this launches Dolphin

или с

Desktop.getDesktop().desktop.open(new File(new URI("file:///home/user/mypath").getPath()));// this launches Dolphin

Dolphin был запущен с моей папкой "mypath".Но я не нашел способа открыть файл типа pdf или txt в моем Linux, пока он работает в Windows с первым кодом.

(Java 1.8.0_25, Netbeans 8.02, Linux Mint 12 KDE)

0 голосов
/ 11 апреля 2012

Я столкнулся с той же проблемой и решил дать Java 7 вихрь.Я использую Java версию "1.7.0_147-icedtea" на Ubuntu 11.10_x64 и теперь могу довольно счастливо открывать расположение файлов в Nautilus.

0 голосов
/ 14 марта 2012

Я не могу подтвердить ошибку. Я взял ваш код и создал основной метод, и все работает как положено. Я точно не знаю, где установлены приложения по умолчанию (в моем случае PCMan был открыт вместо обычного Nautilus, но в итоге он должен выполнить свое назначение).

На java.awt.Desktop.open не работает с файлами PDF? Я обнаружил ссылку, указывающую на проблему в системе отслеживания ошибок Suns (Oracles) о том, что метод открытия файлов с помощью AWT не надежен даже в Windows. Возможно, вам следует подумать об альтернативных способах открытия таких приложений. Кроме того, AWT скоро устареет почти наверняка.

Если вы используете SWT в своем приложении, вы можете использовать org.eclipse.swt.program.Program.

...