2010-09-13 6 views
0

Mon client Swing exécutable génère une exception de mémoire insuffisante lorsqu'il est exécuté à partir d'un ordinateur distant. Toutefois, l'exécution du client à partir de la ligne de commande (augmentation de l'espace de segment) à l'aide de la commande suivante fonctionne.java Erreur de mémoire insuffisante lors de l'exécution d'un client Swing

java -XMx128m -Xms128m -jar myclient.jar 

Je ne veux pas que les utilisateurs distants utilisent mon client via la ligne de commande comme indiqué ci-dessus. Alors, puis-je définir cet espace de tas lors de la construction de l'exécutable? J'utilise le plug-in Fat Jar d'Eclipse pour créer mon pot exécutable.

De même, existe-t-il un moyen de configurer une valeur par défaut pour l'espace de segment Java pour les machines clientes (Windows/Mac/Linux)?

Répondre

2

Bien que je ne connaisse pas le moyen de définir une valeur par défaut dans le système d'exploitation individuel, je peux vous dire que la ligne de commande est le seul endroit où aller pour les commandes -X. La façon dont nous avons réussi à contourner ce problème sur notre projet était de leur fournir un programme d'installation pour Windows, ou de créer des scripts pour un système d'exploitation particulier. Pour l'installateur, nous avons utilisé NSIS, qui semblait fonctionner très bien.

2

Je ne pense pas qu'il existe une façon standard de spécifier les paramètres de mémoire de dans l'application; Java doit démarrer avec les paramètres corrects. Le fichier jar, avec manifest, est chargé par java, qui a démarré d'ici là.

Vous pouvez cependant utiliser un installateur, voir this SO question qui suggère NCIS. Vous pouvez aussi aller chercher un lien (sur Windows) ou un script bat/shell sur Windows. Ou peut-être le genre de démarreur que Nexus utilise. J'ai fait un peu de googling et j'ai trouvé JSW.

Donc, en résumé, vos options semblent être:

  • un installateur comme NCIS
  • une enveloppe comme JSW
  • script shell et le fichier bat
  • un fichier lien ou quelque (conceptuellement similaire à script/fichier bat)

Je pense que je voudrais commencer par regarder JSW comme certains logiciels bien connus comme Nexus semble l'utiliser. Je ne sais pas si cela fonctionne bien avec les applications de bureau. Mais essayez et vous découvrirez :)

+0

InstallAnywhere. –

2

vous pouvez aussi utiliser un wrapper comme launch4j qui fera un exécutable pour la plupart des systèmes d'exploitation: es et vous permet de spécifier les options VM

+0

Cela ressemble à une bonne solution multiplateforme. – trashgod

2

Mac OS X: Les articles Bringing your Java Application to Mac OS X Part 1, Part 2 et Part 3 illustrent comment intégrer un fichier JAR dans un ensemble d'applications Mac OS. Vous pouvez spécifier les paramètres d'exécution dans la liste de propriétés de l'application Info.plist, comme indiqué dans Java Info.plist Key Reference for Mac OS X.

+0

Wow, je ne connaissais pas cette information - merci pour ça! – aperkins

+0

@aperkins: De rien! Une application Mac est juste un répertoire dont le nom se termine par '.app'. Vous pouvez même le construire avec 'ant: http://robotchase.svn.sourceforge.net/viewvc/robotchase/trunk/build.xml?revision=66&view=markup – trashgod

+0

c'est marrant, parce que je le savais, je n'avais jamais pensé à propos de le faire de cette façon. Incroyable comment le cerveau manque parfois ces connexions évidentes. – aperkins