[JAVA] impossible d'executer une fonction.

Résolu/Fermé
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 - 16 févr. 2008 à 02:14
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 - 16 févr. 2008 à 15:07
Bonjour à toute la communauté,

J'ai un énorme problème en JAVA. J'ai un exercice à faire.
Je dois lire une base ACCESS contenant une table (jour, mois, volume) et faire une applet qui dessine un graphique indiquant le volume pour un mois donné.
J'arrive à lire ma table, à dessiner mon graphique, mais le problème, c'est que je n'arrive pas à faire le lien entre les deux.
Je exécuter la fonction lire_base() une fois pour pouvoir remplir mes variables globales.
Voici mon code :

import java.applet.*;
import java.awt.*;
import java.sql.*;
import javax.swing.*;

public class graphique extends JApplet
{
	public int nb_enr;
	public int jours[];
	public int volume[];
	public void start()
	{
			lire_base();     // Ici, c'est souligné en rouge. Il faut ajouter throws Exception apparament, mais ça ne fonctionne pas.
	}
	public void paint (Graphics g)    // C'est ici que je dessine mon graphique. 9a fonctionne quand je met les valeurs directement dans le code.
	{
		int i = 0;
		nb_enr=30;
		setSize(800,600);
		g.drawLine(50,50,50,575);
		g.drawLine(25,550,700,550);

		for (i=1; i<=nb_enr; i++)
		{
			g.drawLine((50+(i*20)),560,(50+(i*20)),(volume[i]/2));
		}
	}
	public void init()    // Honnêtement, je ne sais pas trop quoi mettre la dedans ;-)
	{
		
	}
	public void lire_base() throws Exception     // Cette fonction donne des valeurs aux variables définies plus haut (elle fonctionne)
	{
		nb_enr=0;
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		Connection conn = DriverManager.getConnection("jdbc:odbc:DRIVER=Microsoft Access Driver (*.mdb); DBQ=C:\\Users\\Vince\\Documents\\Eclipse\\graphique_access\\bd.mdb;","","");
		Statement stmt = conn.createStatement();
		String sql = ("Select * from stat where mois = 'janvier';");
		ResultSet rs = stmt.executeQuery(sql);
		while(rs.next())
		{
			nb_enr++;
			jours[nb_enr]=Integer.parseInt(rs.getString("jour"));
			String mois = rs.getString("mois");
			volume[nb_enr] = Integer.parseInt(rs.getString("taille"));
//			System.out.println(jour+" "+mois+" "+taille+" MB");
		}
	}
}


Si quelqu'un à une solution à mon problème, ou un simple commentaire à me faire, il sera le bienvenu.
Merci.
A voir également:

6 réponses

cchristian Messages postés 921 Date d'inscription lundi 21 janvier 2008 Statut Membre Dernière intervention 6 mars 2012 131
16 févr. 2008 à 05:16
Bonjour,

Je ne connais rien à JAVA, mais une chose m'a intrigué en survolant ton code : (je vais peut-être t'écrire une grosse c......)

nb_enr est initialisé à 0 et progresse avec ++ dans LIRE_BASE à concurrence du nombres de lignes du mois de janvier. Je présume que en JAVA comme en C, avec ++ chaque incrémentation fait progresser la variable/indice (nb_enr) APRES son utilisation dans l'instruction où ++ est codé, et que le premier élément d'un tableau est référencé par la valeur 0 (exemple volume [nb_en++]=....... si on raisonne sur la 1ere itération elle équivaut à volume [0]=..... et ensuite nb_enr passe à 1). Dans ton cas et dans cette hypothèse tu fais un comptage du nombre de lignes par : nb_enr++ et ensuite tu l'utilises comme indice sous la forme volume [nb_enr] à ce niveau nb_enr a une valeur +1 par rapport à celle qu'il devrait avoir. Il suffirait donc d'éliminer l'instruction nb_enr++ et d'ajouter ++ à l'instruction : volume [nb_enr]=........soit : volume [nb_enr++]=............
De même dans PAINT tu définis et tu initialises la variable i à 0 (int i = 0;) alors que dans la boucle for (for (i=1; i<=nb_enr; i++)) tu l'initialises à la valeur 1 pour "démarrer" l'itération.
Si mon raisonnement précédent sur les tableaux est juste, le même en JAVA et en C, tu "sautes" le 1er élément du tableau volume dans cette boucle (lequel élément n'avait de toute façon pas été renseigné dans LIRE_BASE ni initialisé ailleurs). Si, comme en C, ce premier élément est susceptible d'être renseigné avec une valeur particulière, '\0' par exemple, tous les coups sont permis..............

Dans le cas contraire, si en JAVA le premier élément d'un tableau est référencé par la valeur 1 (comme en COBOL par exemple) ne tiens pas compte de mes élucubrations........
0
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 745
16 févr. 2008 à 11:58
Salut,

En fait, je ne sais pas trop. Je pense que les tableaux commencent à 0 en JAVA.
Mais vu que je ne rempli pas la première ligne, je me suis dit que ça n'était pas un problème.
Merci du conseil en tout cas, mais mon problème est toujours la.
merci et à +.
0
Bonjour je ne comprends pas bien ta question tu n'arrives pas à faire le lien et ta courbe et le resultat de ta base de données est cela?
si c'est cela je te propose de recuperer tes données dans objet ResultSetMetaData permettant de conserver la trannsformation des fichiers...bref puis tu les recuperes dans un tableau d'objets.Par ailleurs il faut te rassurer que les données de ta courbe sont à chaque fois contenues dans un tableau d'objets.alors apres le resultat de ta requete dans ce tableau d'objets(enfin une matrice) tu vas faire appel à tes fonctions pour l'afficher ta courbe.
s'il y a une chose que tu comprends repose ta question ou pose moi des questions.
bon courage.
0
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 745
16 févr. 2008 à 12:53
Salut,

J'ai pas compris !!!! :-)
Je débute en Java, et je ne sais pas ce qu'est un ResultSetMetaData.
Moi ce que je veux, c'est pouvoir exécuter ma procédure lire_base() une fois pour que les tableaux se remplissent avec les données.
Le problème, c'est que dans ma proc start(), il me souligne lire_base() et met comme erreur : "Unhandled exception type Exception".
Il me fait rajouter "throws Exception", mais dans ce cas, j'ai ce message "Exception Exception is not compatible with throws clause in Applet.start()".

Je voudrais seulement exécuter ma procédure lire_base(), même si c'est n'importe où dans le code.
0

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

Posez votre question
change ta methode start par ceci:
public void start(){
try{lire_base();}
catch(Exception e){System.erre.println(e.getMessage();}
}
et le tour est joué.
Mais je ne comprens pas pourquoi tu utilise la méthode start...le mieu c'est d'utilier la méthode init() dans une applet car c'est elle qui appel l'instance de ton applet l'initialise et bien d'autres.
Je suis à ta disposition pour d'autres questions.
0
Lazarey Messages postés 3239 Date d'inscription vendredi 3 novembre 2006 Statut Membre Dernière intervention 21 mai 2012 745
16 févr. 2008 à 15:07
C'est bon !!!!!!!
Ca fonctionne. J'ai fait comme tu m'as dit, mais j'ai créé des fonctions dans une nouvelle classe, et j'ai utilisé try et catch.
Merci beaucoup. A+.
0