software - java verify




प्रकार सर्वर का कोई संलग्न उदाहरण सुलभ नहीं है (3)

अच्छी तरह से त्रुटि आपको बताती है कि वास्तव में क्या करने की आवश्यकता है। ReceiveDataListener एक गैर स्थैतिक आंतरिक वर्ग है और बाहरी वर्ग (सर्वर) के किसी ऑब्जेक्ट के माध्यम से पहुंचा जाना चाहिए। आपके पास तीन विकल्प हैं: 1. कंपाइलर की सलाह लें (सर्वर की ऑब्जेक्ट के माध्यम से एक्सेस करें) 2. ReceiveDataListener स्थिर बनाएं 3. GetiveDataListener को अलग .java पर खींचें और इसका उपयोग करें।

HTH

मुझे इस समय जावा में एक अजीब समस्या का सामना करना पड़ रहा है जिसे मैंने कभी नहीं देखा है।

त्रुटि यह है कि "प्रकार का कोई संलग्न उदाहरण सर्वर उपलब्ध नहीं है। आवंटन को सर्वर के एक संलग्न उदाहरण (egxnew ए () जहां एक्स सर्वर का उदाहरण है) के साथ आवंटन योग्य होना चाहिए।"

जिस पंक्ति पर मैंने टिप्पणी की है वह त्रुटि है जहां त्रुटि होती है।

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 को स्थैतिक नेस्टेड क्लास, या शायद बाहरी कक्षा बनना चाहते हैं।





java