2016-10-12 1 views
6

Je lance une application Java JNLP à partir d'une application client native (c'est-à-dire, pas un navigateur). Lorsque le JNLP termine sa tâche, j'en ai besoin pour renvoyer une chaîne à l'application appelante? Comment puis-je faire ceci? Est-il possible de renvoyer une valeur à une application appelante - ou ai-je besoin que l'application appelante écoute sur un port et que l'application JNLP écrive la valeur sur ce port via des sockets?Comment une application appel native obtient-elle une valeur de retour de JNLP?

+0

S'il vous plaît, pouvez-vous poster un exemple de comment faites-vous l'appel? – karelss

+0

@karelss - javaws est appelé par Process :: Start in C# – user93353

Répondre

1

Si l'élément all-permissions est spécifié, vous pouvez essayer de définir une variable d'environnement que vous pouvez lire dans votre application C#.

Set variable d'environnement en Java:

System.getenv().put("returnValue", "yourValue"); 

Lire la variable d'environnement en C#:

ProcessStartInfo p = new ProcessStartInfo("start ...."); 
.... 
string returnValue = p.EnvironmentVariables["returnValue"]; 
+0

Ne pense pas que cela fonctionnera - child est un processus séparé - il hérite d'une copie des variables d'environnement du parent - tout changement dans les valeurs des variables dans le enfant ne sera pas reflété dans le parent - au moins c'est comment cela fonctionne sur la plupart des systèmes d'exploitation - le testera sur Windows et voir. – user93353

1

J'aime votre idée d'utiliser des prises et pense que c'est pourrait être une solution facile.

Il n'est pas possible d'obtenir des valeurs de retour à partir d'une application WebStart. Il suffit de voir le message d'aide de

javaws --help 

Il n'y a pas de code retour disponible. (Désolé)

Avez-vous pensé à un fichier temporaire au lieu des sockets?

1

C'est un peu vieux mais aussi fas comme je le sais ce sont les options existantes pour intercommunier deux processus link.

Je pense que la meilleure façon de résoudre votre problème est l'utilisation rmi ou JMX si vous le pouvez, ou juste une simple prise

2

répondre à ma propre question!

-je écrire à stdout du processus fils (le JNLP)

  • Le parent lance le processus enfant

    Process::Start 
    
  • Lire stdout Parent

    string ret = process.StandardOutput.ReadToEnd(); 
    
  • Process::WaitForExit(); 
    

Quelqu'un voit un problème à ce sujet?