我想在另外一个类中调用socket的子函数run()中一个变量的值。
这个怎么弄啊?

解决方案 »

  1.   

    子函数?
    创建一个javabean,将函数中的变量用javabean的属性代替。这样在另一个类中就可以访问了。
      

  2.   

    javabean?没用过 是不是没明白我的意思啊  主要是变量怎么在另外一个类中调用?而这个变量是在线程中!!!
      

  3.   

    创建一个全局变量 假设为var,在对var创建其相关的 get 和 set 方法 即:
    [align=center]
    getvar(){
      retrun var;
    }setvar(var2){
      this.var = var2;} [/align]
    在你说的线程里面将你想调用的变量赋值给 setvar()函数,假设你想要调用的变量是var2 那么可以这样 setvar(var2),当你在另外一个类里面想调用var2的值的时候,直接掉用getvar()这个方法就可以了
      

  4.   

    这个方法是可以调用,只是为什么每次调用的变量的值还是null,不是线程里面的值呢?是不是线程结束了变量就恢复成null了?
      

  5.   

    package certification;import java.io.DataInputStream;   
    import java.io.DataOutputStream;   
    import java.io.IOException;   
    import java.net.ServerSocket;   
    import java.net.Socket;   
      
    public class Server {   
        /**  
         * @param args  
         * @throws IOException   
         */  
        public static void main(String[] args) {   
            Server manager = new Server();   
            manager.doListen();   
        }   
      
        public void doListen() {   
            ServerSocket server;   
            try {   
                server = new ServerSocket(9991);   
                while (true) {   
                    Socket client = server.accept();   
                    new Thread(new SSocket(client)).start();   
                }   
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
      
        }   
      
        //服务器进程   
        class SSocket implements Runnable {   
      
            Socket client;   
      
            public SSocket(Socket client) {   
                this.client = client;   
            }   
      
            public  void run() {   
                DataInputStream input;   
                DataOutputStream output;   
                try {   
                    input = new DataInputStream(client.getInputStream());   
                    output = new DataOutputStream(client.getOutputStream());   
                  String listMsg = input.readUTF();   
                    output.writeUTF("Recive:  " + listMsg + "    \r\n Thx...");   
                    System.out.println("Recive:   " + listMsg);   
                   listMsg = input.readUTF();   
                   output.writeUTF("Recive Second:  " + listMsg + "    \r\n Thx...");   
                   System.out.println("Recive Second:   " + listMsg);   
                } catch (IOException e) {   
                    e.printStackTrace();   
                }   
            }   
        }   
      }
      

  6.   

    我要调用String listMsg 的值。第二个String listMsg 可以不要的。
      

  7.   

    output.writeUTF("Recive Second: " + listMsg + " \r\n Thx..."); 
    在writeUTF过后要调用 output.flush() 才能把字符串写进流里面 你看看 你的客户端是不是调用了这个函数 如果都对了的话 listMsg 应该是有值的 但是listMsg 是String 类型的 只能存一条数据 你如果想把服务器收到的消息都存起来 就用 ArrayList<String>listMsg 这个吧
      

  8.   

     我已经把output.writeUTF("Recive Second: " + listMsg + " \r\n Thx...");
    注释掉了 我打印了一下,是有值的,就是不能把void run()中listMsg的值调出来。 我是要在另外一个类文件中调用listMsg的值。
      

  9.   

      那怎么解决呢?其实就是在SSocket类里面调用有值 
      

  10.   

    [Quote=引用 14 楼 sharke118 的回复:]
    本类调用都有值 那就是你类间调用的问题嘛 本类有这个值 其他类调用这个值不成功 只能说是 类间调用出了问题赛
    那怎么解决呢?其实就是在SSocket类里面调用有值  在该类的main里面调用没有值。
      

  11.   


    把上面那个var 全局变量设成 static 变量 试试
      

  12.   

    先谢谢了 我设的是public static。