本帖最后由 lishen226 于 2009-10-25 20:45:23 编辑

解决方案 »

  1.   

    第一种错误:mainUI未被实例化,只是一个空指针null,你不可以调用空指针的方法changeSomething.
    第三种也是这样;
    好像只有第二种对,因为该线程还没被执行启动,所以编译器没有检验到 mainUI.changeSomething();
    这个mainui是空指针,因为你可以在这个线程启动前对这个mainui进行实例化,我说的对不
      

  2.   

    哦,是我问的有问题,这里不考虑实例化的问题,假设已经实例化了,
    我只想知道这三种调用是不是属于“访问”了Swing组件
      

  3.   

    在Swing中,如果某个方法能够改变显示,该方法就应该在EDT中执行.
    你所说的那个例子,属于访问了Swing组件.再比方说:自定义Swing组件中有这么一个属性:int rgb=138,该属性代表了该组件的setBackground(new Color(rgb,rgb,rgb)),且该组件已经显示;而另一台主机需要该问这台机子的这个组件的该属性,访问该属性时,必须在EDT中。
    了解了吧?
      

  4.   

    嘿嘿,又麻烦你了!
    “在Swing中,如果某个方法能够改变显示,该方法就应该在EDT中执行.”这句话我能理解,但是我不知道如果某个方法并不改变显示,那它需不需要在EDT中执行,比如下面例子中的getStr()和setStr()方法:
    是不是说我调用了TheFrame的getStr()就属于“访问”了Swing组件,就需要在EDT中执行呢?public class TheFrame extends JFrame implements MainUI {
    String str = "";//此变量不对界面的显示产生任何影响
    public String getStr() {
    return str;
    }
    public void setStr(String str) {
    this.str = str;
    }
    }