[Java - Forte] Je peux pas passer mes déclarations comme je veux !!!

Je peux pas passer mes déclarations comme je veux !!! [Java - Forte] - Java - Programmation

Marsh Posté le 30-03-2004 à 16:17:59    

Hello !
 
J'utilise Forte pour développer une interface graphique pour une appli Java. Le problème, c'est que quand j'ai une méthode ma classe qui fait bouger une barre de progression. Pour cela, dans ma méthode je fait :  
 

Code :
  1. progressCurrent.setValue(positionFichier.intValue());


 
Et voila l'erreur que j'obtiens :
 

Code :
  1. MonProjet.java [167:1] non-static variable progressCurrent cannot be referenced from a static context
  2.                     progressCurrent.setValue(positionFichier.intValue());


 
Je crois avoir compris que c'est parce que ma déclaration de ma progressBar est la suivante :
 

Code :
  1. private javax.swing.JProgressBar progressCurrent;


 
J'aimerai le changer à ceci :
 

Code :
  1. protected javax.swing.JProgressBar progressCurrent;


 
Mais Forte me laisse pas faire, il m'interdit de changer cette ligne (elle est sur fond gris comme toutes les lignes protégées par Forte.
Je me suis dis je vais être plus malin, je vais lancer mon éditeur de texte favoris, modifier le fichier puis relancer Forte et continuer mon dev. Et ben ça marche pas : Forte repasse la déclaration à private quand il ouvre le projet !! [:airforceone]
 
De plus, si j'essaie de compiler le projet en ligne de commande, ça passe, mais pas l'éxécution, ça fonctionne que dans Forte.
 
Alors quoi faire !!!!????? J'en peux plus là !!

Reply

Marsh Posté le 30-03-2004 à 16:17:59   

Reply

Marsh Posté le 30-03-2004 à 16:31:02    

Titalium a écrit :


Code :
  1. MonProjet.java [167:1] non-static variable progressCurrent cannot be referenced from a static context
  2.                     progressCurrent.setValue(positionFichier.intValue());




c'est pourtant clair, et ca n'a rien a voir avec ton ide...
 
tu déclares ta variable en tant que membre d'instance, et tu essaye d'y acceder sans passer par l'instance (dans une méthode static, donc).

Reply

Marsh Posté le 30-03-2004 à 18:28:05    

Tu pourrais être un peu plus clair s'il te plait ? Je comprends pas tout ce que tu dis là...

Reply

Marsh Posté le 30-03-2004 à 19:03:42    

Titalium a écrit :

Tu pourrais être un peu plus clair s'il te plait ? Je comprends pas tout ce que tu dis là...


depuis une méthode static, tu ne peux pas accéder à des attributs non-static de ta classe.


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 19:08:18    

Même combat, Forte m'empêche de passer ma déclaration  en static comme ça :
 

Code :
  1. private static javax.swing.JProgressBar progressCurrent;

Reply

Marsh Posté le 30-03-2004 à 19:17:00    

Titalium a écrit :

Même combat, Forte m'empêche de passer ma déclaration  en static comme ça :
 

Code :
  1. private static javax.swing.JProgressBar progressCurrent;

 


C'est pas forté c'est java.
 
Et plutot que de modifier ton code juste pour que le compilo arrête de geuler, tu ferrais mieux de réfléchir à ce qu'est une méthode ou un attribut static et à comprendre comment les utiliser ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 19:25:39    

benou a écrit :


C'est pas forté c'est java.
 
Et plutot que de modifier ton code juste pour que le compilo arrête de geuler, tu ferrais mieux de réfléchir à ce qu'est une méthode ou un attribut static et à comprendre comment les utiliser ...


 
Je vois que ce forum continue de devenir de plus en plus élitiste... Il me semble avoir été ni agressif ni irrespectueux. C'est vrai je suis assez ignorant en Java, est-ce pour cela que suis plus idiot qu'un autre ou que je dois me faire rentrer dedans comme ça ? Je n'en suis pas sur...
 
Maintenant, si quelqu'un veut bien m'expliquer calmement ce que je dois faire pour corriger mon code, je me ferai un plaisir de comprendre. Je précise, je n'ai pas accès à tout le net depuis mon taf, uniquement à quelques site dont HFR, donc je peux pas faire de recherche sur Google, d'où ce post.

Reply

Marsh Posté le 30-03-2004 à 19:29:40    

Je ne te suis jamais rentré dedans, je ne t'ai pas dis que tu étais idiot, je t'ai juste parlé franchement.
 
Et franchement, c'est un vrai conseil, essaye de comprendre le code que tu as écris plutot que de le modifier juqsu'à ce que ton IDE ne gueule plus ... C'est pas être méchant que de dire ca ...
 
Et puis avec ce que tu as donné comme code on ne peut pas savoir d'où vient l'erreur, mais c'est encore certainement des accès à des membre non static depuis des membres static. C'est classique comme erreur de débutant.
 
edit : et puis bon, pour continuer à être franc, ta sale humeur tu la gardes pour toi... encore une fois je le repête, personne n'a l'obligation de t'aider. C'est par "gentillesse" qu'on le fait.


Message édité par benou le 30-03-2004 à 19:32:06

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 19:36:59    

benou a écrit :

Je ne te suis jamais rentré dedans, je ne t'ai pas dis que tu étais idiot, je t'ai juste parlé franchement.
 
Et franchement, c'est un vrai conseil, essaye de comprendre le code que tu as écris plutot que de le modifier juqsu'à ce que ton IDE ne gueule plus ... C'est pas être méchant que de dire ca ...
 
Et puis avec ce que tu as donné comme code on ne peut pas savoir d'où vient l'erreur, mais c'est encore certainement des accès à des membre non static depuis des membres static. C'est classique comme erreur de débutant.


 
OK, désolé d'avoir réagi au quart de tour, mais y a des fois c'est penible... d'autant plus que je suis un habitué de Delphi et que c'est le genre de chose qu'il y a pa à gérer dedans.
 
Bon, pour résumer, j'ai une progressBar qui est déclarée dans ma classe en global. J'ai une méthode à moi qui lance en boucle une autre méthode qui copie des fichiers d'un dossier A à un dossier B, et pour controler le temps de copie, je fais avancer la progressBar. Donc pour schématiser :
 
Ma classe avec la progressBar
         Méthode UpdateFile() qui utilise UpdateStep(newFile, currentFile, bufferSize)
         UpdateStep qui essaie e faire avancer progressBar
 
Je ne comprend pas exactement ce qu'est une variable static et tout ça, comment corriger le code pour que ça passe.
 
Edit : j'avais pas vu ton Edit. Effectivement personne n'a obligation de m'aider, mais si c'est m'aider et au passage me rapeller à quelle point je suis ignorant comparé à l'excellence de certaines personne qui ont toujours tout compris à l'informatique sans jamais buter sur un problème puisqu'ils avaient la science infuse, je trouve pas ça sympa, c'est tout. De plus je suis de très bonne humeur :)


Message édité par Titalium le 30-03-2004 à 19:39:40
Reply

Marsh Posté le 30-03-2004 à 19:50:32    

Titalium a écrit :

... mais si c'est m'aider et au passage me rapeller à quelle point je suis ignorant comparé à l'excellence de certaines personne qui ont toujours tout compris à l'informatique sans jamais buter sur un problème puisqu'ils avaient la science infuse, je trouve pas ça sympa, c'est tout.


Maintenant je suis pas sympa ??? [:kiki]
Ca m'ennerve ca ... tu dis toi même que tu as pas compris ce que c'est que des membres static alors que c'es quand même un truc de base du java mais tu ne supportes pas qu'on se comporte avec toi comme si tu étais ignorant.
 
Ben désolé. En java tu es ignorant, tu es un débutant. Et comme j'aime pas trop ta façon de réagir, que j'ai pas envie de te faire un cours personnalisé de java et que acessoirement j'ai autre chose à faire (je suis au boulot, là), je te renvois à de la doc (que tu aurais dû toi même aller chercher) : http://penserenjava.free.fr/pens_2 [...] =01#01.019
 
Quand on est débutant, on apprend, et accessoirement on la ramène pas trop.
 

Titalium a écrit :

De plus je suis de très bonne humeur :)


et ben c'est pas communicatif


Message édité par benou le 30-03-2004 à 20:01:23

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 30-03-2004 à 19:50:32   

Reply

Marsh Posté le 30-03-2004 à 20:04:14    

Bon, pour ce qui est des explications avec benou, je passe en PV, pas la peine de pourrir le post. Je suis débutant oui, mais bon c'est pas une raison pour écraser de se science à tout va.
 
Pour ce qui est de la doc, je ne peux pas la consulter, mon internet passe pas sur 99.99% des adresses du Web. Je ne peux donc pas la consulter.
 
J'ai besoin de boucler ce prog rapidement, c'est pour ça que je demande juste si quelqu'un peut me dire comment corriger mon code afin que le soft tourne vite, je prendrai le temps de comprendre les choses après. Je sais, logiquement c'est pas comme ça qu'on fait, mais la j'ai pas le temps, impératifs pro oblige.
 
Merci d'avance aux bonnes âmes qui auront un peu de temps devant eux :jap:

Reply

Marsh Posté le 30-03-2004 à 20:13:56    

Titalium a écrit :

mais bon c'est pas une raison pour écraser de se science à tout va.


ste parano  ...
 
 
copié collé, désolé tu auras la VO et la VF  

Citation :


The static keyword
  Le mot-clef static  
   
Ordinarily, when you create a class you
are describing how objects of that class look and how they will behave. You
don?t actually get anything until you create an object of that class with
new, and at that point data storage is created and methods become
available.
  Normalement, quand on crée une classe, on décrit ce à quoi ressemblent les objets de cette classe et comment ils se comportent. Rien n'existe réellement avant de créer un objet de cette classe avec new ; à ce moment la zone de données est créée et les méthodes deviennent disponibles.  
   
But there are two situations in which
this approach is not sufficient. One is if you want to have only one piece of
storage for a particular piece of data, regardless of how many objects are
created, or even if no objects are created. The other is if you need a method
that isn?t associated with any particular object of this class. That is,
you need a method that you can call even if no objects are created. You can
achieve both of these effects with the static keyword. When you say
something is static, it means that data or method is not tied to any
particular object instance of that class. So even if you?ve never created
an object of that class you can call a static method or access a piece of
static data. With ordinary, non-static data and methods you must
create an object and use that object to access the data or method, since
non-static data and methods must know the particular object they are
working with. Of course, since static methods don?t need any
objects to be created before they are used, they cannot directly access
non-static members or methods by simply calling those other members
without referring to a named object (since non-static members and methods
must be tied to a particular object).
  Mais il y a deux situation pour lesquelles cette approche n'est pas suffisante. L'une, si on veut avoir une zone de stockage pour des données spécifiques, sans tenir compte du nombre d'objets créés, ou même si aucun objet n'a été créé. L'autre, si on a besoin d'une méthode qui n'est associée à aucun objet particulier de la classe. C'est à dire si on a besoin d'une méthode qui puisse être appelée même si aucun objet n'a été créé. On peut obtenir ces deux effets avec le mot-clef static. Dire que quelque chose est static signifie que la donnée ou la méthode n'est pas spécifiquement rattachée à un objet instance de cette classe. Donc, même si aucun objet de cette classe n'a jamais été créé il est possible d'appeler une méthode static ou d'accéder à une donnée static. Avec des données et des méthodes non static ordinaires il faut connaître l'objet spécifique avec lequel elles fonctionnent. Bien entendu, étant donné que les méthodes static n'ont pas besoin qu'un objet soit créé avant d'être utilisées, elles ne peuvent pas accéder directement à des membres ou des méthodes non static en appelant ces autres membres sans faire référence à un objet nommé (puisque les membres et méthodes non static doivent être rattachés à un objet spécifique).  
   
Some object-oriented languages use the
terms class data and class methods, meaning that the data and
methods exist only for the class as a whole, and not for any particular objects
of the class. Sometimes the Java literature uses these terms
too.
  Certains langages orientés objet emploient les expressions données de classe et méthodes de classe, ce qui signifie que les données et les méthodes n'existent que pour la classe en tant que tout et pas pour des objets particuliers de la classe. Parfois la littérature Java utilise aussi ces expressions.  
   
To make a data member or method
static, you simply place the keyword before the definition. For example,
the following produces a static data member and initializes
it:
 
  Pour rendre statique une méthode ou une donnée membre il suffit de mettre le mot-clef static avant la définition. Par exemple, le code suivant crée une donnée membre static et l'initialise :  
   
class StaticTest {
    static int i = 47;
}    
class StaticTest {
    static int i = 47;
}
 
   
Now even if you make two StaticTest objects, there will still be only one piece of storage for StaticTest.i. Both objects will share the same i. Consider:   Maintenant, même en créant deux objet StaticTest, il n'y aura qu'une seule zone de stockage pour StaticTest.i. Tous les objets partageront le même i. Considérons :  
   
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();    
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
 
   
At this point, both st1.i and st2.i have the same value of 47 since they refer to the same piece of memory.   à ce point, st1.i et st2.i ont la même valeur 47 puisqu'elles font référence à la même zone mémoire.  
   
There are two ways to refer to a static variable. As indicated above, you can name it via an object, by saying, for example, st2.i. You can also refer to it directly through its class name, something you cannot do with a non-static member. (This is the preferred way to refer to a static variable since it emphasizes that variable?s static nature.)   Il y a deux façons de faire référence à une variable static. Comme indiqué ci-dessus, il est possible de la nommer via un objet, en disant par exemple st2.i. Il est aussi possible d'y faire référence directement par le nom de la classe, ce qui ne peut pas être fait avec un membre non static (c'est le moyen de prédilection pour faire référence à une variable static puisque cela met en évidence la nature static de la variable).  
   
StaticTest.i++;
   
StaticTest.i++;
 
   
The ++ operator increments the
variable. At this point, both st1.i and st2.i will have the value
48.
  L'opérateur ++ incrémente la variable. À ce point, st1.i et st2.i auront tous deux la valeur 48.  
   
Similar logic applies to static methods.
You can refer to a static method either through an object as you can with any
method, or with the special additional syntax ClassName.method( ).
You define a static method in a similar way:
 
  Une logique similaire s'applique aux méthodes statiques. On peut faire référence à une méthode statique soit par l'intermédiaire d'un objet, comme on peut le faire avec n'importe quelle méthode, ou avec la syntaxe spécifique supplémentaire ClassName.method( ). Une méthode statique est définie de façon similaire :  
   
class StaticFun {
  static void incr() { StaticTest.i++; }
}    
class StaticFun {
  static void incr() { StaticTest.i++; }
}
 
   
You can see that the StaticFun method incr( ) increments the static data i. You can call incr( ) in the typical way, through an object:   On peut voir que la méthode incr( ) de StaticFun incrémente la donnée static i. On peut appeler incr( ) de façon classique, par le biais d'un objet :  
   
StaticFun sf = new StaticFun();
sf.incr();    
StaticFun sf = new StaticFun();
sf.incr();
 
   
Or, because incr( ) is a static method, you can call it directly through its class:   Ou, parce que incr( ) est une méthode statique, il est possible de l'appeler directement par sa classe :  
   
StaticFun.incr();
   
StaticFun.incr();
 
   
While static, when applied to a
data member, definitely changes the way the data is created (one for each class
vs. the non-static one for each object), when applied to a method
it?s not so dramatic. An important use of static for methods is to
allow you to call that method without creating an object. This is essential, as
we will see, in defining the main( ) method that is the entry point
for running an application.
  Alors que static, lorsqu'il est appliqué à une donnée membre, change sans aucun doute la façon dont la donnée est créée (une pour chaque classe par opposition à une pour chaque objet dans le cas des données non statiques), lorsqu'il est appliqué à une méthode, le changement est moins significatif. Un cas important d'utilisation des méthodes static est de permettre d'appeler cette méthode sans créer d'objet. C'est essentiel, comme nous le verrons, dans la définition de la méthode main( ) qui est le point d'entrée pour exécuter une application.  
   
Like any method, a static method
can create or use named objects of its type, so a static method is often
used as a ?shepherd? for a flock of instances of its own
type.
  Comme pour toute méthode, une méthode statique peut créer ou utiliser des objets nommés de son type, ainsi les méthodes statiques sont souvent utilisées comme « berger » pour un troupeau d'instances de son propre type.  


 


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 31-03-2004 à 11:19:13    

OK, merci benou, j'y vois plus clair concernant les contextes static. J'ai corrigé mon code en fonction, la compilation fonctionne à merveille, mais pas l'éxéc, c'est à dire que la copie du fichier s'effectue correctement, mais pas la progression de la barre. Je me remet dessus afin de corriger le tir.
 
Après nous être expliqué, j'espère qu'on pourra enterrer la hâche de guerre. La main tendue que représentait un copier/coller de la doc est une preuve de bonne volonté et fait preuve d'une grande gentillesse.

Reply

Marsh Posté le 31-03-2004 à 22:51:15    

J'aimerais bien, et j'aprécie tes remerciements
 
mais j'ai l'impression que tu te rends pas compte à quel point le comportement que tu as eu est désagréable ... Tu me prends et me fais passer pour quelqu'un que je ne suis pas et que j'exècre alors même que j'essayais de t'aider.
 
bref, passons ...

Reply

Marsh Posté le 31-03-2004 à 23:55:04    

N'en remet pas une couche, ça va repartir en sucette ;)

Reply

Marsh Posté le 15-04-2004 à 15:33:00    

Calmez-vous les gars !!!
 

Code :
  1. MonProjet.java [167:1] non-static variable progressCurrent cannot be referenced from a static context
  2. progressCurrent.setValue(positionFichier.intValue());


 
en français dans le texte, ça dit que tu ne peux pas utiliser le membre progressCurrent de ta classe dans une méthode qui contient static dans sa signature
 
Exemple a ne pas suivre :
 

Code :
  1. public class MaClasse
  2. {
  3. private String monAttribut;
  4. public static void maMethodeStatique()
  5. {
  6. monAttribut = "une chaine";
  7. }
  8. }


 
dans cet exemple:

  • monAttribut est une non-static variable.
  • maMethodeStatique() est une méthode statique


donc tu ne peux pas utiliser monAttribut (non-static) dans maMethodeStatique() (static)
 
 
CQFD


Message édité par pascal34 le 15-04-2004 à 15:35:17
Reply

Marsh Posté le 15-04-2004 à 15:55:54    

pascal34 a écrit :

Calmez-vous les gars !!!


ca te sert à quoi de déterrer ce genre de topic foireux ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-04-2004 à 15:56:52    

et les autres d'a coté aussi d'ailleurs.

Reply

Marsh Posté le 15-04-2004 à 15:57:19    

ouais, j'ai vu ca après :/
 
dites non à la nécrophilie :o


Message édité par benou le 15-04-2004 à 15:57:57

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 15-04-2004 à 16:39:43    

benou a écrit :


ca te sert à quoi de déterrer ce genre de topic foireux ?


 
Si je peux l'aider pour ça je le fais. Ce sera peut-être lui qui
me dépatouillera d'un autre truc dans un autre langage.
 
Pour moi un forum c'est fait pour discuter et s'entre-aider, pas pour étaler sa science et rabaisser ceux qui sont moins bons.  :jap:  

Reply

Marsh Posté le 15-04-2004 à 16:40:54    

ouais, mais vu la date, le mec est plus la depuis un bail.
et autant dans ce topic ta contribution peut etre utile, autant redire ce qui a été dit dans une réponse précédente ne sert a rien.

Reply

Marsh Posté le 15-04-2004 à 16:56:40    

lorill a écrit :

autant redire ce qui a été dit dans une réponse précédente ne sert a rien.


 
toutafé :o

Reply

Marsh Posté le 15-04-2004 à 16:58:20    


 [:lorill]

Reply

Marsh Posté le 15-04-2004 à 16:59:22    

[:joce]


Message édité par darklord le 15-04-2004 à 16:59:28
Reply

Marsh Posté le 15-04-2004 à 17:09:08    


1- Sa dernière réponse datait du 31/03 et pour moi ça date pas.
2- j'en ai plus dit avec mon explication de 10 lignes qu'avec un copier-coller de 500 lignes en anglais.
 
[:aldark]

Reply

Marsh Posté le 15-04-2004 à 17:13:48    

15 jours, c'est vieux.
maintenant jveux pas t'empecher de répondre hein, si ca t'amuses... c'est juste que ca ne me semble pas pertinent.

Reply

Marsh Posté le 15-04-2004 à 17:18:00    

pascal34 a écrit :


2- j'en ai plus dit avec mon explication de 10 lignes qu'avec un copier-coller de 500 lignes en anglais.


si tu avais lu attentivement, tu aurais vu que y avait la traduction français en dessous de chaque paragraphe.  
 
Mais bon, de toute façon c'était un topic foireux, sur un problème à la con ... je pense que le gars s'en est sortit depuis 15j ...
 
edit : et puis une réponse claire était déjà apporté au 4e post ...


Message édité par benou le 15-04-2004 à 17:19:28

---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 16-04-2004 à 09:09:03    

Décidement, ce topic ne sera pas bercé par la joie et l'amour ;)
 
Merci Pascal pour ton intervention, c'est cool de ta part. A charge de revanche. Par contre c'est vrai que je m'en suis sorti plus d'une semaine, entre autre grâce à ceux avec qui je me suis engueulé au début du post.
 
Donc 1 partout, balle au centre. Laissons ce topic couler dans les profondeurs du forum, et concentrons nous sur des sujets plus neufs.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed