你f所指向的Frame2是new出来的你改了当然跟当前的frame没有关心。

解决方案 »

  1.   

    to->lusxiao(lusxiao):
    应该怎么做,才能达到我的目的呢?
      

  2.   

    直接在其它线程中调用setText(str)可以吗?
      

  3.   

    不可以的,就是因为调用setText()不行才这样做的,也不行。
      

  4.   

    关键是你在线程中使用的f和在frame2的main()中使用的frame2要指向同一个实例(instance)
      

  5.   

    //try it
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class Frame2 extends JFrame {
        public Frame2() {
            super("test");
            this.setBounds(100,100,200,100);
            JPanel jp=new JPanel();
            jb=new JButton("test");
            jl=new JLabel("this is a test");
            jp.add(jl);
            jp.add(jb);
            Container contentpane=this.getContentPane();
            contentpane.add(jp,"South");
            jb.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    g=new Grow(Frame2.this);
                    g.start();
                }
            });
        }
        public void setString(String str){
            jl.setText(str);
        }
        public static void main(String[] args) {
            Frame2 frame2 = new Frame2();
            frame2.show();
        }
        private JButton jb;
        private final JLabel jl;
        private Grow g;
    }class Grow extends Thread{
        private Frame2 f;
        public Grow(Frame2 newFrame){
         f = newFrame;
        }
        
        public void run(){
          f.setString("测试");
        }
    }
      

  6.   

    g=new Grow(Frame2.this);不行,
    Frame2.this这是什么?