Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何解决这个问题;“小部件已处理”;问题_Java_Eclipse_Swt_Rcp - Fatal编程技术网

Java 我如何解决这个问题;“小部件已处理”;问题

Java 我如何解决这个问题;“小部件已处理”;问题,java,eclipse,swt,rcp,Java,Eclipse,Swt,Rcp,在我的视图中,我在循环中创建按钮,并为每个按钮分配一个图像,在视图的构造函数中初始化两个图像 下面是按钮的代码: for (int i = 0; i < 5; i++) { final OButton button = new OButton(compositeT1, SWT.PUSH); button.setText("T1" + i); button.setData("1"+i); GridData gd = new Gr

在我的视图中,我在循环中创建按钮,并为每个按钮分配一个图像,在视图的构造函数中初始化两个图像

下面是按钮的代码:

for (int i = 0; i < 5; i++) {
        final OButton button = new OButton(compositeT1, SWT.PUSH);
        button.setText("T1" + i);
        button.setData("1"+i);
        GridData gd = new GridData(50,30);
        button.setButtonRenderer(RedButtonRenderer.getInstance());
        button.setLayoutData(gd);
         if(!tournees.contains(button.getData().toString())){
             button.setToolTipText("Livraison");
             button.setImage(imgCamion);
         }else{
             button.setToolTipText("Appel");
             button.setImage(imgCasque);

         }
        button.addSelectionListener(new SelectionListener() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                int tourneeInt = Integer.parseInt(button.getData().toString());
                if (button.getImage().equals(imgCasque)) {
                    openAppelEditor(button.getData().toString());
                }else if(tourneeInt == 12 || tourneeInt == 13  || tourneeInt == 14){
                    openLivraisonEditor(String.valueOf(tourneeInt - 2),button.getData().toString());
                }else if(tourneeInt == 10) {
                    openLivraisonEditor("43",button.getData().toString());
                }else if (tourneeInt == 11 ){
                    openLivraisonEditor("44",button.getData().toString());
                }


            }
            @Override
                public void widgetDefaultSelected(SelectionEvent e) {}
            }); 
问题是,当我关闭视图并重新打开它时,我收到错误:“小部件已释放”:

以下是错误行:

!!消息无法创建视图ID…/SelectionTournePorteFeuilleView:小部件已释放
!堆栈0

org.eclipse.swt.SWTException: Widget is disposed
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.Widget.error(Widget.java:468)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
at org.mihalis.opal.obutton.OButton.getImage(Unknown Source)
at org.mihalis.opal.obutton.AbstractButtonRenderer.createDisabledImage(Unknown Source)
at org.mihalis.opal.obutton.OButton.setImage(Unknown Source)
at com.croquegel.crm.vente.gestionportefeuille.view.SelectionTourneePortefeuilleView.createButtons(SelectionTourneePortefeuilleView.java:582)
at com.croquegel.crm.vente.gestionportefeuille.view.SelectionTourneePortefeuilleView.createPartControl(SelectionTourneePortefeuilleView.java:347)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:386)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:240)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:315)
at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:534)
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:1245)
at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1198)
at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1597)
at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:643)
at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:570)
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:981)
at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3726)
at org.eclipse.ui.internal.WorkbenchPage.busySetPerspective(WorkbenchPage.java:1124)
at org.eclipse.ui.internal.WorkbenchPage.access$16(WorkbenchPage.java:1108)
at org.eclipse.ui.internal.WorkbenchPage$19.run(WorkbenchPage.java:3827)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:3825)
at org.eclipse.ui.internal.Workbench.showPerspective(Workbench.java:2875)
我如何知道处置了哪个小部件

我在重新打开视图后进行了调试,该图像的属性为false


由于我正在处理一个RCP应用程序,我在相应的透视图中添加了视图。

解决方案是将图像分配给线程中的按钮

Display.getDefault().asyncExec(new Runnable() {
                    @Override
                        public void run() {
                        //yourCode
                           });

为我工作。

您在哪里创建这个类的实例?粘贴代码。我不是实例化视图,因为我正在处理RCP应用程序,我将视图添加到相应的透视图中。你能用这个类发布plugin.xml吗
selectionTournePortefeilleView
?如果不重写dispose方法,是否会得到相同的异常?建议使用
IWorkbenchPage.hideView()
Display.getDefault().asyncExec(new Runnable() {
                    @Override
                        public void run() {
                        //yourCode
                           });