• SWTException: Invalid thread access解决方法总结


    在创建SWT界面的线程之外的线程中尝试去修改界面元素.将抛出以下异常

    Exception in thread “Thread-0” org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.swt.SWT.error(SWT.java:2942)
    at org.eclipse.swt.SWT.error(SWT.java:2865)
    at org.eclipse.swt.SWT.error(SWT.java:2836)
    上述Thread-0是另外开启的一个线程.
    【解析】:
    在SWT程序中,SWT会自动创建一个用户界面线程,非用户界面线程不能直接操作用户界面线程,要想在另外一个线程中尝试修改用户界面,应采用一下方法:

    if (!this.display.isDisposed()) {
    //首先创建一个单独的线程用来修改界面元素
    Runnable runnable = new Runnable() {
    public void run() {
    // 你改界面的代码
    }
    };
    //通过syncExec方法来执行上一步创建的线程
    display.syncExec(runnable);
    }
    swt-doc中的说明:
    public void syncExec(java.lang.Runnable runnable)
    Causes the run() method of the runnable to be invoked by the user-interface thread at the next reasonable opportunity. The thread which calls this method is suspended until the runnable completes.
    Parameters:
    runnable – code to run on the user-interface thread.
    同步调用,需要等待主界面处理完成之后,才能继续。
    此外,与之对应的另一个方法:
    public void asyncExec(java.lang.Runnable runnable)
    Causes the run() method of the runnable to be invoked by the user-interface thread at the next reasonable opportunity. The caller of this method continues to run in parallel, and is not notified when the runnable has completed.
    Parameters:
    runnable – code to run on the user-interface thread.
    异步调用,不等待主界面线程处理结果。
    [整理自网络]

  • 相关阅读:
    django-rest-framework
    史上最全的状态码
    __new__、__init__、__call__三个特殊方法
    量化投资与Python之pandas
    MongoDB 3.0 Release Notes
    TokuMX写操作无法加锁的问题
    TokuMX唯一索引不支持dropDups选项
    接着写吧
    Windows下Python IDLE设置
    20145320周岐浩免考
  • 原文地址:https://www.cnblogs.com/wwssgg/p/15988521.html
Copyright © 2020-2023  润新知