2009-06-06 8 views
0

j'ai un simple fichier Demo.java dans D: \ jarConcepts répertoire:ajoutant des bocaux à votre programme

import javax.swing.* ; 

class Demo{ 
    public static void main(String args[]){ 
     JFrame frame = new JFrame("") ; 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) ; 

     Class c = null ; 
     try{ 
      c = Class.forName("com.mysql.jdbc.Driver") ; 

      //com.mysql.jdbc.Driver class is in a jar file 
      //whose class path is set in the environment variable(explicitly done by me) 

      //when i am executing Demo.class using java command, it displays frame with OK title 
      //but if i execute this by creating a jar, it enables to load the 
      //com.mysql.jdbc.Driver class, 
      //thus displaying frame with Sorry title 

      frame.setTitle("OK") ; 
     } 
     catch(ClassNotFoundException cnfe){ 
      frame.setTitle("Sorry") ; 
     } 

     frame.setVisible(true) ; 
    } 
} 

J'ai préparé un fichier manifest.txt dans D: \ jarConcepts avec le texte suivant:

Main-Class: Demo

Class-Path: C: \ Program Files \ MySQL \ MySQL Outils pour 5.0 \ java \ lib \ mysql-connector-java-5.0.4-bin.jar

quand je crée un fichier jar dans le même répertoire en utilisant

pot

-cvfm Demo.jar manifest.txt .class

suivant est la sortie:

ajouté manifeste ajouter : Demo.class (in = 743) (out = 505) (dégonflé 32%)

Mais, lorsque j'exécute le fichier jar généré, il affiche un message d'erreur,

Impossible de trouver la classe principale. Le programme va sortir.

Je ne comprends pas pourquoi cela se passe, coz, quand je créer le fichier jar avec le code manifeste suivant:

Main-Class: Demo

Je reçois un parfaitement exécutable Demo.jar, le seul problème est qu'il ne charge pas la classe Driver du chemin de classe] et quand j'essaye d'ajouter le chemin dans le manifeste, cela ne fonctionne pas ...... plz help ... ....

Répondre

0

Assurez-vous qu'il n'y a pas de saut de ligne dans votre fichier manifeste entre les entrées Class-Class et Class-Path. Vous devez également vous assurer qu'il y a un retour à la ligne après l'entrée Class-Path.

Aussi, je recommanderais que Démo soit un cours public s'il doit être utilisé comme classe principale.

+0

alors pourquoi le fichier jar est exécuté, quand je ne suis en utilisant la balise-classe principale au lieu d'utiliser les deux Main-classe, étiquettes de classe chemin ...... – mogli

0

Vous ne devez pas compter sur le chemin de classe manifeste, car les fichiers Manifest ont de jolis strange rules, y compris ceux pour le retour à la ligne.

Au lieu de cela, construire un chemin de classe en utilisant des arguments de ligne de commande et d'appeler votre programme en utilisant le principal argument de la classe java -cp Demo.jar:mysql-connector.jar Demo

+0

qui est une longue liste à des fins différentes .... me plz me dire le seul texte que je dois écrire dans manifest.txt pour rendre mon cadre visible avec le titre OK .... – mogli

+0

Comme je l'ai dit, je ne peux que suggérer de construire le classpath avec 'java -cp ', pas avec le manifeste. –

+0

mr. robert, thnx pour votre réponse ..... j'ai 1 autre question à vous, je suis nouveau sur ce site. me plz me dire l'utilisation de lien lien (à gauche du lien de drapeau) sur cette page ... ??? – mogli

1

Les espaces sont interprétés comme des séparateurs et les entrées doivent être relatives:

http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Main%20Attributes

Classe-Path:

La valeur de cet attribut spécifie le les URL relatives des extensions ou les bibliothèques dont cette application a besoin. Les URL sont séparées par un ou plusieurs espaces.

+0

alors quelle url je dois donner si mon jar est dans C: \ Program Files \ MySQL \ MySQL Outils pour 5.0 \ java \ lib \ mysql-connecteur-java-5.0.4-bin.jar répertoire .... – mogli

+0

Vous devez copier le fichier jar dans un emplacement relatif à votre fichier jar (par exemple, lib/mysql-connector-java-5.0.4-bin.jar). En théorie, vous devriez faire quelque chose comme ça lorsque vous créez votre package de déploiement votre application A la rigueur, vous pouvez aussi essayer "file: /// C: /Program%20Files/MySQL/CMySQL%20Tools%20for%205.0/java/lib/mysql-connector-java-5.0.4-bin.jar". –

+0

Penser à l'empaquetage - J'ai employé la fourmi pour fusionner les pots de dépendance dans mon pot (déconnecter les jarres de dépendance et jar tout ensemble). Je pense que Sun a vraiment laissé tomber la balle en ne fournissant pas un meilleur support pour l'intégration de jarres de dépendance avec le pot d'application. Toutefois, l'utilisation d'un chargeur de classe personnalisé semble être moins un hack: http://www.ibm.com/developerworks/library/j-onejar/ –

Questions connexes