2017-10-04 1 views
1

J'ai un fichier .jar java créé avec NetBeans. J'utilise apaches procrun (prunsrv.exe) pour installer ce fichier .jar en tant que service Windows. J'ai modifié le code pour obtenir une propriété d'un fichier config.properties. Je ajouté le fichier config.properties dans le même dossier que mon fichier .jar réside dans Mon code est le suivant:.service prunsrv avec fichier de propriétés externes

Properties props = new Properties(); 
InputStream inputStream = MyService.class.getClassLoader().getResourceAsStream("config.properties"); 
props.load(inputStream); 

Sur la dernière ligne de mon code, je reçois un NPE lorsque je tente pour commencer mon service. Je suppose que c'est parce que le fichier n'est pas trouvé. j'ai modifié le manifest.mf comme suit:

Class-Path: . 

J'ai aussi essayé de copier config.properties dans le dossier « lib » (sous-dossier à l'endroit où mon fichier .jar est situé). Mêmes résultats

I modifié la ligne "set PR_CLASSPATH" dans le fichier batch qui installe le service comme suit:

set PR_CLASSPATH=MyService.jar;. 

Encore même NPE.

Comment puis-je obtenir mon code pour reconnaître mon fichier config.properties une fois le service installé?

Merci, Raymond

Répondre

1

C'est ce que j'utilise pour charger des ressources dans ces situations et semble fonctionner la plupart du temps:

public static InputStream getResourceAsStream(String path) { 
    return Thread.currentThread().getContextClassLoader().getResourceAsStream(path); 
} 

Pourriez-vous vérifier, si cela aide dans votre cas?

Une autre stratégie pour surmonter ce problème est celui décrit dans mon commentaire:

"copie le fichier de configuration à un chemin de dossier absolu spécifique (par exemple c: \ test) et modifier le chemin de classe pour pointer vers ce dossier (set PR_CLASSPATH = MyService.jar;.; c: \ test) "

+0

Même numéro. J'ai passé "config.properties" à cette méthode et le InputStream est toujours nul. –

+0

Pouvez-vous copier la copie du fichier de configuration dans un chemin de dossier absolu spécifique (c.-à-d. C: \ test) et modifier le chemin de classe pour pointer vers ce dossier (set PR_CLASSPATH = MyService.jar;.; C: \ test). Et puis réessayer? –

+0

C'est ce qu'il a fait. Après avoir essayé cela et cela a fonctionné, j'ai simplement créé un dossier "resources" sous ma racine et l'ai ajouté à mon CLASSPATH. Je crois que mon problème était l'utilisation du manifest.mf en conjonction avec le "set PR_CLASSPATH" dans mon install.bat. J'ai supprimé l'entrée Chemin de classe dans mon fichier manifest.mf et modifié le fichier PR_CLASSPATH pour inclure tout ce dont j'avais besoin. –