繁体   English   中英

如何修复找不到符号的编译器错误

[英]how to fix the cannot find symbol compiler error

我正在遵循有关如何在Java中制作客户端/服务器程序的教程(此处为: https : //docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html ),然后我完成了在套接字教程中,您可以制作一个客户端/服务器程序,在服务器/服务器程序中,服务器告诉敲打的笑话,然后客户端做出响应:

服务器:“敲门!”

客户:“谁在那里?”

服务器:“ Dexter”。

客户:“糊涂者是谁?”

服务器:“用冬青树树枝打磨的大厅。”

客户:“格兰”。

我已经复制了KnockKnockClient.java,KnockKnockServer.java,KnockKnockProtocol.java的代码(我将这些文件命名为Client.java,Server.java,Protocol.java),现在我要做的最后一部分是编译并运行代码。 我成功地编译了协议和客户端代码,但是每当我尝试编译服务器代码时,都会出现类似于第一个错误的错误

我已经尝试了所有方法,但找不到解决方法。 我知道导致错误的代码行正在尝试使用KnockKnockProtocol.java文件创建对象,但这就是我真正能想到的全部。 我检查了拼写,尝试从SocketsKnockKnockServer包的父文件夹中编译代码,并且确实编译了代码,但是当我尝试从父文件夹中运行它时,出现了另一个错误,看起来像第二个错误。 当我尝试从package文件夹运行它时,出现了与以前相同的错误。

//the code
package SocketsKnockKnockServer;

import java.net.*;
import java.io.*;

public class Server {

    public static void main(String[] args) throws IOException {

        if (args.length != 1) {
            System.err.println("Usage: Java Server.java <port number>");
            System.exit(1);
        }

        int portNumber = Integer.parseInt(args[0]);

        try (
            ServerSocket serverSocket = new ServerSocket(portNumber);
            Socket clientSocket = serverSocket.accept();
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        ) {

            String inputLine, outputLine;

            //intiate conversation with client
            Protocol kkp = new Protocol();
            outputLine = kkp.processInput(null);
            out.println(outputLine);

            while ((inputLine = in.readLine()) !=null) {
                outputLine = kkp.processInput(inputLine);
                out.println(outputLine);
                if (outputLine.equals("bye"))
                    break;
            }
        } catch (IOException e) {
            System.out.println("Exception caught when trying to listen to port " + portNumber + " or listening for a connection");
            System.out.println(e.getMessage());
        }

    }

}

下面列出的错误

//the first error
Server.java:27: error: cannot find symbol
                        Protocol kkp = new Protocol();
                        ^
  symbol:   class Protocol
  location: class Server
Server.java:27: error: cannot find symbol
                        Protocol kkp = new Protocol();
                                           ^
  symbol:   class Protocol
  location: class Server
2 errors
error: compilation failed

//the second error
error: class found on application class path: SocketsKnockKnockServer.Server

您的Java文件称为KnockKnockProtocol.java,而您正在创建的对象称为协议。 将KnockKnockProtocol.java重命名为Protocol.java或在Server中创建一个称为Protocol的内部类。 另外,它必须是静态的。

我通过将文件(Client.java,Server.java,Protocol.java)传输到源文件夹而不是将其保存在程序包中来解决此问题。

感谢Jaywalker提出这个想法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM