es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , ,

Answer

  1. Avatar for 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 clase Desktop 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:

    paquete 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
                {
                    File file = new File(Main.class.getResource("/blank.jpg").toURI());
                    Desktop desktop = Desktop.getDesktop();
                    if (desktop.isSupported(Desktop.Action.OPEN)) {
                        desktop.open(file);
                    } else {
                        System.out.println("La apertura de archivos no es compatible en esta plataforma");
                    }
                } catch (Exception e)
                {
                    System.out.println("oopsie: " + e.getMessage());
                }
            }).start();
        }
    }
    

    Este código carga el archivo como un objeto File, luego verifica si la acción OPEN es compatible con el Desktop. 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 objeto File y una constante Desktop.Action como parámetros. La constante Action especifica la acción a realizar en el archivo (como OPEN o EDIT) y el File especifica el archivo en el que realizar la acción.

Comments are closed.