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

SWT/JFace Java Discussion :

[RCP / JFace / SWT] Lien entre vues


Sujet :

SWT/JFace Java

  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut [RCP / JFace / SWT] Lien entre vues
    Bonjour à tous,

    Avant toutes choses, je sais que la question que je m'en vais poser a été à multe reprises posée sur ce forum et toutes les reponses renvoient au lien suivant : http://www.eclipse.org/articles/Arti...s/article.html

    Seulement voilà, malgré m'être attardé là dessus, j'ai toujours du mal à avancer.

    Mon problème est le suivant: Dans mon appli RCP, je dispose de deux vues, l'une à droite et l'autre à gauche. Dans ma vue de gauche, je veux disposer d'un arbre de telle sorte qu'en cliquant sur un noeud de l'arbre, un nouvel onglet apparaisse dans ma vue de droite, dans le quel se trouvera un tableViewer qui contiendra les données correspondantes au noeud sur le quel j'aurais cliqué.

    Auriez vous donc un tutoriel ou un exemple qui me permettrais de comprendre cela et donc d'avancer sur mon travail.

    En vous remerciant d'avance.

  2. #2
    Membre confirmé Avatar de desert
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 414
    Points : 479
    Points
    479
    Par défaut
    Bonjour,
    Cet article pourrait peut-être t'aider.

  3. #3
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Salut,

    Tu peux également regarder mes supports de cours à l'adresse http://mbaron.developpez.com

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  4. #4
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Salut,
    C'est le SelectionService qu'il te faut à condition que tu sois dans le cadre d'une application RCP.

    http://www.eclipse.org/articles/Arti...s/article.html

  5. #5
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bsr à tous, et merci pour vos réponses.

    - djo.mos : le lien que tu me proposes, cest exactement le meme lien que j'ai mis quand j'ai posté mon message. Je l'ai lu et relu, et jpeux vous assurer que ce n'est pas le fait que l'anglais et moi ne soyons pas les meuilleurs amis du monde, que je n'arrive pas à l'appliquer à mon cas.

    - keukeul : A chaque fois que l'occasion c'est présentée, j'ai toujours vanté les mérites de tes supports. Ce sont dailleurs eux qui mont permis de m'acclimater de jface, swt et rcp. Cependant, à moins que jne les ai pas bien lu, jne retrouve pas ou est ce que tu abordes une telle problématique; si jme trompe, veux tu s'il te plaît m'orienter?

    Je reste donc toujours à votre disposition, si vous pourriez me fournir un exemple me permettant de comprendre tout cela (notemment l'utilisation des "SelectionService" pour pouvoir lier plusieurs vues, dont l'une utilisant un treeviewer). Bref, le meme principe qui est sous Eclipse et qui consiste, lorsqu'on doubleclique sur le nom d'une classe, à ouvrir un nouvel onglet avec le contenu de la classe.

    Merci énormement à tous

  6. #6
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Citation Envoyé par papaetoo Voir le message
    - djo.mos : le lien que tu me proposes, cest exactement le meme lien que j'ai mis quand j'ai posté mon message. Je l'ai lu et relu, et jpeux vous assurer que ce n'est pas le fait que l'anglais et moi ne soyons pas les meuilleurs amis du monde, que je n'arrive pas à l'appliquer à mon cas.

    Ok, veux tu expliquer ce que tu veux dire par «je n'arrive pas à l'appliquer à mon cas.» ?
    Tu peux nous montrer comment t'as codé la chose ?

  7. #7
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Bonjour à tous,

    Cependant, à moins que jne les ai pas bien lu, jne retrouve pas ou est ce que tu abordes une telle problématique; si jme trompe, veux tu s'il te plaît m'orienter?
    Tu as tout à fait raison sur les aspects communication entre vues. Ces points ne sont pas abordés sur les supports de cours disponibles. Cependant, je viens de le traiter dans le prochain support de cours concernant le Workbench (à la rentrée de septembre il devrait être disponible, et il est assez conséquent ~300 transparents). Pour preuve un billet sur mon blog expliquer comment enregistrer plusieurs SelectionProvider (Viewer) au service de sélection. (http://keulkeul.blogspot.com/2009/05...plusieurs.html).

    C'est le SelectionService qu'il te faut à condition que tu sois dans le cadre d'une application RCP.
    Tu n'es pas obligé de faire un Eclipse RCP pour utiliser le service de sélection

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  8. #8
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bjr Mr Keulkeul

    Citation Envoyé par keulkeul Voir le message
    Cependant, je viens de le traiter dans le prochain support de cours concernant le Workbench (à la rentrée de septembre il devrait être disponible, et il est assez conséquent ~300 transparents).
    Avant toute choses, merci pour ce que toi et des gens comme toi faites pour les gens comme moi, afin qu'il deviennent comme des gens comme toi!

    Cependant, est ce trop te demander que de savoir si je (en espérant que d'autres soient dans la même situation que moi et que cela puisse les aider aussi) pouvais disposer de cette partie de ton futur support de cour?

    Merci

  9. #9
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Cependant, est ce trop te demander que de savoir si je (en espérant que d'autres soient dans la même situation que moi et que cela puisse les aider aussi) pouvais disposer de cette partie de ton futur support de cour?
    ça tombe bien.

    Je viens de lancer un billet sur mon blog de manière à proposer un extrait du futur support de cours. Le choix de l'extrait est réalisé au travers d'un sondage. A l'issu du sondage (mercredi prochain) la partie qui aura récolté le plus de voix sera diffusée.

    Toutes les modalités et la description de chaque partie sont disponibles sur ce billet.

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  10. #10
    Membre expert
    Avatar de Gueritarish
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2007
    Messages
    1 800
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 800
    Points : 3 919
    Points
    3 919
    Par défaut
    Salut,

    Alors un truc que j'ai peut-être pas compris, c'est pourquoi tu parles de liens entre 2 vues . Parce que si je reprends ce que tu expliques là :
    Citation Envoyé par papaetoo
    Bref, le même principe qui est sous Eclipse et qui consiste, lorsqu'on double clique sur le nom d'une classe, à ouvrir un nouvel onglet avec le contenu de la classe.
    Ça m'a plutôt l'air d'être tout le comportement liant une Vue à un Éditeur...
    Donc, à mon avis, tu devrais utiliser le ISelectionProvider pour obtenir la ISelection de ta Vue et ensuite, ouvrir l'éditeur qui correspond à cette sélection quand la sélection change.
    Ou alors, tu peux mettre un IDoubleClickListener sur ton TreeViewer dans ta vue de gauche, récupérer la sélection de l'utilisateur et lancer l'éditeur associé.

    Voilà, je sais pas si j'ai tout suivi et j'espère que ça t'aidera...
    Gueritarish
    Pas de questions technique par MP, les forums sont là pour ça.

  11. #11
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bjr Gueritarish et merci de ton aide

    Il s'agit effectivement de liens entre deux vues (voir trois à terme). Concretemen, je dispose devrais disposer de 3 vues dans mon appli. La vue de navigation qui est celle de gauche à plusieurs fils. Lorsque je clique sur un fils, je voudrais qu'un onglet s'affiche dans ma vue de droite, avec un tableViewer contenant des données relatives au fils sur le quel j'ai doublecliqué. J'envisage donc utiliser un "IDoubleClickListener" pour pouvoir recupérer les infos (notemment, une reqûete à exécuter dans la BD pr pouvoir recuperrer les infos que jvais afficher dans mon onglet) sur le fils. Dans ma 3eme vue(qui se situe au dessus de ma vue de droite) , je génère dynamiquement un IHM me permettant de faire un filtre sur le tableau présent dans la vue en dessous. La capture jointe montre à quoi ressemble mon appli.

    Voici ce que je voudrais faire et sur lequel je piétine actuellement :

    - Pouvoir appliquer correctement le "IDoubleClickListener" de sorte à faire communiquer mes vues de gauche et de droite.

    - pouvoir être caplable d'ouvrir un onglet dans ma vue de droite, chaque fois que je doubleclique sur un noeud de l'arbre de la vue de gauche. Je crois savoir que cela fera intervenir la notion de placeholder, mais je me pose encore des questions sur comment je dois procéder exactement :
    - Est ce que je dois disposer de classes (ou méthodes?) me
    permettant de créer les dits onglets?
    - Comment adapter cela au code que j'ai en ce moment. Sachant que
    dans ma classe de création de vue, ke crée et j'alimente mon
    tableViewer dans mon "creatpartcontrol"

    - Comment faire le lien entre ma vue du dessus (filtre) et celle d'en dessous elle(vue ou se trouve le tableViewer)? Je compte en effet disposer d'un bouton qui me permettra, lorsqu'on cliquera dessus, de mettre à jour les données de mon tableviewer en fonction de critere de filtre de la vue "filtre".

    - Et pour finir, comment rendre ma vue completement indépendante de mes données (application "propre" du MCV), vu que c'est dans le code de ma vue (méthode "createpartcontrol")que je fais tous mes acces BD, que je crée ma table, que j'éxécute mes requête et que je peuple mon tableViewer. J'imagine que la manière la plus propre pour cela est de faire toutes les connexions à la base de données avant la création de la vue, et ce dans ce qui pourrait être l'équivalent du main de l'appli RCP, et de coder la vue de telle sorte que, pour sa création, qu'on puisse lui passer directement une liste d'objets métier. Dans ce cas, dans quelle classe(ou se trouve l'équivalent du main) devrais je faire cela? Que pensez vous de cette méthode? Y'a til une manière plus propre pour le faire?
    Le code de ma vue est le suivant :
    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
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
    public class View extends ViewPart {
     
    	public static final String ID = "simpleExplorer.view";	
    	private TableViewer viewer;		
    	private TblRowFilter filter;	
    	private TableSorter tableSorter;	
    	private DbBean myDbBean;	
    	private ProcStock myProcStock;
     
    	/**
             *  Méthode permettant de définir le contenu de la vue
             */
    	public void createPartControl(Composite parent) {		
    		ResultSet rs = null;				
    		myProcStock = new ProcStock("rep_getAnnouncePendingAcknowledgement");		
    		// ouverture de la connexion
    		try {
    			myDbBean = new DbBean();
    			myDbBean.connect();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}		
    		// on récupère le résulSset
    		try {
    			rs = myDbBean.executeProc(myProcStock.getName());
    		} catch (SQLException e) {
    			System.out.println("Erreur lors de l'éxécution de la requête");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}	
    		GridLayout layout = new GridLayout(2, false);
    		parent.setLayout(layout);		
    		Label searchLabel = new Label(parent, SWT.NONE);
    		searchLabel.setText("Search: ");
    		final Text searchText = new Text(parent, SWT.BORDER | SWT.SEARCH);
    		searchText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL
    				| GridData.HORIZONTAL_ALIGN_FILL));
    		searchText.addKeyListener(new KeyAdapter() {
    			public void keyReleased(KeyEvent ke) {
    				filter.setSearchText(searchText.getText());
    				viewer.refresh();
    			}
    		});		
    		createTableViewer(parent, rs); 		
    		// on ferme les connexions
    		try {
    			rs.close();
    			myDbBean.disConnect();			
    		} catch (SQLException e) {
    			System.out.println("Erreur lors de la fermeture de la connexion");
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
     
    	/**
             * cette méthode permet de créer un tableViewer
             * @param parent
             * @param resultset
             */
    	private void createTableViewer(final Composite parent, final ResultSet resultset){		
    		viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
    				| SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);		
    		createColumns(viewer, resultset);						
    		viewer.setContentProvider(new TblRowContentProvider());
    		viewer.setLabelProvider(new TblRowLabelProvider());		
    		viewer.setInput(ModelProvider.getInstance().getTblRows());				
    		getSite().setSelectionProvider(viewer);		
    		tableSorter = new TableSorter();
    		viewer.setSorter(tableSorter);
    		filter = new TblRowFilter();
    		viewer.addFilter(filter);
    		GridData gridData = new GridData();
    		gridData.verticalAlignment = GridData.FILL;
    		gridData.horizontalSpan = 2;
    		gridData.grabExcessHorizontalSpace = true;
    		gridData.grabExcessVerticalSpace = true;
    		gridData.horizontalAlignment = GridData.FILL;
    		viewer.getControl().setLayoutData(gridData);
    	}
     
    	/**
             * les colonnes sont crées avec des noms vennant de la base de données 
             * @param viewer
             */
    	private void createColumns(final TableViewer viewer, ResultSet resultset) {		
    		Table table = viewer.getTable(); 		
    		String[] titles = null;
    		String[] types = null;		
    		ResultSetMetaData metaData = null;				
    		int colCount = 0;		
    		// à gérer dynamiquement
    		int[] bounds = { 100, 100, 100, 100, 100, 100, 100, 100, 100 };
     
    		/*Récupération des info métadata sur la table. Penser à le faire plus dynamiquement*/
    		try {	
    			metaData = resultset.getMetaData();
    			colCount = metaData.getColumnCount();			
    			int j  = 0;
    			titles = new String[colCount];
    			types = new String[colCount];										
    			//Remplissage de titles
    			for (j	= 0 ; j < colCount ; j++){
    				titles[j] = metaData.getColumnName(j+1);
    				types[j] = metaData.getColumnTypeName(j+1);
    			}																			
    		}
    		catch (Exception e) {
    			System.err.println(e);
    		}								
    		for (int i = 0; i < titles.length; i++) {
    			final int index = i;
    			final TableViewerColumn viewerColumn = new TableViewerColumn(
    					viewer, SWT.NONE);
    			final TableColumn column = viewerColumn.getColumn();								
    			column.setText(titles[i]);
    			column.setWidth(bounds[i]);
    			column.setResizable(true);
    			column.setMoveable(true);		
    			column.addSelectionListener(new SelectionAdapter() {
    				@Override
    				public void widgetSelected(SelectionEvent e) {
    					tableSorter.setColumn(index);
    					int dir = viewer.getTable().getSortDirection();
    					if (viewer.getTable().getSortColumn() == column) {
    						dir = dir == SWT.UP ? SWT.DOWN : SWT.UP;
    					} else {
    						dir = SWT.DOWN;
    					}
    					viewer.getTable().setSortDirection(dir);
    					viewer.getTable().setSortColumn(column);
    					viewer.refresh();
    				}
    			});
    		}
    		table.setHeaderVisible(true);
    		table.setLinesVisible(true);
    	}
     
    	public void setFocus() {
    		viewer.getControl().setFocus();
    	}
    }
    Je suis conscient que je donne l'impression de vouloir faire faire mon travail à ma place, mais déutant de mon état, malgré le fait que je ne demande qu'à apprendre, j'ai du mal à avancer dans mon travail, faute à ces notions qui sont nouvelles pour moi et pour les quelles jne trouve pas assez de doc et tres peu d'exemples.

    Donc de grâce, ne me blâmez et ne me plaignez pas, mais aidez moi.

    Merci

  12. #12
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Bjr à tous!

    Alors, y'a personne pour m'aider? Ou les questions que j'ai posées (qui sont peut être nombreuses) ne sont pas très bien compréhensibles. En tout cas, jsuis la pour plus de précisions.

    Merci une fois de plus!

  13. #13
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Pour information, le support de cours complet sur les vues est disponible http://mbaron.developpez.com/eclipse/views/

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  14. #14
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Monsieur Keulkeul a encore frapé.

    Merci pour tous les efforts que tu fais pour cette communauté. Au jour d'aujourd'hui, j'ai pu résoudre(difficilement et avec beaucoup de temps et d'aide d'autres forumeurs) les pbs liés à ce post. Nul doute qu'avec ton nouveau support, j'aurais avancé beaucoup plus vite. Je met le post comme résolu, car des d'autres posts soujaccents ont été resolus.

    Merci une fois de plus!

  15. #15
    Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Pb connexion Appli RCP- BDD
    Bonjour a tous
    je suis en train de développer une application RCP
    je dois me connecter à une base de donnée MYSQL pour récupérer des informations et les afficher dans une vue,
    La connexion s'effectue correctement lorsque je la teste dans une fonction main "public static void main(String[] args) {...}"

    Par contre lorsque je j'appelle ma connexion directement dans ma classe vue je rencontre une erreur pourtant j'ai déclaré le connecteur jar dans le manifest.mf

    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
     
    package testdcns.views;
     
     
    import java.sql.Connection;
    import java.sql.DriverManager;
     
    import javax.swing.JTree;
    import javax.swing.tree.DefaultMutableTreeNode;
     
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.events.SelectionEvent;
    import org.eclipse.swt.events.SelectionListener;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Tree;
    import org.eclipse.swt.widgets.TreeItem;
    import org.eclipse.ui.part.ViewPart;
     
    import testpatern.DAO.AbstractDAOFactory;
    import testpatern.DAO.DAO;
    import testpatern.classe.Famille;
     
    public class Vue3 extends ViewPart {
     
     
    		private JTree jTree = null;
    		public static final String ID = "testdcns.views.SampleView";
     
     
    		/**
                     * The constructor.
                     */
    		public Vue3() 
    		{
     
    		}
     
     
    		/**
                     * This is a callback that will allow us
                     * to create the viewer and initialize it.
                     */
     
    		public void createPartControl(Composite parent) {
    			try {
    				Class.forName("com.mysql.jdbc.Driver");
    				System.out.println("DRIVER OK vue3 ! ");
     
    				String url = "jdbc:mysql://localhost/test";
    				String user = "root";
    				String passwd = "";
     
    				Connection conn = DriverManager.getConnection(url, user, passwd);
    				System.out.println("Connection effective !");			
     
    			} catch (Exception e) {
    				System.out.println("Connection echouee !");			
    				e.printStackTrace();
    			}		
     
     
    	/*	//	AbstractDAOFactory adf = AbstractDAOFactory.getFactory(AbstractDAOFactory.DAO_FACTORY);
    			//On récupère un objet faisant le lien entre la base et nos objets 
    			System.out.println("\n\t******************TRANSPORT P************************");
     
    			//On fait notre recherche
    			System.out.println("\n\t*************Niveau 1*******************************");
     
    			DAO<Famille> FamDao = adf.getFamilleDAO();
    			Famille Fami[] = FamDao.niveau(1,1);
    			System.out.println("\t BG :" + Fami[0].getNFM_BG()+ " BD : " + Fami[0].getNFM_BD() + " lib : " + Fami[0].getNFM_LIB());*/
     
     
    			Tree myTree = new Tree(parent, SWT.FILL_EVEN_ODD);
     
    			TreeItem racine = new TreeItem(myTree, SWT.NONE,0);
    			TreeItem fils1 = new TreeItem(racine, SWT.NONE,0);
    			TreeItem fils2 = new TreeItem(racine, SWT.NONE,1);
     
    			TreeItem fils3 = new TreeItem(racine, SWT.NONE,2);
     
    		//	racine.setText(Fami[0].getNFM_LIB());
    			fils1.setText("fils1 ");
    			fils2.setText("fils2 ");
    			fils3.setText("fils3 ");
    			TreeItem filsfils3 = new TreeItem(fils3, SWT.NONE,0);
    			filsfils3.setText("fils de fils3 ");
     
    			myTree.addSelectionListener(new SelectionListener() {
    					public void widgetDefaultSelected(SelectionEvent arg0) {
    					}
     
    					public void widgetSelected(SelectionEvent event) {
    						System.out.println("Element sélectionné : ");
    					}
    			    });
     
    		}
    		public JTree getJTree() {
    			return jTree;
    		}
     
    		@Override
    		public void setFocus() {
    		}
    }
    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
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    Connection echouee !
    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
    	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
    	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
    	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Unknown Source)
    	at testdcns.views.Vue3.<init>(Vue3.java:36)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    	at java.lang.reflect.Constructor.newInstance(Unknown Source)
    	at java.lang.Class.newInstance0(Unknown Source)
    	at java.lang.Class.newInstance(Unknown Source)
    	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:170)
    	at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:874)
    	at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
    	at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51)
    	at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:259)
    	at org.eclipse.ui.internal.registry.ViewDescriptor.createView(ViewDescriptor.java:63)
    	at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:324)
    	at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:226)
    	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
    	at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313)
    	at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:529)
    	at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180)
    	at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270)
    	at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
    	at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473)
    	at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256)
    	at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1209)
    	at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1608)
    	at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:649)
    	at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:576)
    	at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:568)
    	at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:272)
    	at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:982)
    	at org.eclipse.ui.internal.WorkbenchPage.onActivate(WorkbenchPage.java:2626)
    	at org.eclipse.ui.internal.WorkbenchWindow$27.run(WorkbenchWindow.java:2965)
    	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    	at org.eclipse.ui.internal.WorkbenchWindow.setActivePage(WorkbenchWindow.java:2946)
    	at org.eclipse.ui.internal.WorkbenchWindow.busyOpenPage(WorkbenchWindow.java:761)
    	at org.eclipse.ui.internal.Workbench$21.runWithException(Workbench.java:1045)
    	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
    	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
    	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3885)
    	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3506)
    	at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803)
    	at org.eclipse.ui.internal.Workbench$28.runWithException(Workbench.java:1384)
    	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
    	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:179)
    	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150)
    	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4342)
    	at org.eclipse.ui.internal.StartupThreading.runWithoutExceptions(StartupThreading.java:94)
    	at org.eclipse.ui.internal.Workbench.init(Workbench.java:1379)
    	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2335)
    	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
    	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
    	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
    	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    	at testdcns.Application.start(Application.java:20)
    	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
    	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
    	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
    	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
    	at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
    	at org.eclipse.equinox.launcher.Main.main(Main.java:1287)
    Connection echouee !java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
     
    	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494)
    	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
    	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:398)
    	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:105)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Unknown Source)
    	at testdcns.views.Vue3.createPartControl(Vue3.java:61)
    	at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:367)
    	at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:226)
    	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
    	at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313)
    	at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:529)
    	at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180)
    	at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270)
    	at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65)
    	at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473)
    	at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256)
    	at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1209)
    	at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1608)
    	at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:649)
    	at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:576)
    	at org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:568)
    	at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:272)
    	at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:982)
    	at org.eclipse.ui.internal.WorkbenchPage.onActivate(WorkbenchPage.java:2626)
    	at org.eclipse.ui.internal.WorkbenchWindow$27.run(WorkbenchWindow.java:2965)
    	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    	at org.eclipse.ui.internal.WorkbenchWindow.setActivePage(WorkbenchWindow.java:2946)
    	at org.eclipse.ui.internal.WorkbenchWindow.busyOpenPage(WorkbenchWindow.java:761)
    	at org.eclipse.ui.internal.Workbench$21.runWithException(Workbench.java:1045)
    	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
    	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
    	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
    	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3885)
    	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3506)
    	at org.eclipse.ui.application.WorkbenchAdvisor.openWindows(WorkbenchAdvisor.java:803)
    	at org.eclipse.ui.internal.Workbench$28.runWithException(Workbench.java:1384)
    	at org.eclipse.ui.internal.StartupThreading$StartupRunnable.run(StartupThreading.java:31)
    	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:179)
    	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150)
    	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4342)
    	at org.eclipse.ui.internal.StartupThreading.runWithoutExceptions(StartupThreading.java:94)
    	at org.eclipse.ui.internal.Workbench.init(Workbench.java:1379)
    	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2335)
    	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
    	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
    	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
    	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    	at testdcns.Application.start(Application.java:20)
    	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
    	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
    	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    	at java.lang.reflect.Method.invoke(Unknown Source)
    	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
    	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
    	at org.eclipse.equinox.launcher.Main.run(Main.java:1311)
    	at org.eclipse.equinox.launcher.Main.main(Main.java:1287)

    Voici aussi mon fichier MANIFEST.MF de mon projet
    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
     
    Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bundle-Name: %Bundle-Name
    Bundle-SymbolicName: testDCNS; singleton:=true
    Bundle-Version: 1.0.0.qualifier
    Bundle-Activator: testdcns.Activator
    Require-Bundle: org.eclipse.ui,
     org.eclipse.core.runtime,
     org.eclipse.core.resources,
     org.eclipse.ui.navigator,
     org.eclipse.ui.navigator.resources,
     org.eclipse.ui.console,
     org.eclipse.jdt.ui
    Bundle-ActivationPolicy: lazy
    Bundle-RequiredExecutionEnvironment: JavaSE-1.6
    Export-Package: com.mysql.jdbc;
      uses:="com.mysql.jdbc.log,
       org.xml.sax,
       javax.xml.transform,
       javax.naming,
       org.xml.sax.helpers,
       com.mysql.jdbc.profiler,
       com.mysql.jdbc.util,
       javax.net.ssl",
     com.mysql.jdbc.exceptions,
     com.mysql.jdbc.exceptions.jdbc4;uses:="com.mysql.jdbc.exceptions,com.mysql.jdbc",
     com.mysql.jdbc.integration.c3p0;uses:="com.mchange.v2.c3p0",
     com.mysql.jdbc.integration.jboss;uses:="org.jboss.resource.adapter.jdbc,org.jboss.resource.adapter.jdbc.vendor",
     com.mysql.jdbc.interceptors;uses:="com.mysql.jdbc",
     com.mysql.jdbc.jdbc2.optional;
      uses:="com.mysql.jdbc.log,
       javax.transaction.xa,
       javax.naming.spi,
       javax.sql,
       javax.naming,
       com.mysql.jdbc",
     com.mysql.jdbc.log;uses:="com.mysql.jdbc",
     com.mysql.jdbc.profiler;uses:="com.mysql.jdbc",
     com.mysql.jdbc.util;uses:="com.mysql.jdbc.log,com.mysql.jdbc"
    Bundle-ClassPath: mysql-connector-java-5.1.12-bin.jar,
     .


    Avez vous une idée? merci par avance

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

Discussions similaires

  1. [RCP/JFace/Swt] Sauvegarder l'état d'une application RCP
    Par papaetoo dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 23/09/2009, 16h33
  2. [RCP] Evénements de selection entre plusieurs vues
    Par stadou dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 29/01/2009, 16h30
  3. [MVC] lien entre la vue et le modèle
    Par TabrisLeFol dans le forum MVC
    Réponses: 3
    Dernier message: 18/12/2007, 21h59
  4. Réponses: 1
    Dernier message: 19/04/2006, 16h32
  5. Lien entre les vues 'Structure' et l'éditeur
    Par Tifauv' dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 13/05/2004, 16h06

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