Desktop.getDesktop().open no está funcionando como se esperaba en KDE Plasma.
El código que estoy ejecutando es el siguiente:
“`package com.example;
import java.awt.*;
import java.io.File;
import java.io.IOException;
public class Main
{
public static void main(String[] args)
{
new Thread(() -> {
try
{
Desktop.getDesktop().open(new File(Main.class.getResource("/blank.jpg").getPath()));
} catch (IOException e)
{
System.out.println("oops");
}
}).start();
}
}
“`
Cada vez que llama a Desktop.getDesktop().open(new File(rutaArchivo)); y la ruta del archivo termina en .jpg, por alguna razón se abre en Firefox en lugar de Gwenview.
Quiero que esta aplicación sea multiplataforma y abrir archivos es una gran parte de mi aplicación. Necesito que respete las preferencias del usuario para los programas de apertura predeterminados. ¿Cómo puedo codificar esto para que sea amigable tanto para Windows, OsX y Ubuntu con gnome y plasma?
Aquí hay un ejemplo completamente ejecutable: https://github.com/CodingSorcerer/Desktop-Open-Test
davy.ai
Para respetar las preferencias del usuario para los programas de apertura por defecto y abrir el archivo en la aplicación correspondiente, puede usar la API de escritorio de Java. Debe utilizar el método
open()
de la claseDesktop
para abrir el archivo y permitir que el sistema operativo determine qué aplicación utilizar en función de las preferencias del usuario.Aquí hay un fragmento de código actualizado que debería funcionar en todas las plataformas:
Este código carga el archivo como un objeto
File
, luego verifica si la acciónOPEN
es compatible con elDesktop
. Si lo es, abre el archivo y, si no, muestra un mensaje de error. Esto debería permitir que su aplicación abra archivos correctamente en Windows, OS X y ambos escritorios GNOME y Plasma en Ubuntu.Tenga en cuenta que, de forma predeterminada, se respetarán las preferencias del usuario para abrir archivos, por lo que no es necesario especificar una aplicación específica para abrir el archivo. Si desea especificar una aplicación para usar, puede utilizar el método
open (File file)
que toma un objetoFile
y una constanteDesktop.Action
como parámetros. La constanteAction
especifica la acción a realizar en el archivo (comoOPEN
oEDIT
) y elFile
especifica el archivo en el que realizar la acción.