Javac“找不到符号”为什么?

时间:2016-08-13 04:19:22

标签: java compiler-errors javac cannot-find-symbol

我的项目目录如下所示:

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

我做错了什么?

1 个答案:

答案 0 :(得分:0)

classes文件夹javac predictions\*.java中编译类,并在类路径中设置servlet-api.jar。

您也可以在设置正确的类路径后逐个编译它们:

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

希望有所帮助