2014-12-04 158 views
1

大家好。java中的实例变量作用域

我正在为我的网吧创建一个java网络程序。我有此代码为我的服务器

import java.io.*; 
    import java.net.Socket; 
    import java.net.ServerSocket; 

public class Server 
{ 
    private String name; 
    private int id; 

    private Socket socket = null; 
    private ServerSocket serversocket = null; 
    private ObjectInputStream ois = null; 

    public Server() 
    { 
     new Thread(receive).start(); 

     while(true) 
     { 
      try 
      { 
       serversocket = new ServerSocket(4445); 
       socket = serversocket.accept(); 
       System.out.println("Connected.."); 
      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 

    } 

    Runnable send = new Runnable(){ 
     public void run() 
     { 

     } 

    }; 

    Runnable receive = new Runnable(){ 
     public void run() 
     { 
      while(true) 
      { 
       try 
       { 
        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
        User user = (User) ois.readObject(); 
        System.out.println(user); 
       } 
       catch(IOException e) 
       { 
        e.printStackTrace(); 
       } 
       catch(ClassNotFoundException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 

    public static void main(String [] args) 
    { 
     new Server(); 
    } 
} 

我的问题是,我不能访问里面我Runnable接口的代码我的实例变量。

例如“套接字”实例。此代码不可访问

Runnable receive = new Runnable(){ 
     public void run() 
     { 
      while(true) 
      { 
       try 
       { 
        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
        User user = (User) ois.readObject(); 
        System.out.println(user); 
       } 
       catch(IOException e) 
       { 
        e.printStackTrace(); 
       } 
       catch(ClassNotFoundException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }; 

什么是最好的方法,为什么不能在代码中访问?

+0

[为什么只有最终变量可以在匿名类中访问?](http://stackoverflow.com/questions/4732544/why-are-only-final-variables-accessible-in-anonymous-class) – m0skit0 2014-12-04 12:32:25

回答

1

试试这个

public Server() { 
    try { 
     serversocket = new ServerSocket(4445); 
     while (true) { 
      socket = serversocket.accept(); 
      new Thread(receive).start(); 
      System.out.println("Connected.."); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

谢谢,我错过了一个 – 2014-12-04 12:58:56

1

如果我没有记错,你需要做的插座场决赛。现在的理由让我感到难过。