This question already has answers here:
What does a “Cannot find symbol” or “Cannot resolve symbol” error mean?

(15个答案)


4年前关闭。




我的项目目录如下所示:
predictions
--> WEB-INF
    --> classes
        --> predictions
            --> Predictions.java,
                Prediction.java,
                Prediction.class

Prediction.java
package predictions;

import java.io.Serializable;

public class Prediction  implements Serializable {

    private static final long serialVersionUID = 1L;
    private String who;
    private String what;

    public Prediction(){}
    public String getWho() { return who; }
    public void setWho( String who ) { this.who = who; }
    public String getWhat() { return what; }
    public void setWhat( String what ) { this.what = what; }

}

Predictions.java
package predictions;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.beans.XMLEncoder; // simple and effective
import javax.servlet.ServletContext;

public class Predictions {
    private int n = 32;
    private Prediction[ ] predictions;
    private ServletContext sctx;

    public Predictions() { }

    // The ServletContext is required to read the data from
    // a text file packaged inside the WAR file
    public void setServletContext(ServletContext sctx) {
    this.sctx = sctx;
    }
    public ServletContext getServletContext() { return this.sctx; }

    // getPredictions returns an XML representation of
    // the Predictions array
    public void setPredictions(String ps) { } // no-op
    public String getPredictions() {
    // Has the ServletContext been set?
    if (getServletContext() == null)
        return null;

    // Have the data been read already?
    if (predictions == null)
        populate();

    // Convert the Predictions array into an XML document
    return toXML();
    }

    //** utilities
    private void populate() {
    String filename = "/WEB-INF/data/predictions.db";
    InputStream in = sctx.getResourceAsStream(filename);

    // Read the data into the array of Predictions.
    if (in != null) {
        try {
        InputStreamReader isr = new InputStreamReader(in);
        BufferedReader reader = new BufferedReader(isr);

        predictions = new Prediction[n];
        int i = 0;
        String record = null;
        while ((record = reader.readLine()) != null) {
            String[] parts = record.split("!");
            Prediction p = new Prediction();
            p.setWho(parts[0]);
            p.setWhat(parts[1]);

            predictions[i++] = p;
        }
        }
        catch (IOException e) { }
    }
    }

    private String toXML() {
    String xml = null;
    try {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        XMLEncoder encoder = new XMLEncoder(out);
        encoder.writeObject(predictions); // serialize to XML
        encoder.close();
        xml = out.toString(); // stringify
    }
    catch(Exception e) { }
    return xml;
    }
}

我编译了Prediction.java-> Predictions.class。但是Predictions.java抛出错误:
symbol:   class Prediction
  location: class Predictions
Predictions.java:52: error: cannot find symbol
                predictions = new Prediction[n];
                                  ^
  symbol:   class Prediction
  location: class Predictions
Predictions.java:57: error: cannot find symbol
                    Prediction p = new Prediction();

我使用了de apache-tomcat中包含的servlet-api.jar,如果不使用它,则表示javax.servlet出现相同的错误
javac -classpath C:\apache-tomcat-9.0.0.M8\webapps\predictions\WEB-INF\classes\predictions;C:\apache-tomcat-9.0.0.M8\lib\servlet-api.jar Predictions.java

我究竟做错了什么?

最佳答案

通过在类路径中设置servlet-api.jar从classes文件夹javac predictions\*.java编译您的类。

设置正确的类路径后,也可以一一编译它们:

javac predictions\Prediction.java
javac predictions\Predictions.java

希望能帮助到你

10-01 18:22