2017-03-24 3 views
0

Actuellement, j'essaye de créer une application de bureau en utilisant le sélecteur de fichiers de Swing qui va convertir un type spécifique de fichier en un autre, en utilisant cygwin. La partie de code correspondant est:Passer une propriété d'objet au script bash en utilisant java

String[] cmd = new String[]{"C:\\cygwin64\\bin\\mintty.exe", "/cygdrive/c/Users/orhun.vatansever/workspace/extchangegui/src/extchangegui/dene.sh"}; 
       Process pr = Runtime.getRuntime().exec(cmd); 

qui fonctionne très bien, mais étant donné que le contenu de mon bashscript est comme

cd "${0%/*}" 
java -jar xyz.jar aegis.xyz 

Cela signifie que mon code fonctionne pour un fichier xyz spécifique, ce que je veux faire est de sélectionner le fichier et d'exécuter la commande sur ce fichier xyz spécifique. Je peux obtenir le nom de fichier avec myfile.getName(), mais je ne sais pas comment utiliser ces données, où le mettre dans le générateur de processus. Je vois deux solutions, je pense, l'une est de définir un des paramètres du générateur de processus (ne sait pas lequel) à "java -jar xyz.jar" + file.getName() "", l'autre est en train de changer le contenu du script en cliquant le bouton ouvert du sélecteur de fichier (ce qui n'a pas de sens je pense).

+0

Y a-t-il une raison pour laquelle vous exécutez votre script dans un terminal (qui apparaîtra comme une fenêtre sur votre écran)? Vous pouvez exécuter "C: \\ cygwin64 \\ bin \\ bash.exe" à la place et il ne créera pas de fenêtre. –

+0

Je veux que l'utilisateur pour parcourir le fichier, il peut y avoir beaucoup de fichiers xyz et l'utilisateur peut vouloir sélectionner un – Morbidity

+0

OK, cela a du sens alors –

Répondre

0

Vous pouvez ajouter la chaîne de nom à votre tableau de commandes et la référencer comme positional parameter dans votre script. Dites cmd[2] = "xyz",

java -jar ${2}.jar aegis.${2} 

Ce n'est pas ce que je veux faire ... Je veux ... obtenir son nom via file.getName() propriété, et passer en quelque sorte à le script, ou l'exécuter comme java -jar xyz.jar + chosenFile.getName()

Passez ensuite le nom du fichier dans la chaîne de commande, cmd[2] = file.getName(),

java -jar xyz.jar ${2} 

Vous devriez également envisager d'utiliser ProcessBuilder pour créer votre Process.

+0

ce n'est pas ce que je veux faire, ce que je veux faire est de pouvoir pour passer le fichier choisi et obtenir son nom via la propriété file.getName(), et en quelque sorte le passer au script, ou l'exécuter comme "java -jar xyz.jar" + chosenFile.getName() "", – Morbidity

+0

mais isn ' t file un objet java et getName() une propriété java, sont-ils conservés quand je les lance dans mon script? – Morbidity

+0

J'ai essayé ce que vous avez dit, il n'a pas retourné d'erreur mais il n'a pas non plus généré le dossier comme il le devrait – Morbidity