Je travaille sur une application Java qui est bien sûr censé fonctionner sur les principaux systèmes d'exploitation d'une clé USB. Pour les utilisateurs Mac, j'ai regroupé les pots (application et mise à jour) dans les programmes Apple .app. Maintenant: quelle est la meilleure façon de laisser les jars se lancer l'un l'autre et d'utiliser le chemin relatif du dossier sur le bâton. Je demande parce que j'ai remarqué que sur un Mac, c'est comme si le dossier .app est le fichier lancé (et non le jar à l'intérieur) et donc le répertoire parent est le répertoire de travail où tous mes fichiers seront stockés. Sous Windows et Linux, c'est juste un dossier MyApp.app et les fichiers seront à l'intérieur. Est-ce que le changement de casse et de chemin par code est vraiment le seul moyen de résoudre ce problème? Merciprogrammes Java sous Windows, Mac et Linux (Unix)
1
A
Répondre
2
Vous pouvez demander à la machine virtuelle Java pour l'emplacement physique d'une classe donnée. De http://www.exampledepot.com/egs/java.lang/ClassOrigin.html:
// Get the location of this class
Class cls = this.getClass();
ProtectionDomain pDomain = cls.getProtectionDomain();
CodeSource cSource = pDomain.getCodeSource();
URL loc = cSource.getLocation(); // file:/c:/almanac14/examples/
Cela fonctionne même pour pot-fichiers.
Lorsque vous connaissez l'emplacement, vous pouvez naviguer à partir de là.
1
La meilleure option serait de créer des lanceurs pour chacun des systèmes d'exploitation et de ces lanceurs appellent la machine virtuelle Java pour exécuter pot de. Pour Linux faire un script shell, sur Mac ce serait .app (ou script shell aussi) et sur Windows un .bat ou un exécutable fonctionnerait.
Questions connexes
- 1. Programmes d'installation Java pour Windows et Mac
- 2. Exécution de programmes Windows sous Linux
- 3. wxCriticalSection sous Linux/Unix
- 4. DebugBreak sous Unix/Linux?
- 5. subprocess.call() échoue sous Mac et Linux
- 6. BOM sous Windows et Unix
- 7. zip sous UNIX et Windows
- 8. Callstack sous Windows et Mac OS X/Linux sans symboles
- 9. Programmes de benchmarking sous Linux
- 10. Liste des programmes en cours sous Linux en utilisant Java
- 11. COFF sous Linux ou ELF sous Windows
- 12. Java OutOfMemory sur Mac, fonctionnant sous Windows
- 13. Comment démarrer une application .NET à partir de Java sous Linux, Mac et Windows?
- 14. Logiciel RFID pour Windows, Linux et Mac
- 15. Hashlib sous Windows et Linux
- 16. Exécution de programmes OpenGL sous Linux
- 17. Exécution de programmes C sous Linux/MacOSX
- 18. Java est-il le même sous Linux et Windows?
- 19. PackageMaker pour la création de paquets Mac sous Windows/Linux
- 20. Pourquoi l'application Windows ne fonctionne pas sous Linux ou Mac?
- 21. application Web ASP.NET même, mais différentes performances dans Windows et Mac-os, linux ou unix
- 22. Hibernate - comportement différent sous Linux et Windows
- 23. unix "quel java" commande équivalente sur Windows?
- 24. commandes pour compiler des programmes sous Windows
- 25. Problèmes avec @Transactional et JerseyTest sous Linux ou Mac mais pas sous Windows
- 26. Sous-système Unix pour Windows
- 27. Indicateur de répertoire sous Windows et sous Linux.
- 28. Formater un fichier sous Unix/Linux?
- 29. Rendu des polices sous Mac et Windows
- 30. Projet Windows et Mac sous Git
je besoin de l'emplacement de la classe pour le faire, ou que je reçois quelque chose de mal? Un problème est également que les fichiers jar nécessaires dans le dossier .app ne se trouvent pas dans un dossier lib, donc lorsque vous lancez console/runtime, ClassNotFoundExceptions sont lancés. – Magreet
J'ai une solution de contournement en 1. Regroupant le .app 2. En entrant dans le fichier .app et en déplaçant les fichiers jar dans un dossier lib 3. En commençant par .app doubleclick et par Runtime.getRuntime(). Exec() fonctionne ... Mais ce n'est pas joli: -/ – Magreet
Cela sonne comme si vous ne le faites pas comme prévu. Vous devriez utiliser le bundler officiel Apple Jar pour créer un joli paquet. –