【问题标题】:how to fix the cannot find symbol compiler error如何修复找不到符号编译器错误
【发布时间】:2019-08-19 16:20:30
【问题描述】:

我正在关注如何在 java 中制作客户端/服务器程序的教程(这里是:https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html),我进入了套接字教程的最后一部分,您可以在其中制作服务器告诉的客户端/服务器程序敲敲笑话,客户回应:

服务器:“敲敲!”

客户:“谁在那儿?”

服务器:“德克斯特。”

客户:“德克斯特是谁?”

服务器:“有冬青树枝的德克斯特大厅。”

客户:“呻吟。”

我已经复制了 KnockKnockClient.java、KnockKnockServer.java、KnockKnockProtocol.java 的代码(我将这些文件命名为 Client.java、Server.java、Protocol.java),现在我要做的最后一部分是编译和运行代码。我成功编译了协议和客户端代码,但是当我尝试编译服务器代码时,我得到一个看起来像第一个错误的错误

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

//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

【问题讨论】:

  • 发布完整的错误日志。
  • 最好将它们全部放在同一个目录和包中,以使您保持简单。似乎您将它们放在不同的包中,并且您没有在 Server.java 文件的顶部导入正确的包。

标签: java networking compiler-errors


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我通过将文件(Client.java、Server.java、Protocol.java)传输到源文件夹而不是将它们保存在一个包中来解决了这个问题。

    感谢 Jaywalker 提出这个想法

    【讨论】:

    • Java“包”很好。学习如何使它们工作,并在您的项目中始终如一地使用它们绝对有用。 Java IDE(如 Eclipse 或 IntelliJ)也很好——它们可以简化基于包的项目的构建、运行和调试。
    猜你喜欢
    • 2013-01-03
    • 2014-07-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多