Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1179 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Récupérer une erreur de methode inexistante

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Récupérer une erreur de methode inexistante

n°181557
kakou
bin voila
Posté le 24-07-2002 à 13:05:56  profilanswer
 

voila je veux faire un truc de chargement de font pour un apllet mais les methode n'existe po dans les ancienne jvm
alors je voudrais l'erreur NoSuchMethodError pour en passer d'autre qui existe.
 
Mais je n'aarive po a récuperer ni avec un java.lang.NoSuchMethodError  
ni avec un Exception
ni avec un error
(dans des try{ }catch(){ } bien sur )
 
si quelqu'un sait comment faire

mood
Publicité
Posté le 24-07-2002 à 13:05:56  profilanswer
 

n°181602
benou
Posté le 24-07-2002 à 14:14:04  profilanswer
 

c'est parce que la vérification de l'erreur se fait au chargement de la classe ... pas lors de l'appel.
 
Il faut que tu fasse un appel dynamique de la méthode (tonObjet.getClass().getMethod("taMethod", new Class[] {tonTableauDeType}).invoke(new Object[]{tesParams}).
 
La dessus, tu pourras catcher le NoSuchMethodException

n°181607
Cherrytree
cn=?
Posté le 24-07-2002 à 14:15:55  profilanswer
 

benou a écrit a écrit :

c'est parce que la vérification de l'erreur se fait au chargement de la classe ... pas lors de l'appel.
 
Il faut que tu fasse un appel dynamique de la méthode (tonObjet.getClass().getMethod("taMethod", new Class[] {tonTableauDeType}).invoke(new Object[]{tesParams}).
 
La dessus, tu pourras catcher le NoSuchMethodException



Je suis preneur d'un topo là dessus, à l'occasion, ô [:tonton_benou]


---------------
Le site de ma maman
n°181611
benou
Posté le 24-07-2002 à 14:17:42  profilanswer
 

Cherrytree a écrit a écrit :

Je suis preneur d'un topo là dessus, à l'occasion, ô [:tonton_benou]




sur quoi ? l'invocation dynamique ?

n°181612
benou
Posté le 24-07-2002 à 14:18:06  profilanswer
 

Cherrytree a écrit a écrit :

Je suis preneur d'un topo là dessus, à l'occasion, ô [:tonton_benou]




et puis c'est juste [: benou] pour le moment ...

n°181643
Cherrytree
cn=?
Posté le 24-07-2002 à 14:34:09  profilanswer
 

benou a écrit a écrit :

 
et puis c'est juste [: benou] pour le moment ...



ça m'a tout l'air de marcher ?! :??:


---------------
Le site de ma maman
n°181646
benou
Posté le 24-07-2002 à 14:34:49  profilanswer
 

Cherrytree a écrit a écrit :

ça m'a tout l'air de marcher ?! :??:




je viens de le changer ;)

n°181660
bobuse
Posté le 24-07-2002 à 14:41:39  profilanswer
 

Cherrytree a écrit a écrit :

Je suis preneur d'un topo là dessus, à l'occasion, ô [:tonton_benou]



moi aussi je suis preneur, car j'ai pas bien tout pigé !

n°181669
Cherrytree
cn=?
Posté le 24-07-2002 à 14:47:33  profilanswer
 

benou a écrit a écrit :

 
sur quoi ? l'invocation dynamique ?



OUIIIIIII ! [:yorik] [:pop satory] [:ludal the lethal]


---------------
Le site de ma maman
n°181679
kakou
bin voila
Posté le 24-07-2002 à 14:56:25  profilanswer
 

bon je vais tester
 c'est vrai que j'avais po penser que ca venez avec l'invocation lors du classloader

mood
Publicité
Posté le 24-07-2002 à 14:56:25  profilanswer
 

n°181697
benou
Posté le 24-07-2002 à 15:14:26  profilanswer
 

Cherrytree a écrit a écrit :

OUIIIIIII ! [:yorik] [:pop satory] [:ludal the lethal]  




heu ... ben on verra ca ce soir ... si j'ai le temps après le tennis.
 
faut quand même que je bosse un minimum pour mériter mon salaire ...

n°181700
Cherrytree
cn=?
Posté le 24-07-2002 à 15:16:32  profilanswer
 

benou a écrit a écrit :

 
heu ... ben on verra ca ce soir ... si j'ai le temps après le tennis.
 
faut quand même que je bosse un minimum pour mériter mon salaire ...



[:totozzz] Pas faux. Bon tennis.


---------------
Le site de ma maman
n°182166
kakou
bin voila
Posté le 24-07-2002 à 21:41:04  profilanswer
 

Voila j'ai encore un prob :
 
Font f;
Class ff=f.getClass();
Method g=ff.getMethod("createFont",new Class[]{int,InputStream});
g.invoke(new Object[]{Font.TRUETYPE_FONT,is});
 
ca ne marche po car il me demande une classe et int n'en est po une.
Comment faire?

n°182189
kakou
bin voila
Posté le 24-07-2002 à 22:09:27  profilanswer
 

ca y est ca marche pour ce que ca interesse, ma methode pour charger verdana  
 
 

Code :
  1. public static Font getDF(){
  2.        try{
  3. Class cl = (Class.forName("com.splendid.awtchat.SmileyTextArea" ) instanceof Class)
  4.     ? (Class) Class.forName("com.splendid.awtchat.SmileyTextArea" ) : Class.forName("com.splendid.awtchat.SmileyTextArea" ).getClass();
  5. InputStream is = cl.getResourceAsStream("verdana.ttf" );
  6. //(tonObjet.getClass().getMethod("taMethod", new Class[] {tonTableauDeType}).invoke(new Object[]{tesParams})..invoke(new Object[]{Font.TRUETYPE_FONT,is})
  7. Font f=new Font("Dialog", Font.PLAIN, 12);
  8.         Method gg=(Font.class.getMethod("createFont",new Class[]{int.class,InputStream.class}));//
  9.         gg.invoke(f,new Object[]{new Integer(Font.TRUETYPE_FONT),is});
  10. gg=(Font.class.getMethod("deriveFont",new Class[]{int.class,float.class}));//
  11.         gg.invoke(f,new Object[]{new Integer(Font.PLAIN),new Float(11)});
  12.       return f;
  13.     }catch(Exception e){
  14. System.out.println(e);
  15. return new Font("Dialog", Font.PLAIN, 12); // ("Dialog"/10->wrong width-sizes on my compi (?))
  16.     }
  17.     }


Message édité par kakou le 24-07-2002 à 22:51:14
n°182203
kakou
bin voila
Posté le 24-07-2002 à 23:16:28  profilanswer
 

par contre impossible de transcrire
 
String fontNames[] =GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
 
pour pouvoir en gérer les exception

n°182210
benou
Posté le 24-07-2002 à 23:30:31  profilanswer
 

kakou a écrit a écrit :

ca y est ca marche pour ce que ca interesse, ma methode pour charger verdana  
 
 

Code :
  1. public static Font getDF(){
  2. [..]






 
il est très bizarre ton code, je me permet de le nettoyer ...

Code :
  1. public static Font getDF(){
  2.       try{
  3.  Class cl = Class.forName("com.splendid.awtchat.SmileyTextArea" );
  4.  InputStream is = cl.getResourceAsStream("verdana.ttf" );
  5.  Font f = new Font("Dialog", Font.PLAIN, 12);
  6.  Method gg = (Font.class.getMethod("createFont",new Class[]{int.class,InputStream.class}));
  7.  gg.invoke(f, new Object[]{new Integer(Font.TRUETYPE_FONT), is});
  8.  gg = (Font.class.getMethod("deriveFont", new Class[]{int.class, float.class}));
  9.  gg.invoke(f, new Object[]{new Integer(Font.PLAIN), new Float(11)});
  10.  return f;
  11.       }catch(Exception e){
  12.  System.out.println(e);
  13.  return new Font("Dialog", Font.PLAIN, 12);// ("Dialog"/10->wrong width-sizes on my compi (?))
  14.       }
  15.    }


c'était bizarre ton forName instanceOd Class du départ ... je comprend pas bien à quoi il servait ...


Message édité par benou le 24-07-2002 à 23:31:01
n°182211
benou
Posté le 24-07-2002 à 23:31:45  profilanswer
 

kakou a écrit a écrit :

par contre impossible de transcrire
 
String fontNames[] =GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
 
pour pouvoir en gérer les exception




hein ???

n°182217
kakou
bin voila
Posté le 24-07-2002 à 23:40:27  profilanswer
 

oui j'ai po encore nettoyer la classe getDF
 
pour le debut je sais po c'est un copier coller et j'ai po trop regarder comme ca marcher mais ca doit verifier si c'est bien une class???
 
 
pour le reste j'en suis la
 
 

Code :
  1. String fontNames[]= getToolkit().getFontList();
  2. Object o = new Object();
  3. Class cl;
  4. try{
  5.  cl = Class.forName("GraphicsEnvironment" );
  6.  o=cl.newInstance();
  7. }catch(Exception e){
  8.    System.out.println("1"+e);
  9. }
  10. try{
  11.  cl = Class.forName("GraphicsEnvironment" );
  12. }catch(Exception e){
  13.    System.out.println("2"+e);
  14. }
  15. try{
  16.  (o.getClass().getMethod("getLocalGraphicsEnvironment", new Class[] {null}))
  17.   .invoke(o,new Object[]{null});
  18. }catch(Exception e){
  19.    System.out.println("3"+e);
  20. }
  21. try{
  22.  (o.getClass().getMethod("getAvailableFontFamilyNames", new Class[] {null}))
  23.   .invoke(fontNames,new Object[]{null});
  24. }catch(Exception e){
  25.    System.out.println("4"+e);
  26. }

 
 
il gére bien les exception mais il trouve po la classe
GraphicsEnvironment
qui est dans java.awt.* ( c'est une classe abstraite je crois)
 
si tu sais comment faire

n°182218
kakou
bin voila
Posté le 24-07-2002 à 23:42:00  profilanswer
 

En faite le tous c'est pour faire une gestion des font compatible avec les nouvelle methode du 1.3 mais comme c'est un applet je veux qui soit aussi compatible avec 1.1
 
d'ou la gestion des exception

n°182229
benou
Posté le 24-07-2002 à 23:54:08  profilanswer
 

kakou a écrit a écrit :

 
si tu sais comment faire




bha oui ... faudrait que tu l'appele par son vrai nom la classe : java.awt.GraphicsEnvironment
 

Code :
  1. cl = Class.forName("java.awt.GraphicsEnvironment" );

n°182230
benou
Posté le 24-07-2002 à 23:55:12  profilanswer
 

kakou a écrit a écrit :

pour le debut je sais po c'est un copier coller et j'ai po trop regarder comme ca marcher mais ca doit verifier si c'est bien une class???



ok mais ca sert à rien : Class.forName renvoie une Class. A quoi ca sert de le tester ? :sarcastic:

n°182231
kakou
bin voila
Posté le 24-07-2002 à 23:58:52  profilanswer
 

oui j'ai relu et c'est vrai que ca sert a rien  
 
--------
 
j'ai vu le java.awt mais j'avais tester et ca marcher po et la ca marche, surememnt un mauvais copier/coller

n°182234
benou
Posté le 25-07-2002 à 00:02:19  profilanswer
 

kakou a écrit a écrit :

oui j'ai relu et c'est vrai que ca sert a rien  
 
--------
 
j'ai vu le java.awt mais j'avais tester et ca marcher po et la ca marche, surememnt un mauvais copier/coller
 




c'est bon pour le Graphique Environnement ?

n°182235
kakou
bin voila
Posté le 25-07-2002 à 00:03:17  profilanswer
 

String fontNames[]= getToolkit().getFontList();
 try{
  Class cl = Class.forName("java.awt.GraphicsEnvironment" );
  (cl.getMethod("getLocalGraphicsEnvironment",null))
   .invoke(cl,null);
 
  (cl.getMethod("getAvailableFontFamilyNames",null))
   .invoke(fontNames,null);
 }catch(Exception e){
    System.out.println("4"+e);
 }
 
 
------------------
 
et il me sort comme erreur
java.lang.IllegalArgumentException: object is not an instance of declaring class
 

n°182238
kakou
bin voila
Posté le 25-07-2002 à 00:11:25  profilanswer
 

Comment on lui passe un tableau pour un object?

n°182243
benou
Posté le 25-07-2002 à 00:28:21  profilanswer
 

faut pas mettre null, faut utiliser des tableaux vides
 

Code :
  1. String fontNames[]= getToolkit().getFontList();
  2. try{
  3.    Class cl = Class.forName("java.awt.GraphicsEnvironment" );
  4.    cl.getMethod("getLocalGraphicsEnvironment",new Class[] {}).invoke(cl,new Object[] {});
  5.    cl.getMethod("getAvailableFontFamilyNames",new Class[] {}).invoke(fontNames,new Object[] {});
  6. }catch(Exception e){
  7.    System.out.println("4"+e);
  8. }

n°182244
kakou
bin voila
Posté le 25-07-2002 à 00:33:25  profilanswer
 

tjrs le meme prob
 
java.lang.IllegalArgumentException: object is not an instance of declaring class

n°182245
kakou
bin voila
Posté le 25-07-2002 à 00:35:18  profilanswer
 

ca viens de la
 
cl.getMethod("getAvailableFontFamilyNames",new Class[] {}).invoke(fontNames,new Object[] {});
------------------------------------
getAvailableFontFamilyNames
 
public abstract String[] getAvailableFontFamilyNames()
 
    Returns an array containing the names of all font families available in this GraphicsEnvironment. Typical usage would be to allow a user to select a particular family name and allow the application to choose related variants of the same family when the user specifies style attributes such as Bold or Italic.
 
    This method provides for the application some control over which Font instance is used to render text, but allows the Font object more flexibility in choosing its own best match among multiple fonts in the same font family.
 
    Returns:
    an array of String containing names of font familiesSince:
    1.2See Also:
    getAllFonts(), Font, Font.getFamily()

n°182248
benou
Posté le 25-07-2002 à 00:40:31  profilanswer
 

ok j'avais pas vu : c'est une classe abstraite ...
 
C'est quoi l'objet sur lequel tu veux appeler ces méthodes ?
parce que là, c'est un peu n'importe quoi : pour le 1er invoke , tu l'appelles sur l'objet Class
pour le 2e, tu l'appelles sur un tableau.
 
t'es sur que tu sais t'en servir de cette classe ? c'est pas un problème d'invocation dynamique là ...

n°182250
benou
Posté le 25-07-2002 à 00:43:34  profilanswer
 
n°182251
kakou
bin voila
Posté le 25-07-2002 à 00:44:08  profilanswer
 

getLocalGraphicsEnvironment
 
public static GraphicsEnvironment getLocalGraphicsEnvironment()
 
    Returns the local GraphicsEnvironment.
 
    Returns:
    this GraphicsEnvironment.
 
 
-------------------------
getAvailableFontFamilyNames
 
public abstract String[] getAvailableFontFamilyNames()
 
 
---------------------------
String fontNames[] =GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
 
ca ca marche mais ca genere une erreur avec 1.1 car les classes n'existe po
 
 

n°182252
kakou
bin voila
Posté le 25-07-2002 à 00:45:48  profilanswer
 

oui mais ca marche po avec les ancienne jvm genre win 98
 
donc je voudrais capturer les erreur et sica marche po utiliser l'ancienne methode  
 
getToolkit().getFontList();

n°182253
benou
Posté le 25-07-2002 à 00:50:41  profilanswer
 

kakou a écrit a écrit :

 
ca ca marche mais ca genere une erreur avec 1.1 car les classes n'existe po



tu pourrais chercher un peu quand même  ou au moins poser les bonnes questions à la place d'attendre que je fasse ton truc ...
 

Code :
  1. Class cl = Class.forName("java.awt.GraphicsEnvironment" );
  2.   GraphicsEnvironment ge = (GraphicsEnvironment) cl.getMethod("getLocalGraphicsEnvironment",new Class[]{}).invoke(null, new Object[]{});
  3.   String[] affn = (String[]) cl.getMethod("getAvailableFontFamilyNames", new Class[]{}).invoke(ge, new Object[]{});

n°182254
kakou
bin voila
Posté le 25-07-2002 à 00:51:13  profilanswer
 

en faisant ca :
 
cl = Class.forName("java.awt.GraphicsEnvironment" );
   Object cl2=(cl.getMethod("getLocalGraphicsEnvironment",null))
   .invoke(null,null);
   System.out.println(cl2.getClass().getName());
 
j'obtient bien :
 
sun.awt.X11GraphicsEnvironment
 
mais apres tjrs la meme erreur

n°182255
benou
Posté le 25-07-2002 à 00:51:49  profilanswer
 

kakou a écrit a écrit :

oui mais ca marche po avec les ancienne jvm genre win 98
 
donc je voudrais capturer les erreur et sica marche po utiliser l'ancienne methode  
 
getToolkit().getFontList();




ok, mais tu fais des gros copier/coller sans essayer de comprendre ... tu fais des invoke sur n'importe quel objet ... est ce que t'es allé lire la javadoc de Method.invoke au moins ?

n°182256
kakou
bin voila
Posté le 25-07-2002 à 00:54:18  profilanswer
 

ok merci ca marche mais je n'attendais po que tu me donne la reponse, ca fais deux heure que je cherche ... c'est juste que je connais pas encore tres bien cette partie de java
 
enfinmerci ca marche mais j'y etait presque :)

n°182257
benou
Posté le 25-07-2002 à 00:54:42  profilanswer
 

kakou a écrit a écrit :

en faisant ca :
 
cl = Class.forName("java.awt.GraphicsEnvironment" );
   Object cl2=(cl.getMethod("getLocalGraphicsEnvironment",null))
   .invoke(null,null);
   System.out.println(cl2.getClass().getName());
 
j'obtient bien :
 
sun.awt.X11GraphicsEnvironment
 
mais apres tjrs la meme erreur




 
déjà t'as du bol d'obtenir ca parce que les 2e arguments ne devraient pas être null ...
 
ensuite regarde au dessus pour la solution

n°182258
kakou
bin voila
Posté le 25-07-2002 à 00:55:16  profilanswer
 

pour cette partie la j'ai fait aucun copier/coller,
 
oui j'ai été voir la javadoc mais je suis po trop bilingue

n°182260
kakou
bin voila
Posté le 25-07-2002 à 00:55:52  profilanswer
 

dans un bouquin a moi il mette null

n°182262
benou
Posté le 25-07-2002 à 00:56:17  profilanswer
 

kakou a écrit a écrit :

ok merci ca marche mais je n'attendais po que tu me donne la reponse, ca fais deux heure que je cherche ... c'est juste que je connais pas encore tres bien cette partie de java
 
enfinmerci ca marche mais j'y etait presque :)




 
ouep
 
mais à l'avenir lit bien la javadoc des méthodes ou classes que tu utilises sans les connaîtres :
 1 - tu apprendras plein de trucs
 2 - tu éviteras de passer 2 heures à chercher pour rien !  
;)

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Récupérer une erreur de methode inexistante

 

Sujets relatifs
Je cale en PHP : afficher un message d'erreurRécuperer les informations contenues dans un jpg ...
[php] recuperer le statut icq de qqunfrontpage : erreur dans un formulaire
[VB] Erreur avec SETFOCUSrecuperer le type MIME d'un fichier en php ?
[PHP] Récuperer une variable d'une fonction...Comment récupérer les dimensions de l'écran ?
[MFC] Récupérer les arguments de la ligne de commande (argc, argv,...)[PHP] Récupérer le contenu d'une variable situé entre <a href=" et ">
Plus de sujets relatifs à : Récupérer une erreur de methode inexistante


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR