无法访问类型为Server的封闭实例

Mathias Lykkegaard Lorenzen:

我现在从未遇到过Java方面的怪异问题。

错误为“无法访问类型为Server的封闭实例。必须使用类型为Server的封闭实例(eg xnew A(),其中x是Server的实例)来限定分配。”

我评论的那一行是发生错误的地方。

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();
            }
        }
    }
}
汤姆·霍顿-大头贴:

Server.ReceiveDataListener是(非静态)内部类。您是从静态上下文创建它的。您需要提供一个实例Server作为外部实例。但是,几乎可以肯定,您希望ReceiveDataListener成为静态嵌套类,或者可能是外部类。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法访问类型为...的封闭实例

Java-无法访问类型为Foo的封闭实例

无法访问类型为fbMain的封闭实例。必须使用fbMain类型的封闭实例来限定分配

错误:无法访问类型为Main的封闭实例。必须使用Main类型的封闭实例来限定分配(egxnew A()wh

作用域中无法访问类型为OuterClass.StaticNestedClass的封闭实例

无法访问(此处为类)的封闭实例

在MainActivity.this范围内无法访问MainActivity类型的封闭实例。

EPPlus无法访问封闭的流

无法访问DataTables实例

由于某些中间构造函数,因此无法使用类型为MySuperClass <B>的封闭实例

GCE 实例无法访问 - 连接:网络无法访问

Groovy方法无法访问封闭范围内的变量

无法访问SQL Server

使子类无法访问实例方法

无法访问 Sequelize 实例方法

Firebird第二实例无法访问

没有可访问的foo类型的封闭实例。为什么?

没有可访问的MainRender类型的封闭实例

无法访问 .NET Standard 库的类型

无法访问类型为string_google big query的值上的字段

动态Linq-类型为'Int32?'的方法 无法访问

提取为Google“无法访问”错误

如何访问封闭类的实例?

500 Internal Server Error无法访问

从Azure存储流式传输Blob-无法访问封闭的流

无法访问 web api(Azure 容器实例)

从外部文件导入Vuex实例时无法访问$ store

带有Activator的实例无法访问属性,反射

Firebase Jira集成错误-无法访问Jira实例