有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java SSLSocket错误:无法从非静态上下文引用

我很难看出这里出了什么问题(课堂的一部分):

public class Network implements Runnable {    
    private static Network cachedInstance;

    private static boolean connected;

    //private Socket clientSocket;
    private SSLSocket clientSocket;
    private PrintWriter out;
    private BufferedReader in;

    private Map<String, SyncObject> waitForServer;

    private Network(final String hostname, final int port) {
        try {
            Socket baseSocket = new Socket();
            baseSocket.connect(new InetSocketAddress(hostname, port), Config.TIMEOUT);
            clientSocket = (SSLSocket)SSLSocketFactory.createSocket(baseSocket, hostname, port, true);
            clientSocket.startHandshake();
            out = new PrintWriter(clientSocket.getOutputStream(), true);     
            in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            connected = true;
        } catch (IOException ex) { 
            connected = false;
        }

        waitForServer = new HashMap<>();
    }

我得到一个错误:

C:\Users\Frank\Dropbox\NetbeansProjects\TradingCardGame\src\network\Network.java:47: error: non-static method createSocket(Socket,String,int,boolean) cannot be referenced from a static context
        clientSocket = (SSLSocket)SSLSocketFactory.createSocket(baseSocket, hostname, port, true);

我是如何处于静态环境中的

问候


共 (1) 个答案

  1. # 1 楼答案

    ^{}an instance method。这意味着SSLSocketFactory类的实例应该在能够对其调用createSocket方法之前创建

    你可以试试这个

    SocketFactory sslSocketFactory = SSLSocketFactory.getDefault();
    clientSocket = (SSLSocket) sslSocketFactory.createSocket(baseSocket, hostname, port, true);