本帖最后由 jdgdf566 于 2013-11-30 21:39:52 编辑

解决方案 »

  1.   

    你在匿名类里面申明的引用,在外面肯定拿不到啊。不能这样做。既然你需要在其他地方访问myJFrame,那你就要把这个引用放到外面来申明。
      

  2.   


    Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    MyJFrame myJFrame = new MyJFrame();
                    myJFrame.setLocation(300, 300);
                    myJFrame.setVisible(true);
                }
            }
    SwingUtilities.invokeLater(runnable);实现了Callable或Runnable的类的实例是不是也是(简单的)线程?存在线程安全问题?
      

  3.   


    Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    MyJFrame myJFrame = new MyJFrame();
                    myJFrame.setLocation(300, 300);
                    myJFrame.setVisible(true);
                }
            }
    SwingUtilities.invokeLater(runnable);实现了Callable或Runnable的类的实例是不是也是(简单的)线程?存在线程安全问题?不是所有的实现了Runnable的类都是线程,Java线程只有一个就是Thread,Runnable也须要依靠Thread才能启动。
    在你这里确实是在线程中运行的,那是因为你调用了SwingUtilities.invokeLater,但是你这里应该基本不存在线程安全问题。因为你在外面访问不到myJFrame,没有数据共享就不存在线程安全问题。
      

  4.   


    Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    MyJFrame myJFrame = new MyJFrame();
                    myJFrame.setLocation(300, 300);
                    myJFrame.setVisible(true);
                }
            }
    SwingUtilities.invokeLater(runnable);实现了Callable或Runnable的类的实例是不是也是(简单的)线程?存在线程安全问题?不是所有的实现了Runnable的类都是线程,Java线程只有一个就是Thread,Runnable也须要依靠Thread才能启动。
    在你这里确实是在线程中运行的,那是因为你调用了SwingUtilities.invokeLater,但是你这里应该基本不存在线程安全问题。因为你在外面访问不到myJFrame,没有数据共享就不存在线程安全问题。
    多谢。
    现在在事件方法里面执行一个SwingWorker:
    手册上说“因为 SwingWorker 实现了 Runnable,所以可以将 SwingWorker 提交给 Executor 执行。”
    我打算用Executors.newCachedThreadPool().execute(mySwingWorker),是否合适?会使线程重用吗?