Récupérer une erreur de methode inexistante

Récupérer une erreur de methode inexistante - Java - Programmation

Marsh Posté le 24-07-2002 à 13:05:56    

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

Reply

Marsh Posté le 24-07-2002 à 13:05:56   

Reply

Marsh Posté le 24-07-2002 à 14:14:04    

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

Reply

Marsh Posté le 24-07-2002 à 14:15:55    

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
Reply

Marsh Posté le 24-07-2002 à 14:17:42    

Cherrytree a écrit a écrit :

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




sur quoi ? l'invocation dynamique ?

Reply

Marsh Posté le 24-07-2002 à 14:18:06    

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

Reply

Marsh Posté le 24-07-2002 à 14:34:09    

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
Reply

Marsh Posté le 24-07-2002 à 14:34:49    

Cherrytree a écrit a écrit :

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




je viens de le changer ;)

Reply

Marsh Posté le 24-07-2002 à 14:41:39    

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é !

Reply

Marsh Posté le 24-07-2002 à 14:47:33    

benou a écrit a écrit :

 
sur quoi ? l'invocation dynamique ?



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


---------------
Le site de ma maman
Reply

Marsh Posté le 24-07-2002 à 14:56:25    

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

Reply

Marsh Posté le 24-07-2002 à 14:56:25   

Reply

Marsh Posté le 24-07-2002 à 15:14:26    

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

Reply

Marsh Posté le 24-07-2002 à 15:16:32    

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
Reply

Marsh Posté le 24-07-2002 à 21:41:04    

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?

Reply

Marsh Posté le 24-07-2002 à 22:09:27    

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
Reply

Marsh Posté le 24-07-2002 à 23:16:28    

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

Reply

Marsh Posté le 24-07-2002 à 23:30:31    

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
Reply

Marsh Posté le 24-07-2002 à 23:31:45    

kakou a écrit a écrit :

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




hein ???

Reply

Marsh Posté le 24-07-2002 à 23:40:27    

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

Reply

Marsh Posté le 24-07-2002 à 23:42:00    

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

Reply

Marsh Posté le 24-07-2002 à 23:54:08    

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" );

Reply

Marsh Posté le 24-07-2002 à 23:55:12    

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:

Reply

Marsh Posté le 24-07-2002 à 23:58:52    

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

Reply

Marsh Posté le 25-07-2002 à 00:02:19    

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 ?

Reply

Marsh Posté le 25-07-2002 à 00:03:17    

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
 

Reply

Marsh Posté le 25-07-2002 à 00:11:25    

Comment on lui passe un tableau pour un object?

Reply

Marsh Posté le 25-07-2002 à 00:28:21    

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

Reply

Marsh Posté le 25-07-2002 à 00:33:25    

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

Reply

Marsh Posté le 25-07-2002 à 00:35:18    

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()

Reply

Marsh Posté le 25-07-2002 à 00:40:31    

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

Reply

Marsh Posté le 25-07-2002 à 00:43:34    

Reply

Marsh Posté le 25-07-2002 à 00:44:08    

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
 
 

Reply

Marsh Posté le 25-07-2002 à 00:45:48    

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();

Reply

Marsh Posté le 25-07-2002 à 00:50:41    

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[]{});

Reply

Marsh Posté le 25-07-2002 à 00:51:13    

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

Reply

Marsh Posté le 25-07-2002 à 00:51:49    

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 ?

Reply

Marsh Posté le 25-07-2002 à 00:54:18    

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 :)

Reply

Marsh Posté le 25-07-2002 à 00:54:42    

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

Reply

Marsh Posté le 25-07-2002 à 00:55:16    

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

Reply

Marsh Posté le 25-07-2002 à 00:55:52    

dans un bouquin a moi il mette null

Reply

Marsh Posté le 25-07-2002 à 00:56:17    

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 !  
;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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