Nouvelle réponse
C'est le strict minimum dont vous avez besoin pour associer correctement. J'ai découvert cela en essayant mon propre conseil numéro 4 ci-dessous (Vous pouvez découvrir comment Windows le fait pour vous...).
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.myext]
@="myext"
[HKEY_CLASSES_ROOT\myext]
@="fichier .myext"
[HKEY_CLASSES_ROOT\myext\shell]
[HKEY_CLASSES_ROOT\myext\shell\open]
[HKEY_CLASSES_ROOT\myext\shell\open\command]
@="\"C:\\...\\run.exe\" \"%1\""
Vous pouvez ajouter DefaultIcon et d'autres éléments si nécessaire, mais sans DefaultIcon, Windows utilisera simplement l'icône dans run.exe
(s'il en a une. Vous pouvez en ajouter une dans le Convertisseur Batch vers Exécutable lorsque vous créez le run.exe
).
Importance de %1
et des guillemets
La raison pour laquelle vous devez mettre un %1
là-bas est de transmettre le chemin et le nom du fichier associé (fichier.myext
) dans le programme run.exe
. Sans transmettre cela, votre association est inutile car elle fonctionne simplement comme un raccourci. Ceci est inutile car vous pouvez simplement créer un raccourci normal vers run.exe
pour servir le même but.
Votre fichier Batch doit aussi avoir un %1
quelque part à l'intérieur afin que le chemin et le nom du fichier associé (fichier.myext
) soient utilisés à l'intérieur du fichier Batch (probablement pour le passer à votre mjar.jar
qui fera quelque chose avec le fichier). Sinon, peu importe sur quel fichier associé vous double-cliquez, vous obtiendrez toujours le même résultat de votre programme Java. Ceci est encore une fois inutile car vous pouvez simplement avoir un raccourci vers le fichier Batch pour servir le même but.
Il est également important d'encadrer le %1
entre guillemets, car les chemins de fichiers peuvent contenir des espaces, et sans les guillemets ("
) ces espaces peuvent diviser le chemin en deux arguments ou plus (lorsque le chemin entier est censé être considéré comme un seul argument).
Exemple de fichier Batch
Voici le fichier Batch que j'ai converti en exe
pour le test. Il affiche simplement la valeur de %1
.
@echo %1
@pause
Votre fichier Batch pourrait être comme le suivant (pour que mjar.jar
puisse obtenir le chemin et le nom du fichier sur lequel vous double-cliquez) :
start /min "C:\...\javaw.exe -jar" "C:\...\mjar.jar" "%1"
J'ai associé le fichier exe
avec l'extension .myext
(en utilisant la méthode de mon conseil 4) puis vérifié le registre pour créer le fichier .reg
ci-dessus. Lorsque je double-clique sur un fichier avec l'extension .myext
, une fenêtre de commande s'ouvre, affichant (echo
commande) le chemin et le nom du fichier sur lequel j'ai double-cliqué (c'est ainsi que mon fichier batch de test est utilisant le fichier associé).
Programme Java
(Ceci est un résumé de la discussion complète en ligne qui a finalement résolu votre problème.) Votre programme Java contenu dans mjar.jar
doit être préparé pour accepter l'argument entrant et l'utiliser. Votre intention est que votre programme ouvre automatiquement le fichier référencé par l'argument entrant et affiche son contenu. Par conséquent, la méthode main
devrait ressembler à ceci :
public static void main (String[] args) {
if (args.length >= 1) {
openFile(args[0]);
}
}
La méthode openFile
est une méthode qui ouvre le fichier par le nom qui lui est transmis. L'instruction if
garantit que args[0]
n'est lu que lorsqu'il y a un tel argument (évitant ArrayIndexOutOfBoundsException
). Seul le premier argument args[0]
est utilisé dans le code ci-dessus ; tous les autres arguments (args[1]
, args[2]
, etc.) sont ignorés. La méthode openFile
ressemblerait à ceci (descripteurs et types de retour non inclus) :
openFile(String filename) {
// code ici pour ouvrir le fichier référencé par la variable "filename",
// lire son contenu et l'afficher sur l'interface graphique
// ou l'utiliser dans le programme comme prévu
}
Si votre programme a une commande Ouvrir intégrée dans son interface graphique, après que l'utilisateur a choisi un fichier avec cette commande, votre application peut utiliser la même méthode openFile
ci-dessus pour ouvrir le fichier choisi et afficher son contenu.
Ancienne réponse
Je n'ai pas de réponse définitive à votre problème pour l'instant, mais voici quelques conseils pour vous aider à démarrer :
-
Avez-vous essayé d'ajouter des guillemets ? Comme ceci : @="\"C:\\...\\run.exe\" \"%1\""
Dans le registre, la valeur (Par défaut) apparaîtra ainsi : "C:\...\run.exe" "%1"
-
Lisez la documentation officielle de Microsoft sur l'Association de Type de Fichier. Vous devrez également vous renseigner sur les Identificateurs Programmatiques (liés dans le premier paragraphe de ce document).
-
Essayez d'associer votre type de fichier .myext
avec le Bloc-notes en premier. Découvrez comment le Bloc-notes est associé aux fichiers .txt
et suivez l'exemple. Si c'est fait correctement, le Bloc-notes devrait ouvrir votre fichier fichier.myext
.
-
Vous pouvez découvrir comment Windows le fait pour vous. Cliquez avec le bouton droit sur fichier.myext
, cliquez sur Ouvrir avec > Choisir le programme par défaut...^ et Parcourir pour trouver votre fichier run.exe
. Associez et ouvrez, puis examinez le registre Windows pour découvrir comment Windows a enregistré votre association manuelle. Vous pouvez ensuite simplement exporter le type de fichier et l'identificateur programmatique vers des fichiers reg.
^ Si fichier.myext
n'est pas associé, cliquez sur Ouvrir > Sélectionner un programme dans une liste de programmes installés.
PS1 : Apparemment, il doit y avoir un double antislash dans les fichiers .reg.
PS2 : Il vaut mieux éditer directement les éléments dans le registre, tester les effets, puis exporter les clés vers des fichiers .reg et les combiner en un seul fichier, plutôt que de créer un fichier .reg vous-même.