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

 Java Discussion :

Swing et Rmi


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut Swing et Rmi
    Bonjour à tous,
    je vais essayer d'expliquer mon code:

    J'ai un JPanel qui tourne en boucle et appel start.Display(Graphics2D g){ save.server(1099); }
    Ensuite j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class ServerUnicastRemote extends UnicastRemoteObject implements ServerRemote{
     
    	Game game;
     
    	public ServerUnicastRemote(Game game) throws RemoteException { super(); this.game = game; }
     
    	public Game getGame() { return game; }
    	public void setGame(Game game) { this.game = game; }
     
    	@Override
    	public void Display() throws RemoteException { game.Display(); }
     
     
    }
    ServerRemote "implements" Remote et Game c'est l'objet distant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Game{
     
    	Graphics2D g;
     
    	public Game(){}
    	public Game setG2D(Graphics2D g){ this.g = g; return this; }
    	public void Display() {
    		g.drawRect(10, 10, 10, 10);
    	}
     
    }
    Dans Save j'ai ça, mais c'est pas le problème, ce code là fonctionne:

    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
    public void server(int port) {
    		try {
    			LocateRegistry.createRegistry(port);
    			ServerUnicastRemote od = new ServerUnicastRemote(game);
     
    			String url = "rmi://" + InetAddress.getLocalHost().getHostAddress() + "/SSJEngine";
    			System.out.println("Enregistrement de l'objet avec l'url : " + url);
    			Naming.rebind(url, od);
     
    		} catch (Exception e){e.printStackTrace();}
    	}
     
    	public ServerRemote client(String ip) {
    		try {
    			ServerRemote stub = (ServerRemote) Naming.lookup("rmi://" + ip + "/SSJEngine");
    			return stub;
    		} catch (Exception e) {e.printStackTrace();}
    		return null;
    	}
    et dans
    Evidemment ça ne marche pas mais vous avez surement compris l'idée,
    Alors ma question est, "Pourquoi ça ne marche pas?" et "Comment je doit faire?"
    Merci de votre aide.

  2. #2
    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
    ton Graphics2D il sort d'où? Je ne suis pas sur d'avoir compris l'idée, tu veux que le client, qui appelle une méthode remote "Display" force quelquechose à s'afficher sur le serveur?

  3. #3
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    Le Graphics2D il sort du JPanel qui tourne en boucle d'où j'appel Display(Graphics2D g) :
    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
    public class Main implements Kernel{
     
    	private Start s = new Start();
    	private Game game = new Game();
    	private Save save = new Save(game, "sauvegarde");
    	private Boolean espace = false;
    	private Boolean server = false;
    	private Boolean client = false;
     
     
    	public Main(){ s.start(this); }
    	public static void main(String[] args) { new Main(); }
     
    	@Override
    	public void Creation() {
     
     
    	}
     
    	@Override
    	public void Display(Graphics2D g) {
    		game.setG2D(g);
    		if(espace && client){ game.Display(); }
    	}
     
    	@Override
    	public void keyPressed(KeyEvent e) {
    		if(e.getKeyCode() == 10){ game.setX(0); }//ENTER
    		if(e.getKeyCode() == 83){ save.server(1099); server = true; }//s
    		if(e.getKeyCode() == 67){ save.client("192.168.0.17"); client = true; }//c
    		if(e.getKeyCode() == 32){ espace = !espace; }//ESPACE
    		System.out.println(e.getKeyCode());
    	}
     
    	@Override
    	public void keyReleased(KeyEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void keyTyped(KeyEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void mouseClicked(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void mouseEntered(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void mouseExited(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void mousePressed(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void mouseReleased(MouseEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void mouseWheelMoved(MouseWheelEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    }
    Et oui c'est bien ça que je cherche à faire.

  4. #4
    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
    Je n'ai toujours pas compris ce que ton programme essaie de faire, ce code est assez confus.


    C'est quoi pour toi un "JPanel qui tourne en boucle?". Et ton Graphics2D, tu le récupère comment et quand? Si tu le récupère à partir de panel.GetGraphics(), sahce que tu n'es autorisé à le faire que depuis le thread EDT durant son appel à paint(). Le reste du temps sa valeur est son comportement sont imprévisibles car les Graphics2D liés à l'écran sont recyclés.

  5. #5
    Membre éclairé Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 311
    Par défaut
    Le Graphics2D vient bien de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void paint(Graphics g){
    	super.paint(g);
    	Graphics2D gdd = (Graphics2D)g.create();
    	((Kernel) s.kernel).Display(gdd);
    	gdd.dispose();
    	s.panel.repaint();
    }
    Kernel c'est Main.
    Il n'y a pas de problème avant le Display de Main.
    Le code qui consiste à afficher un élément à l'écran fonctionne parfaitement.
    Le Server RMI marche aussi parfaitement, le problème c'est quand j'essaye de combiner les deux.
    Donc ce que j'ai fait , là, mais qui ne marche pas c'est que j'ai mis une méthode Display dans ServerRemote, ServerUnicastRemote et dans Game pour que du coup si le client appel cette methode, ce soit le server qui affiche quelque chose, ou l'inverse, ou les deux je sait pas.
    J'espère que tu comprendra mieux ce que je veux faire.
    Merci de ton aide.

  6. #6
    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
    Non toujours pas tu es occupé de demander à ton serveur d'écrire quelque chose sur l'écran de ton client? Ce n'est juste pas possible. On ne peux pas prendre l'écran ou la carte graphique et la sérializer dans le flux rmi pour qu'elle apparaisse de l'autre coté. Graphics2D est un objet local. Je ne comprends d'ailleurs pas pourquoi RMI ne te remballe pas d'exception en tentant de faire ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Swing]JTable- Dimensionner les colonnes
    Par loutfi dans le forum Composants
    Réponses: 12
    Dernier message: 01/07/2011, 08h50
  2. [Integration] du Callback entre Spring RMI et Swing
    Par arafat877 dans le forum Spring
    Réponses: 0
    Dernier message: 01/03/2011, 18h53
  3. [swing] probleme de memoire
    Par leBigouden dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/05/2003, 14h19
  4. [SWING]jTable + Focus
    Par chady dans le forum Composants
    Réponses: 5
    Dernier message: 27/02/2003, 14h51
  5. [SWING][FONT] choisir la police par défaut
    Par narmataru dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/02/2003, 10h35

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