IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Utiliser une m�thode non-static dans une m�thode static


Sujet :

avec Java

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par d�faut Utiliser une m�thode non-static dans une m�thode static
    Bonjour,

    Comme le titre l'indique j'essaye en ce moment d'utiliser une m�thode non static au sein d'une m�thode static. �videment je me fait jet� par le compilateur, le probl�me est que je ne peut pas passer ma m�thode non static en m�thode static car elle est utilis�e dans d'autres classes et qu'elle utilise elle m�me des m�thodes non static... Je voulais donc savoir si il y avait un moyen de contourner ce probl�me et si oui comment? Merci d'avance de votre participation, elle sera grandement appr�ci�e ^^

    Cordialement

    Mcfly

  2. #2
    Membre �m�rite
    Inscrit en
    Mars 2006
    Messages
    848
    D�tails du profil
    Informations personnelles :
    �ge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par d�faut
    Bonjour,

    A part cr�er/r�cup�rer une instance de ta classe, je ne vois pas d'autres moyens.

    Et s'il en existe un, il doit �te tr�s douteux car il contournerait un des principes de base de l'approche object.

  3. #3
    Expert �minent
    Avatar de tchize_
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par d�faut
    si t am�thode static a besoin de m�thodes non statiques, ta m�thode n'a pas � �tre en statique, simplement :/

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Par d�faut
    re,

    Effectivement il s'agit un peu des r�ponses que je craignait ^^

    J'ai essay� de r�ecrire ma m�thode en non static mais impossible de faire marcher tout �a.. Voici le code de la classe en question �a sera plus parlant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    public class JMSMonitor implements Runnable, ReConfigurable {
     
    	private static final String IDL = JMSMonitor.class.toString();
     
    	private ApplicationContext ctx = null;
    	private static JmsTemplate jmst = null;
     
    	private Configuration config = null;
    	private String springConfigurationPath = null;
    	private static boolean active = true;
     
    /**
             * Constructeur privé pour initialiser les objets utilisés dans le traitement
             */
    	public JMSMonitor() {
    	}
     
    	public void run() {
    		while(true) {
    			try {
    				if (active) {
    					LogJMSItem item = LogJMSQueue.getInstance().take();
    					JMSMonitor.logJPFM(item.getMsgIn(), item.getExceptionTraitement());
    					JMSMonitor.logJPFM(item.getMsgOut(), item.getExceptionTraitement());
    				} else {
    					if (LogJMSQueue.getInstance().size() > 0)
    						LogJMSQueue.getInstance().clear();
    					Thread.sleep(5000);
    				}
    			} catch (InterruptedException e) {
    				Log.error(IDL, "Impossible d'avoir accès à la Queue de données ou impossible d'endormir le Thread (si Logging JMS inactif)");
    			}
    		}
    	}
     
    /**
             * Permet de logguer un message provenant de jPFM
             * @param msg   ISOMsg a logguer
             * @param e     Exception éventuelle lors du traitement
             * @throws Exception
             */
    	private static void logJPFM(ISOMsg msg, Exception e) {
    		HashMap<Integer, Object> hm = null;
    		if (msg != null) {
    			try {
    				hm = JMSMonitor.pack(msg);
    			} catch (Exception e1) {
    				Log.error(IDL,"Impossible de transformer le message");
    				JMSMonitor.sendObjectMessage(null,e1);
    			}
    			JMSMonitor.sendObjectMessage(hm,e);
    		} else {
    			JMSMonitor.sendObjectMessage(null,e);
    		}
    	}
     
    /**
             * Créé et envoie un message issu de jPFM pour stockage dans la base de données
             * @param hm HashMap représentant l'ISOMsg originel
             * @param e     Exception éventuelle durant le traitement
             */
    	private static void sendObjectMessage(final HashMap<Integer, Object> hm, final Exception e) {
    		MessageCreator msgcrea = null;
    		String hmr = null;
    		if (hm != null) {
    			String typeMessage = (String)hm.get(22);
    			String etatBorne = (String)hm.get(895);
    			if(typeMessage != null && etatBorne != null && (typeMessage.equals("940") || typeMessage.equals("980")) && !etatBorne.equals("0")) {
    				//TODO: envoi alerte mail RA
    				String borne = (String)hm.get(26);
    				if (borne == null) {borne = (String)hm.get(923);}
     
    				if (borne == null) borne = "borne non précisée";
    				try {
    					EmailService.sendMail(borne);
    				} catch (Exception e1) {
    					Log.error(IDL,"Impossible d'envoyer l'email au RA");
    				}
    				Log.info(IDL,"Message de borne HS/KO! Borne concernée: "+borne);
    			}
    			msgcrea = new MessageCreator() {
    				public Message createMessage(Session session) throws JMSException {
    					ObjectMessage omsg = session.createObjectMessage(hm);
    					if(e!=null) omsg.setStringProperty("EXCEPTION", e.toString());
    					return omsg;
    				}
    			};
    		} else {
    			if(e!= null) {
    				msgcrea = new MessageCreator() {
    					public Message createMessage(Session session) throws JMSException {
    						ObjectMessage omsg = session.createObjectMessage();
    						if(e!=null) omsg.setStringProperty("EXCEPTION", e.toString());
    						return omsg;
    					}
    				};
    			} else {
    				Log.warn(IDL,"Rien a logguer, le message et l'exception sont null");
    			}
    		}
    		try {
    			jmst.send(msgcrea);
    		} catch (JmsException e1) {
    			Log.error(IDL,"Le message n'a pas pu être envoyé: "+e1.toString()+".\nMessage abandonné.");
    		}
    	}
     
    /**
             * Méthode de conversion ISOMsg-->HashMap
             * @param m     ISOMsg à convertir
             * @return      HashMap représentant l'ISOMsg
             * @throws Exception
             */
    	@SuppressWarnings("unchecked")
    	private static HashMap<Integer, Object> pack(ISOComponent m) throws Exception{
    		HashMap<Integer, Object> hm = new HashMap<Integer, Object>();
    		int cle = 0;
    		ISOComponent isocomponent;
    		try {
    			ISOMsg isoMes = (ISOMsg) m;
    			Hashtable<Integer, ISOComponent> isoFields = isoMes.getChildren();
    			for (Enumeration<Integer> e = isoFields.keys(); e.hasMoreElements();) {
    				cle = e.nextElement().intValue();
    				isocomponent = (ISOComponent) isoMes.getComponent(cle);
    				if (isocomponent instanceof ISOField) { // this is a single field
    					hm.put(cle, (String) isocomponent.getValue());
    				} else { // this is a submessage
    					hm.put(cle, pack(isocomponent));
    				}
    			}
    			return hm;
    		} catch (ISOException e) {
    			throw new Exception(e);
    		}
    	}
    Pr�cision : je ne suis pas l'auteur de cette classe ^^

    Cette classe me sert dans le cadre d'envoi de messages via JMS (java messaging service) � un serveur activeMq.

    Le code que j'ai mis marche tr�s bien, mais je doit le modifier afin d'aller chercher certaines informations en bases pour compl�ter le message (la hash map) dans la m�thode sendObjectMessage... J'utilise pour �a des services tout ce qu'il y a de plus classique mais qui ne sont �videment pas statics.

    Le probl�me est que lorsque je veut rendre la m�thode sendObjectMessage non static, je doit �videmment rendre toutes les m�thodes qui l'appellent non static aussi, et m�me dans ce cas impossible de d�clarer mon service, j'obtiens encore l'erreur comme quoi je ne peut pas appeler une m�thode non static � partir d'une m�thode static.

    Voila j'ai �t� un peu longs mais je pense que cela est n�cessaire pour une bonne compr�hension de mon probl�me...

    edit : probl�me r�solue en fait... j'avais juste oubli� de d�finir mon ServiceLocator en static dans les d�clarations de ma classe... tout marche bien maintenant (et merci a mon tuteur )

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 02/07/2013, 21h49
  2. R�ponses: 1
    Dernier message: 26/12/2010, 22h20
  3. R�ponses: 4
    Dernier message: 03/04/2010, 13h05
  4. R�ponses: 1
    Dernier message: 24/06/2008, 23h47
  5. R�ponses: 20
    Dernier message: 21/06/2006, 21h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo