Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/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 如何在Eclipse RCP应用程序中5秒钟后自动隐藏标签?_Java_User Interface_Swt_Eclipse Rcp - Fatal编程技术网

Java 如何在Eclipse RCP应用程序中5秒钟后自动隐藏标签?

Java 如何在Eclipse RCP应用程序中5秒钟后自动隐藏标签?,java,user-interface,swt,eclipse-rcp,Java,User Interface,Swt,Eclipse Rcp,我试图在RCP应用程序中创建一个最初不可见的标签。当我单击“保存”按钮时,它将变为可见。同样,它应该在5秒钟内不可见 为此,我编写了以下代码: saveButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { // TODO Auto-generated

我试图在RCP应用程序中创建一个最初不可见的标签。当我单击“保存”按钮时,它将变为可见。同样,它应该在5秒钟内不可见

为此,我编写了以下代码:

saveButton.addSelectionListener(new SelectionListener() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                // TODO Auto-generated method stub
                System.out.println(textName.getText());
                String text = textName.getText();
                tree.getSelection()[0].setText(text);
                String nodeId = ((TreeStructure) tree.getSelection()[0]
                        .getData()).getNodeId();
                // update the database
                UpdateTree updateTree = new UpdateTree();
                updateTree.renameNode(text, nodeId);
                label.setBounds(xForFirstButton, yIndexForButtons
                        + Constants.BUTTON_BUFFER, Constants.BUTTON_WIDTH,
                        Constants.BUTTON_HEIGHT);
                label.setVisible(true);

                AbstractAction myAction = new AbstractAction() {

                    private static final long serialVersionUID = 1L;

                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        // TODO Auto-generated method stub
                        label.setVisible(false);
                    }
                };

                Timer myTimer = new Timer(5000, myAction);
                myTimer.start();
            }
但是,此代码在运行时会出现以下错误:

Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.swt.SWT.error(SWT.java:4441)
    at org.eclipse.swt.SWT.error(SWT.java:4356)
    at org.eclipse.swt.SWT.error(SWT.java:4327)
    at org.eclipse.swt.widgets.Widget.error(Widget.java:476)
    at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:367)
    at org.eclipse.swt.widgets.Control.setVisible(Control.java:3781)
    at com.app.editor.views.EditorView$2$1.actionPerformed(EditorView.java:183)
    at javax.swing.Timer.fireActionPerformed(Unknown Source)
    at javax.swing.Timer$DoPostEvent.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
谁能指出问题所在吗


提前谢谢

要从非ui线程的线程更新ui,必须使用以下命令:

Display.getDefault().syncExec(new Runnable() {
     public void run() {
           // Update UI here
     }
});
syncExec
将在rcp应用程序的ui线程中执行操作


这类似于Swing中的
invokeLater()
方法。

要从非ui线程的线程更新ui,必须使用以下方法:

Display.getDefault().syncExec(new Runnable() {
     public void run() {
           // Update UI here
     }
});
syncExec
将在rcp应用程序的ui线程中执行操作


这类似于Swing中的
invokeLater()
方法。

所有更改UI的代码都必须在UI线程中运行-
计时器在不同的线程中运行代码

不要使用计时器,而是使用:

Display.getDefault().timerExec(milliseconds, runnable);

所有更改UI的代码都必须在UI线程中运行-
Timer
正在另一个线程中运行代码

不要使用计时器,而是使用:

Display.getDefault().timerExec(milliseconds, runnable);

请注意,您必须检查要隐藏的标签是否尚未在runnable中释放。否则,您可能会导致小部件释放异常。请注意,您必须检查要隐藏的标签是否尚未在runnable中释放。否则,您可能会导致小部件处理异常。