Probleme de démarage d'un programme Java

Pantxo1986 Messages postés 65 Statut Membre -  
Pantxo1986 Messages postés 65 Statut Membre -
Bonjour,

Je viens de finir de coder un programme Java sous Netbean 6.1, il me construit le programme qui est sans erreur ni warning mais il ne veut pas me le lancer. Que doit-je faire ?
A voir également:

25 réponses

sandul Messages postés 4013 Statut Membre 723
 
Salut,

mais il ne veut pas me le lancer.
==> as-tu des erreurs au lancement? Lesquelles? Que fais-tu exactement pour le lancer?

++
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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.
0
sandul Messages postés 4013 Statut Membre 723
 
Est-ce possible de poster le code (même tronqué, en laissant uniquement ta classe avec ton main dedans)?
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
/**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);
}
};
});
}
0
sandul Messages postés 4013 Statut Membre 723
 
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).

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pantxo1986 Messages postés 65 Statut Membre 1
 
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.
0
sandul Messages postés 4013 Statut Membre 723
 
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 :-)
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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é
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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 :

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.
0
sandul Messages postés 4013 Statut Membre 723
 
Re,

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".

++
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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.
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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
0
sandul Messages postés 4013 Statut Membre 723
 
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:
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));
		}
	}
}
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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?
0
sandul Messages postés 4013 Statut Membre 723
 
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...
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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
0
sandul Messages postés 4013 Statut Membre 723
 
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.
0
ismailtwo Messages postés 10 Statut Membre 1
 
oui je suis d'accord avec sandul
0
sandul Messages postés 4013 Statut Membre 723
 
Muchas gracias, hombre :)
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
En faite c un fichier DLL, un Properties et un jar
0
sandul Messages postés 4013 Statut Membre 723
 
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?
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
C'est vrai que sa serai plus simple mé je ne voit pas du tout comment faire.
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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 :
    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);
0
sandul Messages postés 4013 Statut Membre 723
 
Salut,

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...
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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.
0
sandul Messages postés 4013 Statut Membre 723
 
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)
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
Donc les déclarations de variable doit être static aussi
0
sandul Messages postés 4013 Statut Membre 723
 
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.
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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);
0
sandul Messages postés 4013 Statut Membre 723
 
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;
	}
}
0
sandul Messages postés 4013 Statut Membre 723
 
Et aussi:
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.
0
Pantxo1986 Messages postés 65 Statut Membre 1
 
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?
0
sandul Messages postés 4013 Statut Membre 723
 
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.
0