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 habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    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 éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    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 sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    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 habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    238
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Avril 2009
    Messages : 238
    Points : 183
    Points
    183
    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. [Thread] appel de méthodes non-synchronized dans une méthode synchronized
    Par dr23fr dans le forum Concurrence et multi-thread
    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