我在一个类中要获得另一个类中的static 的静态变量,  不过第二个类是一个线程类.我要在线程中为这
个静态的变量赋值  ,然后在第一个类中输出.(可能下面的代码有些问题,这个不重要.基本是这个意思.)    public class MyThreadMain{
     public static void main(String arg[]){
        MyThreadMain thMain=new MyThreadMain();
        trMain.getName();
     }     public void getName(){
         MyThread my=new MyThread();
         System.out.println("[First Print]Name: "+MyThread.name);
     }   
  }  
  public class MyThread extends Thread{
     public static String name="";
     
     public void run(){
        if(name.length==0){
           name="OK"
           System.out.println("[Second Print]Name: "+name);
        }
     }
  }  

解决方案 »

  1.   

     首先在
           MyThread my=new MyThread(); 
    之后,要启动线程:
       my.start();
    然后在run()中,添加赋值语句啊(正如你所做的name="OK" )最后运行,应该没有问题吧
      
      

  2.   

    答:在第二个线程类MyThread中,定义一个public static synchronized String getName(){...},在该方法中返回那个共享的static String name 这个变量的值。然后在第一个类中来调用getName()方法。
    以上仅供你参考
      

  3.   

    另外一个建议是:不要在MyThread 类中将 String name 定义为public .建议改为:
    private static String name ;
      

  4.   

    一楼的不行  我要真正能成功的  如果各位试过  确实能够成功!  把CODE发下  马上给分   谢谢
      

  5.   

    答:运行正常的代码如下:
    public class MyThreadMain{ 
        public static void main(String arg[]){ 
            MyThreadMain thMain=new MyThreadMain();        
            thMain.getName(); 
        }     public void getName(){ 
            MyThread my=new MyThread(); 
            my.start();
            try {
    my.join();
    } catch (InterruptedException e) 
    {
    }
            System.out.println("[First Print]Name: "+MyThread.returnName()); 
        }  
      }  
    public class MyThread extends Thread{ 
        private static String name=""; 
        public static String returnName()
        {
         return name;
        }
        public void run(){ 
            if(name.length()==0){ 
              name="OK"; 
              System.out.println("[Second Print]Name: "+name); 
            } 
        } 
      } 
    运行结果:
    [Second Print]Name: OK
    [First Print]Name: OK
      

  6.   

    看看是不是这个意思public class MyThreadMain {
    public static void main(String arg[]) {
    MyThread mt = new MyThread();
    mt.start();
    try {
    mt.join();//让mt执行完了再取name就能保证能取到了
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    MyThreadMain thMain = new MyThreadMain();
    thMain.getName();
    } public void getName() {
    MyThread my = new MyThread();
    System.out.println("[First Print]Name: " + MyThread.name);
    }
    }  public class MyThread extends Thread{
        public static String name="";
       
        public void run(){
            if(name.length()==0 ){
              name="OK";
              System.out.println("[Second Print]Name: "+name);
            }
        }
      } 
      

  7.   


    class Thread1 extends Thread{
    static private int num=0;
    public void run(){
    int i=0;
    while(true){
    num=i++;
    System.out.println(num+"sub thread");
    }
    }
    public int getNum(){
    return num;
    }
    }
    public class Test{
    public static void main(String [] args){
    Thread1  myThread=new Thread1();
    myThread.start();
    while(true){
     System.out.println(myThread.getNum()+"Main thread");
    }
    }
    }