Ouvrir une nouvelle fenêtre sous Eclipse
bonjour:D
J'essaie de bouger des fenêtres sous éclipse
D'abord je dois fermer la fenêtre active
J'utilise pour cela une méthode déjà implémentée
Code:
1 2 3 4
| public boolean performFinish()
{
return( true);
} |
et je dois ouvrir une nouvelle fenêtre dans laquelle j'acquererai le path du fichier origine et son identificateur
je vous met le code:
Code:
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
| public int RecupereNomDesFichier() throws ClassNotFoundException, IllegalArgumentException, NullPointerException, SQLException
{
int selectedId;
String selectedFile;
if( InterbaseManager.connection == null)
MissionDatabaseManager.OpenDatabaseCoherence();
ArrayList<ElementWork> elementWorks = MissionDatabaseManager.ReadWork();
// charger les fichier de la base de donnée et remplir cette liste
performFinish();
try
{
Iterator<ElementWork> itWork = elementWorks.iterator();
FileDialog fileDialog = new FileDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
while( itWork.hasNext())
{
elementWork = (ElementWork)itWork.next();
int id = elementWork.Id;
String str = elementWork.wsText;
}
// selectedFile contient le path vers le fichier seléctionner
selectedFile = ((MessageDialog) fileDialog).open();
selectedId = ((MessageDialog) fileDialog).open();
}
catch(NullPointerException ex)
{
ex.printStackTrace();
}
catch( java.lang.ClassCastException ex)
{
ex.printStackTrace();
}
buildModel( selectedId, selectedFile);
// ToDo il faut ressortir le numéro saisi par l'utilisateur
return( selectedId); |
dans ce fichier j'ai trois lignes qui ne compilent pas: les deux suivantes
Code:
1 2 3
| // selectedFile contient le path vers le fichier seléctionner
selectedFile = ((MessageDialog) fileDialog).open();
selectedId = ((MessageDialog) fileDialog).open(); |
et celle ci
Code:
new FileDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
Qui m'aiguilera sera :ccool:
D'une part les problème de compilation sont derrière nous
D'autre part Je pars en NullPonterException
Code:
1 2 3 4
| java.lang.NullPointerException
at com.all4tec.matelo.linguistique.wizards.LinguistiqueImportWizard.RecupereNomDesFichier(LinguistiqueImportWizard.java:79)
at com.all4tec.matelo.linguistique.wizards.LinguistiqueImportWizard$1.run(LinguistiqueImportWizard.java:123)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) |
il part en exception sur la ligne:
Code:
FileDialog fileDialog = new FileDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
vous seriez :ccool: de m'aider sur ce point
J'ai du mal à répondre a tes questions?
Ve que je sais c'est que j'ai copié ce texte d'un développeur du produit que j'utilise:
J-ai déjà une fenêtre ouverte. J'essaie de la fermer avec la méthode performFinish(); J'ai beau appeler ce bout de code je ne vois pas la fenêtre se fermer.Après j'ai besoin d'ouvrir une autre fenêtre pour donner à l'utilisateur le choix des documents a traiter. C'est la que la ligne de code intervient
Les valeurs que j'ai avant de prendre l'exception
FileDialog a
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Open Declaration org.eclipse.swt.widgets.FileDialog.FileDialog(Shell parent)
Constructs a new instance of this class given only its parent.
Parameters:
parent a shell which will be the parent of the new instance
Throws:
IllegalArgumentException -
ERROR_NULL_ARGUMENT - if the parent is null
SWTException -
ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent
ERROR_INVALID_SUBCLASS - if this class is not an allowed subclass |
getWorKBench vaut
Code:
1 2 3 4 5 6 7
| Open Declaration IWorkbench org.eclipse.ui.PlatformUI.getWorkbench()
Returns the workbench. Fails if the workbench has not been created yet.
Returns:
the workbench |
getActiveWorkbechWindow vaut
Code:
1 2 3 4 5 6 7
| Open Declaration IWorkbenchWindow org.eclipse.ui.IWorkbench.getActiveWorkbenchWindow()
Returns the currently active window for this workbench (if any). Returns null if there is no active workbench window. Returns null if called from a non-UI thread.
Returns:
the active workbench window, or null if there is no active workbench window or if called from a non-UI thread |
getShell vaut
Code:
1 2 3 4 5 6 7 8
| Open Declaration Shell org.eclipse.ui.IWorkbenchWindow.getShell()
Returns this workbench window's shell.
Specified by: getShell() in IShellProvider
Returns:
the shell containing this window's controls or null if the shell has not been created yet or if the window has been closed |
Je ne sait pas faire d'autre chose
J'ai examiné les valeurs avant que ça plante.je ne sais pas faire plus. Si je dois faire plus il faut m'aider en étant plus directif. Sous débugger Je n'arrive pas à avoir autre chose que la javadoc
il génère deux autres exceptions
J'ai pris la modification que vous avez proposé
J'ai eu deux exceptions Je vous les indique
Code:
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
| Workbench: org.eclipse.ui.internal.Workbench@720d258b
ActiveWorkbenchWindow: org.eclipse.ui.internal.Workbench$71@700c1ae7
java.lang.reflect.InvocationTargetException
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1028)
at com.all4tec.matelo.linguistique.wizards.LinguistiqueImportWizard.getNextPage(LinguistiqueImportWizard.java:153)
at org.eclipse.jface.wizard.WizardPage.getNextPage(WizardPage.java:172)
at org.eclipse.jface.wizard.WizardPage.canFlipToNextPage(WizardPage.java:115)
at org.eclipse.jface.wizard.WizardDialog.updateButtons(WizardDialog.java:1349)
at org.eclipse.jface.wizard.WizardDialog.update(WizardDialog.java:1333)
at org.eclipse.jface.wizard.WizardDialog.updateForPage(WizardDialog.java:1264)
at org.eclipse.jface.wizard.WizardDialog.access$4(WizardDialog.java:1238)
at org.eclipse.jface.wizard.WizardDialog$8.run(WizardDialog.java:1227)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.jface.wizard.WizardDialog.showPage(WizardDialog.java:1225)
at org.eclipse.ui.internal.dialogs.ImportExportPage.treeDoubleClicked(ImportExportPage.java:234)
at org.eclipse.ui.internal.dialogs.ImportPage$2.doubleClick(ImportPage.java:72)
at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:845)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
at org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:843)
at org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java:1477)
at org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:1246)
at org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:249)
at org.eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.java:246)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:307)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at org.eclipse.ui.internal.handlers.WizardHandler$Import.executeHandler(WizardHandler.java:152)
at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:279)
at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:290)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829)
at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815)
at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at com.all4tec.matelo.ui.Application.start(Application.java:77)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
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:353)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
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:629)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Caused by: org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:4361)
at org.eclipse.swt.SWT.error(SWT.java:4276)
at org.eclipse.swt.SWT.error(SWT.java:4247)
at org.eclipse.swt.widgets.Display.error(Display.java:1258)
at org.eclipse.swt.widgets.Display.checkDevice(Display.java:764)
at org.eclipse.swt.widgets.Display.getShells(Display.java:2218)
at org.eclipse.ui.internal.progress.ProgressManagerUtil.getModalShellExcluding(ProgressManagerUtil.java:284)
at org.eclipse.ui.internal.progress.ProgressManagerUtil.getDefaultParent(ProgressManagerUtil.java:338)
at org.eclipse.ui.internal.Workbench$71.getShell(Workbench.java:3883)
at com.all4tec.matelo.linguistique.wizards.LinguistiqueImportWizard.RecupereNomDesFichier(LinguistiqueImportWizard.java:80)
at com.all4tec.matelo.linguistique.wizards.LinguistiqueImportWizard$1.run(LinguistiqueImportWizard.java:127)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) |
l'exception se produit sur le prinstln du getShell
si on suprime le println du getShell()
il sort avec les même exceptions:
Code:
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
| Workbench: org.eclipse.ui.internal.Workbench@14a0fdb
ActiveWorkbenchWindow: org.eclipse.ui.internal.Workbench$71@64065927
java.lang.reflect.InvocationTargetException
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1028)
at com.all4tec.matelo.linguistique.wizards.LinguistiqueImportWizard.getNextPage(LinguistiqueImportWizard.java:152)
at org.eclipse.jface.wizard.WizardPage.getNextPage(WizardPage.java:172)
at org.eclipse.jface.wizard.WizardPage.canFlipToNextPage(WizardPage.java:115)
at org.eclipse.jface.wizard.WizardDialog.updateButtons(WizardDialog.java:1349)
at org.eclipse.jface.wizard.WizardDialog.update(WizardDialog.java:1333)
at org.eclipse.jface.wizard.WizardDialog.updateForPage(WizardDialog.java:1264)
at org.eclipse.jface.wizard.WizardDialog.access$4(WizardDialog.java:1238)
at org.eclipse.jface.wizard.WizardDialog$8.run(WizardDialog.java:1227)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.jface.wizard.WizardDialog.showPage(WizardDialog.java:1225)
at org.eclipse.ui.internal.dialogs.ImportExportPage.treeDoubleClicked(ImportExportPage.java:234)
at org.eclipse.ui.internal.dialogs.ImportPage$2.doubleClick(ImportPage.java:72)
at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:845)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
at org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:843)
at org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java:1477)
at org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:1246)
at org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:249)
at org.eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.java:246)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:307)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at org.eclipse.ui.internal.handlers.WizardHandler$Import.executeHandler(WizardHandler.java:152)
at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:279)
at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:290)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
at org.eclipse.ui.menus.CommandContributionItem.handleWidgetSelection(CommandContributionItem.java:829)
at org.eclipse.ui.menus.CommandContributionItem.access$19(CommandContributionItem.java:815)
at org.eclipse.ui.menus.CommandContributionItem$5.handleEvent(CommandContributionItem.java:805)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at com.all4tec.matelo.ui.Application.start(Application.java:77)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
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:353)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
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:629)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Caused by: org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:4361)
at org.eclipse.swt.SWT.error(SWT.java:4276)
at org.eclipse.swt.SWT.error(SWT.java:4247)
at org.eclipse.swt.widgets.Display.error(Display.java:1258)
at org.eclipse.swt.widgets.Display.checkDevice(Display.java:764)
at org.eclipse.swt.widgets.Display.getShells(Display.java:2218)
at org.eclipse.ui.internal.progress.ProgressManagerUtil.getModalShellExcluding(ProgressManagerUtil.java:284)
at org.eclipse.ui.internal.progress.ProgressManagerUtil.getDefaultParent(ProgressManagerUtil.java:338)
at org.eclipse.ui.internal.Workbench$71.getShell(Workbench.java:3883)
at com.all4tec.matelo.linguistique.wizards.LinguistiqueImportWizard.RecupereNomDesFichier(LinguistiqueImportWizard.java:80)
at com.all4tec.matelo.linguistique.wizards.LinguistiqueImportWizard$1.run(LinguistiqueImportWizard.java:126)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) |
L'état de RécupèreNomDesFichiers
Je conclue que je dois ajouter du code d' IWizardPage getWizard()
J'ai essayé
Code:
1 2
| IWizardPage wizard.getWizard();
IWizardContainer shell = wizard.getSchell(); |
ce qui ne compile pas.
Code:
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
| public int RecupereNomDesFichiers() throws ClassNotFoundException, IllegalArgumentException, NullPointerException, SQLException
{
int selectedId = 0;
int integerToBeDefined = 0;
String selectedFile = null;
if( InterbaseManager.connection == null)
MissionDatabaseManager.OpenDatabaseCoherence();
ArrayList<ElementWork> elementWorks = MissionDatabaseManager.ReadWork();
// charger les fichier de la base de donnée et remplir cette liste
performFinish();
try
{
System.out.println("Workbench: " + PlatformUI.getWorkbench());
System.out.println("ActiveWorkbenchWindow: " + PlatformUI.getWorkbench().getModalDialogShellProvider());
FileDialog fileDialog = new FileDialog(PlatformUI.getWorkbench().getModalDialogShellProvider().getShell());
Iterator<ElementWork> itWork = elementWorks.iterator();
while( itWork.hasNext())
{
elementWork = (ElementWork)itWork.next();
int id = elementWork.Id;
String str = elementWork.wsText;
}
// selectedFile contient le path vers le fichier seléctionner
selectedFile = (String)( fileDialog).open();
selectedId = (int)integerToBeDefined;
}
catch(NullPointerException ex)
{
ex.printStackTrace();
}
catch( java.lang.ClassCastException ex)
{
ex.printStackTrace();
}
buildModel( selectedId, selectedFile);
// ToDo il faut ressortir le numéro saisi par l'utilisateur
return( selectedId);
} |
J'ai tulours le même status
Caused by: org.eclipse.swt.SWTException: Invalid thread access
sur le getShell();
peut être est ce du au fait que la fenêtre active est fermée en théorie et toujours ouverte en pratique