Probleme de démarage d'un programme Java
Fermé
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
-
31 juil. 2008 à 12:22
Pantxo1986 Messages postés 64 Date d'inscription mercredi 30 juillet 2008 Statut Membre Dernière intervention 6 août 2009 - 4 août 2008 à 17:52
Pantxo1986 Messages postés 64 Date d'inscription mercredi 30 juillet 2008 Statut Membre Dernière intervention 6 août 2009 - 4 août 2008 à 17:52
A voir également:
- Probleme de démarage d'un programme Java
- Ce programme est écrit en python. il construit un mot secret dans une variable mais il ne l'affiche pas. modifiez-le pour qu'il affiche le mot secret. exécutez-le. quel est ce mot secret ? ✓ - Forum Python
- Jeux java itel ✓ - Forum Jeux vidéo
- Frequence programme national ✓ - Forum Messagerie
- Java runtime - Télécharger - Langages
- Programme demarrage windows 10 - Guide
25 réponses
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
31 juil. 2008 à 12:33
31 juil. 2008 à 12:33
Salut,
++
mais il ne veut pas me le lancer.==> as-tu des erreurs au lancement? Lesquelles? Que fais-tu exactement pour le lancer?
++
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
31 juil. 2008 à 13:06
31 juil. 2008 à 13:06
En faite je clic sur Build -> Build main project, puis ensuite après la construction, je fais run. Il veut un main mais il ne trouve pas le mien alors que j'ai un Runnable dans le main.
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
31 juil. 2008 à 13:07
31 juil. 2008 à 13:07
Est-ce possible de poster le code (même tronqué, en laissant uniquement ta classe avec ton main dedans)?
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
31 juil. 2008 à 13:09
31 juil. 2008 à 13:09
/**Contruction du main pour démarer le logiciel*/
public void main(String args[])
{ java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
/**Conversion du JTextField en Integer*/
choix = new javax.swing.JTextField () ;
var = choix.getText();
i = Integer.decode(var);
/**Visualisation de l'aspect graphique*/
initComponents();
new Instal().setVisible(true);
/**Choix du fichier à déplacer*/
switch (i) {
case 1 :
fichier.copier(file_source, file_dest);
if (!fichier.copier(file_source, file_dest))
System.out.println("Le fichier ne se copie pas");
else
fichier.deplacer(file_dest, file_source);
}
};
});
}
public void main(String args[])
{ java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
/**Conversion du JTextField en Integer*/
choix = new javax.swing.JTextField () ;
var = choix.getText();
i = Integer.decode(var);
/**Visualisation de l'aspect graphique*/
initComponents();
new Instal().setVisible(true);
/**Choix du fichier à déplacer*/
switch (i) {
case 1 :
fichier.copier(file_source, file_dest);
if (!fichier.copier(file_source, file_dest))
System.out.println("Le fichier ne se copie pas");
else
fichier.deplacer(file_dest, file_source);
}
};
});
}
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
31 juil. 2008 à 13:15
31 juil. 2008 à 13:15
Euh, c'est un peu alambiqué, là... Dans le main il faut avoir l'instruction pour afficher Instal (une JFrame, je suppose), donc
new Instal().setVisible(true);
semble correct.
Par contre, par la suite, je ne comprends plus grand chose... Pourquoi un JTextField là... normalement il devrait faire partie de ta JFrame et la méthode initComponents() devrait elle aussi être appelée après le new Install() et avant le setVisible(true).
++
new Instal().setVisible(true);
semble correct.
Par contre, par la suite, je ne comprends plus grand chose... Pourquoi un JTextField là... normalement il devrait faire partie de ta JFrame et la méthode initComponents() devrait elle aussi être appelée après le new Install() et avant le setVisible(true).
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
31 juil. 2008 à 13:44
31 juil. 2008 à 13:44
c'est la première fois que j'utilise netbeans en graphique et en faite sur mon interface je demande un numéros que je dois réadapter dans le code pour pouvoir utilisé le case.
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
31 juil. 2008 à 14:14
31 juil. 2008 à 14:14
Explique un peu plus... Je pense que NetBeans (tout comme Eclipse) devrait avoir un Wizard de création d'une JFrame. Commence déjà par ça, exécute le code généré pour afficher la JFrame vide et rajoute du code au fur et à mesure pour l'enrichir. Ou bien, si ce n'est pas super long et si àa compile sous Eclipse, poste le code entier, j'essaierai de corriger entre deux clopes :-)
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
31 juil. 2008 à 14:18
31 juil. 2008 à 14:18
ok je vais essayer ça en faite mon programme et un logiciel pour pouvoir copier et coller des fichier sous des répertoires différents. Je galère pas mal lol. Par contre je fume pas donc j'ai plus de tempsl pour allé cherche mon café
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
31 juil. 2008 à 14:37
31 juil. 2008 à 14:37
Autre question qui me turlupine, comment on écrire le chemin d'un répertoire pour la classe fichier, car pour affecter le chemin j'ai mis ça :
Le fichier comm.jar se trouve dans le dossier commapi a coté du .jar de mon programme.
File file_source1 = new File("comm.jar");
File file_dest1 = new File("C:/Program Files/Java/jre1.6.0_07/lib/ext/");
Le fichier comm.jar se trouve dans le dossier commapi a coté du .jar de mon programme.
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
31 juil. 2008 à 16:53
31 juil. 2008 à 16:53
Re,
Ben, il faut faire attention au path... Je te colle en exemple un tit fichier qui s'imprime tout seul à la console:
Tu remarques qu'il n'y a pas de déclaration package. Avec une déclaration de package, cela deviendrait:
Pourquoi le ./src/X.java? Parce que je l'exécute depuis Eclipse, et Eclipse a un folder src pour les sources (.java) et un autre folder (bin) pour les classes. A l'exécution, je lui dis de partir du répertoire courant (racine), de décendre dans les sources et d'imprimer X.java. Du coup, pour répondre à ta question, tout dépend du comment tu exécutes ton code (i.e. quel est le dossier correspondant au "." dans mon exemple ci-dessus). Une fois que tu sais ceci, ce sera facile de configurer (par un path relatif) l'accès à ton "comm.jar".
++
Ben, il faut faire attention au path... Je te colle en exemple un tit fichier qui s'imprime tout seul à la console:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class X {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File f = new File("./src/X.java");
BufferedReader bf = new BufferedReader(new FileReader(f));
String curLine = null;
while ((curLine = bf.readLine()) != null) {
System.out.println(curLine);
}
}
}
Tu remarques qu'il n'y a pas de déclaration package. Avec une déclaration de package, cela deviendrait:
package tests;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class X {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
File f = new File("./src/tests/X.java");
BufferedReader bf = new BufferedReader(new FileReader(f));
String curLine = null;
while ((curLine = bf.readLine()) != null) {
System.out.println(curLine);
}
}
}
Pourquoi le ./src/X.java? Parce que je l'exécute depuis Eclipse, et Eclipse a un folder src pour les sources (.java) et un autre folder (bin) pour les classes. A l'exécution, je lui dis de partir du répertoire courant (racine), de décendre dans les sources et d'imprimer X.java. Du coup, pour répondre à ta question, tout dépend du comment tu exécutes ton code (i.e. quel est le dossier correspondant au "." dans mon exemple ci-dessus). Une fois que tu sais ceci, ce sera facile de configurer (par un path relatif) l'accès à ton "comm.jar".
++
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
31 juil. 2008 à 17:22
31 juil. 2008 à 17:22
Ok je crois que j'ai compris en faite pour faire l'inverse donc écrire sur un nouveau fichier, il faut que je crée un nouveau fichier "comm.jar" et que j'utilise BufferWriter et FileWriter au lieu de BufferReader et FileReader.
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
31 juil. 2008 à 17:56
31 juil. 2008 à 17:56
Par contre pour atteindre le le dossier ext dans C:/Program Files/Java/jre1.6.0_07/lib/ext/ je met quoi comme chemin parce que le logiciel sera utiliser dans un dossier a par et avec les trois fichiers à copier
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
31 juil. 2008 à 18:41
31 juil. 2008 à 18:41
Euh... là je te penserais d'interroger la variable système "java.ext.dirs" et de prendre sa valeur, car tout le monde n'installe pas la JRE dans C:/Program Files/Java/jre1.6.0_07 - il faut deux conditions:
1. Laisser Java s'installer là où il veut
2. avoir la version 1.6 update 7 installée
pour que ton chemin en dur soit bon. Exécute ce petit exemple pour voir plus clair:
1. Laisser Java s'installer là où il veut
2. avoir la version 1.6 update 7 installée
pour que ton chemin en dur soit bon. Exécute ce petit exemple pour voir plus clair:
package tests;
import java.io.IOException;
import java.util.Properties;
public class X {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Properties p = System.getProperties();
for (Object key : p.keySet()) {
System.out.println(key + " ==> " + p.getProperty((String) key));
}
}
}
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
1 août 2008 à 12:19
1 août 2008 à 12:19
Par contre je voudrais savoir si java.library.path et java.ext.dirs sont les direction respective de jre/bin/ et de jre/lib/ext/. Si c'est le cas es-qu'il y a un code pour jre/lib/ simplement?
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
1 août 2008 à 12:27
1 août 2008 à 12:27
Par contre je voudrais savoir si java.library.path et java.ext.dirs sont les direction respective de jre/bin/ et de jre/lib/ext/: Oui.
Si c'est le cas es-qu'il y a un code pour jre/lib/ simplement?: Non, mais tu peux le déduire en éliminant le "ext/" à la fin de la valeur de la variable java.ext.dirs. Comme il n'est pas possible de modifier cette variable à l'installation de la machine virtuelle, la valeur de java.ext.dirs sans le ext/ à la fin sera appropriée pour ce que tu veux.
Par contre, je me demande ce que tu veux traffiquer en installant des jars à cet emplacement... Primo, ce n'est pas recommandé, secundo si l'utilisateur réinstalle son JRE tes jars ne seront plus pris en compte...
Si c'est le cas es-qu'il y a un code pour jre/lib/ simplement?: Non, mais tu peux le déduire en éliminant le "ext/" à la fin de la valeur de la variable java.ext.dirs. Comme il n'est pas possible de modifier cette variable à l'installation de la machine virtuelle, la valeur de java.ext.dirs sans le ext/ à la fin sera appropriée pour ce que tu veux.
Par contre, je me demande ce que tu veux traffiquer en installant des jars à cet emplacement... Primo, ce n'est pas recommandé, secundo si l'utilisateur réinstalle son JRE tes jars ne seront plus pris en compte...
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
1 août 2008 à 12:35
1 août 2008 à 12:35
En faite je créé un programme qui puisse installer trois fichiers API dans le répertoire java. Je fais cela pour automatiser l'installation d'un logiciel de transfert en java par RS485, car les utilisateur de se logiciel se perde a chaque fois
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
1 août 2008 à 12:40
1 août 2008 à 12:40
Et tu ne peux pas livrer ces 3 jar avec l'appli RS485 (en tant que bibliothèques)? Comme cela, plus de souci lors d'une mise à jour du jre.
ismailtwo
Messages postés
10
Date d'inscription
jeudi 31 juillet 2008
Statut
Membre
Dernière intervention
19 février 2009
1
1 août 2008 à 12:36
1 août 2008 à 12:36
oui je suis d'accord avec sandul
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
1 août 2008 à 12:41
1 août 2008 à 12:41
Muchas gracias, hombre :)
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
1 août 2008 à 13:56
1 août 2008 à 13:56
En faite c un fichier DLL, un Properties et un jar
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
1 août 2008 à 14:00
1 août 2008 à 14:00
Ben cela ne change pas la question: pourquoi ne pas livrer les 3 fichiers avec l'appli RS485 sans les copier dans un dossier sous la hiérarchie java?
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
1 août 2008 à 14:06
1 août 2008 à 14:06
C'est vrai que sa serai plus simple mé je ne voit pas du tout comment faire.
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
4 août 2008 à 11:03
4 août 2008 à 11:03
Bonjour,
Donc j'ai refait le code et je voudrais en faite toujours savoir pourquoi quand j'essaye de faire "run" sur mon programme, je n'y arrive pas. En fait il me met une fenêtre de dialogue comme quoi il veut un "main" alors qu'il n'y est pas. Voici mon code :
Donc j'ai refait le code et je voudrais en faite toujours savoir pourquoi quand j'essaye de faire "run" sur mon programme, je n'y arrive pas. En fait il me met une fenêtre de dialogue comme quoi il veut un "main" alors qu'il n'y est pas. Voici mon code :
public void main(String args[])
{ java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
/**Conversion du JTextField en Integer*/
choix = new javax.swing.JTextField () ;
var = choix.getText();
i = Integer.decode(var);
/**Visualisation de l'aspect graphique*/
new Instal().initComponents();
new Instal().setVisible(true);
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
4 août 2008 à 11:31
4 août 2008 à 11:31
Salut,
Exemple de classe dérivée de JFrame avec un main:
==> vérifie que tu peux bel et bien exécuter ce code. Si tu peux, modifie ton code pour avoir cette structure.
Remarque:
ceci est incorrect, il faut instancier une seule fois! Exemple:
Mais probablement il faudra également d'autres corrections à part celle concernant l'instanciation...
Exemple de classe dérivée de JFrame avec un main:
import javax.swing.JFrame;
public class Sample extends JFrame {
private static final long serialVersionUID = 1L;
public static void main(String args[]) {
try {
Sample frame = new Sample();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
public Sample() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//
}
}
==> vérifie que tu peux bel et bien exécuter ce code. Si tu peux, modifie ton code pour avoir cette structure.
Remarque:
new Instal().initComponents();
new Instal().setVisible(true);
ceci est incorrect, il faut instancier une seule fois! Exemple:
Instal inst = new Instal().initComponents();
inst.setVisible(true);
Mais probablement il faudra également d'autres corrections à part celle concernant l'instanciation...
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
4 août 2008 à 12:27
4 août 2008 à 12:27
d'après ce que tu m'as dit, il faut tous mettre en static ? Je t'avoue la je suis totalement pommer ça fait même pas 1 ans que j'apprend le langage et j'ai un projet a finir en faite donc soiyait indulgent sil vous plait.
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
4 août 2008 à 12:33
4 août 2008 à 12:33
d'après ce que tu m'as dit, il faut tous mettre en static ?==> le main() doit être static, c'est obligatoire. Quant à private static final long serialVersionUID = 1L; il s'agit d'une déclaration non obligatoire. Le reste des méthodes ne doivent pas être static si pas nécessaire: tu vas instancier un objet - exemple: l'objet Instal - et feras appel par la suite à ses méthodes (==> comme ça tu pourras accéder aux méthodes non static)
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
4 août 2008 à 13:07
4 août 2008 à 13:07
Donc les déclarations de variable doit être static aussi
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
4 août 2008 à 14:11
4 août 2008 à 14:11
Ca dépend de ce que tu veux; en général, non, pas besoin d'avoir des static inutilement. Les TextField de ta JFrame, par exemple, ne doivent pas être static.
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
4 août 2008 à 14:37
4 août 2008 à 14:37
sur ce TextField je voudrais recueillir la valeur qu'il y a dedans et la transformer en "int" pour pouvoir l'exploiter sur un 'case' or si je ne met pas de static sur TextField sa ne marche pas.
choix = new javax.swing.JTextField () ;
var = choix.getText();
i = Integer.decode(var);
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
4 août 2008 à 14:48
4 août 2008 à 14:48
Il y a un souci avec tous les bouts de code que tu postes: je en comprends pas grand-chose, car il me manque le contexte. En tout cas, voici mon exemple antérieur avec un JTextField rajouté à la JFrame et la récupération de sa valeur; rien n'est static, comme tu peux le constater, à part la déclaration main() et le serialVersionID, rien n'est static. Remarque: tu n'est pas obligé d'avoir le comportement applicatif entièrement dans le constructeur - je l'ai mis là par commodité et pour faire simple.
***********
***********
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Sample extends JFrame {
private JTextField textField;
private static final long serialVersionUID = 1L;
public static void main(String args[]) {
try {
Sample frame = new Sample();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
public Sample() {
super();
setBounds(100, 100, 500, 375);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel panel = new JPanel();
final FlowLayout flowLayout = new FlowLayout();
flowLayout.setAlignment(FlowLayout.RIGHT);
panel.setLayout(flowLayout);
getContentPane().add(panel, BorderLayout.SOUTH);
textField = new JTextField();
textField.setColumns(20);
panel.add(textField);
final JButton renameColumnButton = new JButton();
renameColumnButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(Sample.this, "Value in JTextField is: " + getTextField().getText(),
"Just a sample", JOptionPane.INFORMATION_MESSAGE);
}
});
renameColumnButton.setText("Show value");
panel.add(renameColumnButton);
//
}
protected JTextField getTextField() {
return textField;
}
}
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
4 août 2008 à 14:53
4 août 2008 à 14:53
Et aussi:
s'il s'agit d'un JTextField dans ta JFrame, ça ne peut pas faire sens: ton "new" devant est en cause. Supposons que ta JFrame est déjà affichée et que tu as une méthode
comme dans l'exemple ci-dessus; change tout simplement
dans ton code; ce code devra s'exécuter après l'affichage de la JFrame.
choix = new javax.swing.JTextField () ; var = choix.getText(); i = Integer.decode(var);
s'il s'agit d'un JTextField dans ta JFrame, ça ne peut pas faire sens: ton "new" devant est en cause. Supposons que ta JFrame est déjà affichée et que tu as une méthode
protected JTextField getTextField() {
return textField;
}
comme dans l'exemple ci-dessus; change tout simplement
String var = getTextField().getText(); i = Integer.decode(var);
dans ton code; ce code devra s'exécuter après l'affichage de la JFrame.
Pantxo1986
Messages postés
64
Date d'inscription
mercredi 30 juillet 2008
Statut
Membre
Dernière intervention
6 août 2009
1
4 août 2008 à 15:57
4 août 2008 à 15:57
Ok mais le problème qui se pause est que vu que le main est static, cela n'accepte pas. Il faudrait tout mettre dans une autre méthode?
sandul
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
721
4 août 2008 à 15:59
4 août 2008 à 15:59
Dans ton main, tu auras
MonJFrame appli = new MonJFrame();
ensuite, toutes les références à MonJFrame passeront par la variable (instance) appli.
Exemple:
appli.init();
appli.setVisible(true);
etc.
MonJFrame appli = new MonJFrame();
ensuite, toutes les références à MonJFrame passeront par la variable (instance) appli.
Exemple:
appli.init();
appli.setVisible(true);
etc.