classe anonyme et création de thread à la volée

classe anonyme et création de thread à la volée - Java - Programmation

Marsh Posté le 22-08-2002 à 16:01:16    

vouala
 

Code :
  1. public class titi {
  2.    // ...
  3.    public void f() {
  4.       new Thread() {
  5.          // [marche po]
  6.          public Thread() (
  7.               super("monThread" );
  8.               start();
  9.          }
  10.          // [/marche po]
  11.          public void run() {
  12.               fonctionCouteuse();
  13.          }
  14.       }
  15.    }

 
 
Bon alors 2 choses :
 * Soit vous trouvez ça super crade, et vous me proposez autre chose (ou vous me laissez pleurer)
 * Soit vous avez une idée de pourquoi ça me sort :
 
invalid method declaration; return type required
            public Thread() {
                   ^
 
Merci


Message édité par bobuse le 22-08-2002 à 16:18:31
Reply

Marsh Posté le 22-08-2002 à 16:01:16   

Reply

Marsh Posté le 22-08-2002 à 16:04:08    

...et public void Thread c pas mieux !? :D

Reply

Marsh Posté le 22-08-2002 à 16:05:01    

El_Gringo a écrit a écrit :

...et public void Thread c pas mieux !? :D




Ben void pour un constructeur, ci pas top  ;)

Reply

Marsh Posté le 22-08-2002 à 16:06:05    

Thinking in java c'est bien :
 

Code :
  1. public class Parcel9 {
  2.   public Destination
  3.   dest(final String dest, final float price) {
  4.     return new Destination() {
  5.       private int cost;
  6.       // Initialisation d'instance pour chaque objet :
  7.       {
  8.         cost = Math.round(price);
  9.         if(cost > 100)
  10.           System.out.println("Over budget!" );
  11.       }      private String label = dest;
  12.       public String readLabel() { return label; }
  13.     };
  14.   }
  15.   public static void main(String[] args) {
  16.     Parcel9 p = new Parcel9();
  17.     Destination d = p.dest("Tanzania", 101.395F);
  18.   }
  19. } ///:~

Reply

Marsh Posté le 22-08-2002 à 16:06:53    

le bloc que j'ai mit en rouge sert de constructeur.
par contre, si tu veux mettre des paramètres à ce constructeur, là je sais pas ...

Reply

Marsh Posté le 22-08-2002 à 16:08:23    

mirci bocoup. Maintenant ça me revient ! Je l'avais lu quelque part, mais je savais plus où, et c'est pour ça que j'ai demandé :D  
Merci.
 
Et sinon, au niveau "propreté", ça va, où je me plante ?
 
Il me semble que pour créer un petit thread c'est justifié ...

Reply

Marsh Posté le 22-08-2002 à 16:10:05    

benou a écrit a écrit :

le bloc que j'ai mit en rouge sert de constructeur.
par contre, si tu veux mettre des paramètres à ce constructeur, là je sais pas ...




Arggh
 

Code :
  1. {
  2.                 super("initialisation de la partie" );
  3.                 start();
  4.             }

 
 

Citation :

call to super must be first statement in constructor
                super("initialisation de la partie" );
                     ^

Reply

Marsh Posté le 22-08-2002 à 16:10:11    

bobuse a écrit a écrit :

 
Et sinon, au niveau "propreté", ça va, où je me plante ?
 
Il me semble que pour créer un petit thread c'est justifié ...




niveau propreté, c'est dégeulasse ! ;)
 
tu ferais miex de créer une class (interne si tu as besoin) qui implémente runable. ensuite tu passes cette classe en paramètre du constructeur de la class Thread et tu fais un start dessus.
 
regarde la javadoc de Thread et de Runable ...

Reply

Marsh Posté le 22-08-2002 à 16:12:07    

bobuse a écrit a écrit :

 
Arggh

Citation :

call to super must be first statement in constructor
                super("initialisation de la partie" );
                     ^

 




 

Code :
  1. public class titi {
  2.       // ...  
  3.        public void f() {
  4.             new Thread("monThread" ) {
  5.                {
  6.                       start();
  7.                }
  8.                public void run() {
  9.                       fonctionCouteuse();
  10.                }
  11.           }
  12.      }

Reply

Marsh Posté le 22-08-2002 à 16:12:18    

benou a écrit a écrit :

 
niveau propreté, c'est dégeulasse ! ;)
 
tu ferais miex de créer une class (interne si tu as besoin) qui implémente runable. ensuite tu passes cette classe en paramètre du constructeur de la class Thread et tu fais un start dessus.
 
regarde la javadoc de Thread et de Runable ...  




Ha bon ?
Je sais comment fonctionne Thread et Runnable (merci kan même).
Mais bon, c'est plus lisible comme ça et ça revient au même, en plus je vais l'utiliser q'une fois ce thread

Reply

Marsh Posté le 22-08-2002 à 16:12:18   

Reply

Marsh Posté le 22-08-2002 à 16:13:45    

benou a écrit a écrit :

 
 

Code :
  1. public class titi {
  2.       // ...  
  3.        public void f() {
  4.             new Thread("monThread" ) {
  5.                {
  6.                       start();
  7.                }
  8.                public void run() {
  9.                       fonctionCouteuse();
  10.                }
  11.           }
  12.      }





[:nowad]
 
c bon!  ça marche capitaine, ça marche !


Message édité par bobuse le 22-08-2002 à 16:14:59
Reply

Marsh Posté le 22-08-2002 à 16:13:49    

a la rigueur, fait plutot ca :  
 

Code :
  1. public void f() {
  2.      new Thread("monThread" ) {
  3.         public void run() { fonctionCouteuse(); }
  4.      }.start();
  5.   }

Reply

Marsh Posté le 22-08-2002 à 16:14:15    

bobuse a écrit a écrit :

[:nowad]




ca marche pas ?


Message édité par benou le 22-08-2002 à 16:14:26
Reply

Marsh Posté le 22-08-2002 à 16:16:58    

benou a écrit a écrit :

 
ca marche pas ?




Si ça marche

benou a écrit a écrit :

a la rigueur, fait plutot ca :

Code :
  1. public void f() {
  2.      new Thread("monThread" ) {
  3.         public void run() { fonctionCouteuse(); }
  4.      }.start();
  5.   }






Ha ouais sympa !

Reply

Marsh Posté le 22-08-2002 à 16:17:17    

El_Gringo a écrit a écrit :

...et public void Thread c pas mieux !? :D




 
 :heink:  
 
 
 :lol:

Reply

Marsh Posté le 22-08-2002 à 16:17:40    

je viens de tester et ca ca marche :
 

Code :
  1. public class TestThread {
  2.    public static void main (String[] args) {
  3.          new Thread("monThread" ) { 
  4.             { start(); }
  5.             public void run() { System.out.println("coucou" ); } 
  6.          };
  7.     }
  8. }


 
mais je préfère cette version :  

Code :
  1. public class TestThread {
  2.    public static void main (String[] args) {
  3.          new Thread("monThread" ) { 
  4.               public void run() { System.out.println("coucou" ); } 
  5.          }.start(); 
  6.     }
  7. }


Message édité par benou le 22-08-2002 à 16:18:24
Reply

Marsh Posté le 22-08-2002 à 16:18:55    

sinon, c'est quoi l'intéret de commer ton thread ?

Reply

Marsh Posté le 22-08-2002 à 16:20:00    

benou a écrit a écrit :

je viens de tester et ca ca marche :
 

Code :
  1. public class TestThread {
  2.    public static void main (String[] args) {
  3.          new Thread("monThread" ) { 
  4.             { start(); }
  5.             public void run() { System.out.println("coucou" ); } 
  6.          };
  7.     }
  8. }


 
mais je préfère cette version :  

Code :
  1. public class TestThread {
  2.    public static void main (String[] args) {
  3.          new Thread("monThread" ) { 
  4.               public void run() { System.out.println("coucou" ); } 
  5.          }.start(); 
  6.     }
  7. }






Je confirme!
J'adopte la deuxième, et je vais en foutre partout  :D  :D  :D  
 ;)

Reply

Marsh Posté le 22-08-2002 à 16:20:36    

benou a écrit a écrit :

sinon, c'est quoi l'intéret de commer ton thread ?




Bin, pour le debuggage ...

Reply

Marsh Posté le 22-08-2002 à 16:21:31    

bobuse a écrit a écrit :

 
Ha bon ?
Je sais comment fonctionne Thread et Runnable (merci kan même).
Mais bon, c'est plus lisible comme ça et ça revient au même, en plus je vais l'utiliser q'une fois ce thread




Ben non justement, c'est pas plus lisible.  :sarcastic:  
 
En général, dans ces cas là, moi, je fais une inner class privée non anonyme (si possible statique). La seule différence avec une classe anonyme, c'est juste qu'elle a un nom (ça documente un peu plus...), et pour le compilo ou la machine virtuelle, ça ne change absolument rien d'autre. Et si elle doit grandir, ben... elle est déjà prête.
 
Au passage, si tu rends ton inner classe statique, la création de l'objet est un poil plus légère aussi.

Reply

Marsh Posté le 22-08-2002 à 16:21:49    

qu'est ce que ca t'apporte pour le débugage ?

Reply

Marsh Posté le 22-08-2002 à 16:25:05    

[:blueflag]

Reply

Marsh Posté le 22-08-2002 à 16:27:54    

benou a écrit a écrit :

qu'est ce que ca t'apporte pour le débugage ?




bin pour suspendre des threads ... ou pour les suivre ... je sais pas trop, mais je préfère les nommer, comme ça si j'en ai besoin, c'est prêt ...

Reply

Marsh Posté le 22-08-2002 à 16:45:15    

bobuse a écrit a écrit :

 
bin pour suspendre des threads ... ou pour les suivre ... je sais pas trop, mais je préfère les nommer, comme ça si j'en ai besoin, c'est prêt ...




ouais d'accord :sarcastic:  
 
 
 
:D ;)

Reply

Marsh Posté le 22-08-2002 à 16:47:25    

Encore mieux :

Code :
  1. public class TestThread {
  2.   public static void main(String[] args) {
  3.     Thread  myThread = new Thread("monThread" ) { 
  4.           public void run() {
  5.             System.out.println("coucou" );
  6.           }
  7.         };
  8.     myThread.start();
  9.   }
  10. }


Reply

Marsh Posté le 22-08-2002 à 16:49:39    

bha ouais mais moi j'aime bien éviter de déclarer les variables quand je peux. la c'est typiquement le ca ...  
 
new Truc.machin() ca rulez ! ;)

Reply

Marsh Posté le 22-08-2002 à 16:50:17    

BifaceMcLeOD a écrit a écrit :

Encore mieux :

Code :
  1. public class TestThread {
  2.   public static void main(String[] args) {
  3.     Thread  myThread = new Thread("monThread" ) { 
  4.           public void run() {
  5.             System.out.println("coucou" );
  6.           }
  7.         };
  8.     myThread.start();
  9.   }
  10. }





 
tsst tsst, ça fait deux instructions là !
 :p


Message édité par bobuse le 22-08-2002 à 16:51:00
Reply

Marsh Posté le 22-08-2002 à 16:51:43    

benou a écrit a écrit :

bha ouais mais moi j'aime bien éviter de déclarer les variables quand je peux. la c'est typiquement le ca ...  
 
new Truc.machin() ca rulez ! ;)




Moi aussi, j'aime faire ça... sauf quand la classe est anonyme ! Parce que l'appel à la méthode machin() passe complètement inaperçu, du coup !
Il y a des moments où la compacité du code a ses limites....  :sarcastic:


Message édité par BifaceMcLeOD le 22-08-2002 à 16:52:16
Reply

Marsh Posté le 22-08-2002 à 17:38:46    

BifaceMcLeOD a écrit a écrit :

 
Moi aussi, j'aime faire ça... sauf quand la classe est anonyme ! Parce que l'appel à la méthode machin() passe complètement inaperçu, du coup !
Il y a des moments où la compacité du code a ses limites....  :sarcastic:  




bha dans ce cas là ca va : c'est bien indenté, donc on voit.
et puis d etoute façon un Thread anonyme, ca sert à rien d'autre que d'être lancé totu de suite ! ;)

Reply

Marsh Posté le 23-08-2002 à 09:17:16    

Pour la petite histoire, je l'ai des-anonymisée ma classe ! :lol:  :D  ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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