jdk descargar actualizar java

java - descargar - No se puede acceder a ninguna instancia adjunta de tipo Servidor



java jdk (4)

Me encuentro con un problema extraño en Java en el momento que nunca he visto antes.

El error es "No se puede acceder a ninguna instancia adjunta de tipo Servidor. Debe calificar la asignación con una instancia adjunta de tipo Servidor (por ejemplo, nxnew A () donde x es una instancia de Servidor)".

La línea que he comentado es donde ocurre el error.

package game; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.NoSuchElementException; import java.util.StringTokenizer; public class Server { private static List<ThreadModtagClient> clients; class ReceiveDataListener implements SocketListener { @Override public void dataReceived(ThreadModtagClient client, String data) { } } /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub clients = new ArrayList<ThreadModtagClient>(); ServerSocket welcomeSocket = new ServerSocket(16567); while (true) { Socket connectionSocket = welcomeSocket.accept(); ThreadModtagClient client = new ThreadModtagClient(connectionSocket); ReceiveDataListener listener = new ReceiveDataListener(); // <--- this is where the error occurs client.addSocketListener(listener); clients.add(client); } } } class ThreadModtagClient extends Thread implements SocketThread { private BufferedReader inFromClient; private DataOutputStream outToClient; private Player player; private List<SocketListener> listeners; public ThreadModtagClient(Socket connection) throws IOException { inFromClient = new BufferedReader(new InputStreamReader(connection.getInputStream())); outToClient = new DataOutputStream(connection.getOutputStream()); listeners = new ArrayList<SocketListener>(); } public void addSocketListener(SocketListener listener) { listeners.add(listener); } public void removeSocketListener(SocketListener listener) { listeners.remove(listener); } public Player getPlayer() { return player; } public void setPlayer(Player player) { this.player = player; } public void sendData(String data) throws IOException { outToClient.writeChars(data); } public void run() { while (true) { try { String data = inFromClient.readLine(); for(SocketListener listener : listeners) { listener.dataReceived(this, data); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch(NoSuchElementException e1) { e1.printStackTrace(); } } } }


Bueno, el error te dice exactamente lo que se necesita hacer. ReceiveDataListener es una clase interna no estática y debe accederse a través de un objeto de la clase externa (Servidor). Tiene tres opciones: 1. seguir el consejo del compilador (acceder a través de un objeto del servidor) 2. hacer que ReceiveDataListener esté estática 3. extraer ReceiveDataListener a un .java separado y usarlo.

HTH


Esto se debe a que está intentando crear un ReceiveDataListener a partir de un método estático, y dado que ReceiveDataListener no es una clase estática, debe estar asociado a una instancia de Server.


No puede instanciar una clase interna no estática a partir de un contexto estático como main .


Server.ReceiveDataListener es una clase interna (no estática). Lo estás creando desde un contexto estático. Debe proporcionar una instancia de Server para ser la instancia externa. Sin embargo, es casi seguro que desee que ReceiveDataListener sea ​​una clase anidada estática, o probablemente una clase externa.