Java Webstart "javaws -Abrir" bandera no funciona con múltiples argumentos

Tacitus86:

Estoy intentando hacer una llamada a Java Webstart que utiliza la opción "-abierto" tiempo de ejecución para enviar argumentos a la aplicación Web Start. Me he referido a la pregunta: Paso de argumentos de línea de comandos para javaws (Java WebStart) ejecutables , pero esta sintaxis no parece trabajo para múltiples argumentos. Parece que encontrar trabajo para un solo argumento sin embargo.

Cuando corro "javaws URLtoMyJNLP" Se ejecuta la multa aplicación, también cuando envío un solo argumento "javaws -open arg URLtoMyJNLP" también parece funcionar y el arg llega a la aplicación. Cuando intento ejecutar "javaws -open arg arg arg URLtoMyJNLP" dice argumentos no válidos suministrados. Entro en el comando en ProcessBuilder.command.

InvalidArgumentException[ Invalid arguments supplied: {hello, jnlp, launch.jnlp, 123 }]

Para la salida anterior he tratado de enviar "javaws -open abc launch.jnlp 123 hola"

¿Algunas ideas?

Código conforme a lo solicitado. Es demasiado simplista debido a ser un PoC.

private static void launchApp(String appName, String appPath, String... args)
{
    logger.debug("Launching application: " + appName);

    Properties props = System.getProperties();
    ArrayList<String> fullCmdString = new ArrayList<String>();

    logger.debug("http://" + System.getProperty("jnlp.serverip") + ":" + System.getProperty("jnlp.serverport") + "/FB2HMI/" + appPath);

    if (args.length > 0)
    {
        fullCmdString.add("javaws");
        fullCmdString.add("-open");
    }
    for (String arg : args)
    {
        fullCmdString.add(arg);
    }

    fullCmdString.add("http://" + System.getProperty("jnlp.serverip") + ":" + System.getProperty("jnlp.serverport") + "/FB2HMI/" + appPath);
    logger.debug("Command = " + fullCmdString);
    ProcessBuilder rmLauncher = new ProcessBuilder().command(fullCmdString.stream().toArray(String[]::new));
    Process p;
    try
    {
        p = rmLauncher.start();

        processList.add(p);
        logProcessOutput(p, logger, null, appName);
    }
    catch (Exception e)
    {
        logger.fatal("Failed to launch " + appName + ": " + e);
        System.exit(1);
    }

}
Tacitus86:

Esto puede ser una respuesta feo, pero ya que no ha habido ninguna respuesta adecuada a esta pregunta te mostrará mi trabajo alrededor. Pasar los argumentos como variables de entorno en la JVM. Esto requerirá la edición de la aplicación de origen para buscar variables de entorno como una alternativa a los argumentos, pero es la única manera de evitar este problema WebStart que he encontrado que funciona incluso de forma remota.

Map<String, String> saArgs = new HashMap<String, String>();
saArgs.put("jnlp.serverip", System.getProperty("jnlp.serverip"));
saArgs.put("jnlp.serverport", System.getProperty("jnlp.serverport"));
saArgs.put("port", "8887");
saArgs.put("surfaceip", "192.168.0.50");

ProcessBuilder rmLauncher = new ProcessBuilder().command(fullCmdString.stream().toArray(String[]::new));
    Process p;

    for (Map.Entry<String, String> entry : args.entrySet())
    {
        rmLauncher.environment().put(entry.getKey(), entry.getValue());
    }

    try
    {
        p = rmLauncher.start();
     }
    catch (Exception e)
    {
        logger.fatal("Failed to launch " + appName + ": " + e);
        System.exit(1);
    }

Dentro de la aplicación JAR:

    logger.debug("jnlp.serverip = " + env.get("jnlp.serverip"));
    logger.debug("jnlp.serverport = " + env.get("jnlp.serverport"));
    logger.debug("port = " + env.get("port"));
    logger.debug("surfaceip = " + env.get("surfaceip"))

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=180815&siteId=1
Recomendado
Clasificación