java - 使用 Eclipse 的 java 定时器

标签 java eclipse timer

我正在尝试使用 Eclipse 用 Ja​​va 编写一个小程序,但我有点迷失了。

有人可以向我解释一下(以“傻瓜式的方式”)我需要做什么才能使用计时器重新绘制表单吗?

我正在尝试做一些像时钟一样简单的事情。我需要一个计时器每秒重新绘制它。

类似这样的事情:

private void activateTimer()
{
    ActionListener myAction;
    myAction = new ActionListener () 
    { 
        public void actionPerformed(ActionEvent e) 
        { 
           whatever.redraw();
         } 

    };
    myTimer = new Timer(1000, myAction);
    myTimer.start();
}

当必须执行该操作时,我收到错误:

*Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access*

这是我收到的完整异常:

Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.swt.SWT.error(SWT.java:4282)
    at org.eclipse.swt.SWT.error(SWT.java:4197)
    at org.eclipse.swt.SWT.error(SWT.java:4168)
    at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
    at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:359)
    at org.eclipse.swt.widgets.Control.redraw(Control.java:2327)
    at default.myTimer$1.actionPerformed(myTimer.java:97)
    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$000(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)

有关每秒刷新屏幕的任何想法或示例吗?

我已按照其中一个答案中的说明进行操作,但仍然收到相同的错误。

最佳答案

您必须将其拆分为单独的方法,最好使用javax.swing.Action而不是ActionListener

private void activateTimer(){
    myTimer = new Timer(1000, myAction);
    myTimer.start();
}

private Action myAction = new AbstractAction() {

    private static final long serialVersionUID = 1L;

    @Override
    public void actionPerformed(ActionEvent e) {
          whatever.redraw();
    }
};

关于java - 使用 Eclipse 的 java 定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7552596/

相关文章:

timer - 为什么 SetTimer 之后命令不运行?

linux - 使用 glibc 定时器时出现段错误

java - 如何使用 OSMDROID 创建像 Google map 一样的方向蓝点?

java - 在数据存储 View 中找不到使用 objectify 持久化的实体

java - "ERROR: Unresolved reference: Thread in Eclipse IDE"

eclipse - 将光标从 block 或矩形更改为线?

java - 无法卸载 Java JRE 1.7 32 位

java - 声明迭代器<?扩展 E & Comparable<? java 中的 super E>> 迭代器

java - 为什么 System.err 在 Eclipse 中比 System.out 慢?

javascript - 更改 "speed"几秒钟