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.

Asociaciones de archivos no funcionando en JPackage.

Estoy enfrentando un problema con las asociaciones de archivos en Java (usando el comando de terminal JPackage para construir un archivo ejecutable). El problema es básicamente el siguiente: cuando intento abrir un archivo con mi aplicación, la ruta del archivo no se pasa a mi método principal como argumento.
Permítanme compartir un ejemplo simplificado del código a continuación. Estoy trabajando en IntelliJ Idea en MacOs 12 (Monterey).

Esta es la (única) clase, que contiene el método principal, desde la cual construyo un archivo .jar ejecutable.

import javax.swing.*;
import java.awt.*;

public class Main {

    public static void main(String[] args) {

        if (args.length == 0) {

            JFrame frame = new JFrame("Test");
            JLabel label = new JLabel("No arguments");
            frame.setLayout(new BorderLayout());
            frame.add(label, BorderLayout.CENTER);
            frame.setPreferredSize(new Dimension(1000,500));
            frame.pack();
            frame.setVisible(true);

        } else if (args.length == 1) {

            JFrame frame = new JFrame("Test");
            JLabel label = new JLabel(args[0]);
            frame.setLayout(new BorderLayout());
            frame.add(label, BorderLayout.CENTER);
            frame.setPreferredSize(new Dimension(1000,500));
            frame.pack();
            frame.setVisible(true);

        }
    }
}

Este es el archivo “.properties” que he escrito para establecer la asociación de archivos con el tipo de archivo “.txt”.

mime-type=text/plain
extension=txt
description=Text Source

Por último, aquí está el comando de terminal que utilicé para construir el archivo ejecutable para MacOs.

jpackage --type "app-image" --name JavaGuiApp --input /Users/username/Desktop/JavaGuiApp --main-jar JavaGuiApp.jar --file-associations /Users/username/Desktop/JavaGuiApp/FAtxt.properties

Me he basado en la información encontrada aquí en JPackage: https://docs.oracle.com/en/java/javase/14/jpackage/packaging-overview.html.

¡Gracias a todos de antemano por su ayuda!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para el problema de las asociaciones de archivos en Java utilizando JPackage

    El problema encontrado con las asociaciones de archivos en Java utilizando el comando de terminal JPackage se puede resolver modificando el método principal.

    Actualmente, el método principal en el código proporcionado no recibe ninguna ruta de archivo como argumento, por lo que siempre muestra “No hay argumentos” al ejecutarse. Para recibir la ruta de archivo como argumento, el método principal debe modificarse de la siguiente manera:

    public static void main(String[] args) {
    
        if (args.length == 0) {
    
            // mostrar GUI sin ruta de archivo
            JFrame frame = new JFrame("Test");
            JLabel label = new JLabel("No hay argumentos");
            frame.setLayout(new BorderLayout());
            frame.add(label, BorderLayout.CENTER);
            frame.setPreferredSize(new Dimension(1000,500));
            frame.pack();
            frame.setVisible(true);
    
        } else {
    
            // mostrar GUI con ruta de archivo
            JFrame frame = new JFrame("Test");
            JLabel label = new JLabel(args[0]); // args[0] contiene la ruta de archivo
            frame.setLayout(new BorderLayout());
            frame.add(label, BorderLayout.CENTER);
            frame.setPreferredSize(new Dimension(1000,500));
            frame.pack();
            frame.setVisible(true);
    
        }
    }
    

    Con esta modificación, el método principal ahora verifica si se pasa algún argumento cuando se inicia el archivo ejecutable. Si hay un argumento, mostrará la ruta de archivo en un JFrame, de lo contrario mostrará “No hay argumentos”.

    Después de modificar el método principal, vuelva a compilar el archivo ejecutable utilizando el mismo comando de terminal como antes. Una vez que se compila el archivo ejecutable, intente abrir un archivo “.txt” con él. La ruta del archivo ahora debería pasarse como argumento y mostrarse en la GUI.

    Espero que esta solución resuelva su problema. Avíseme si tiene alguna pregunta adicional.

Comments are closed.