2016-08-13 2 views
1

Mon répertoire de projet ressemble à ceci:Javac "ne peut pas trouver le symbole" Pourquoi?

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; 
    } 
} 

Je compila les Prediction.java -> Predictions.class. Mais Predictions.java jette l'erreur:

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(); 

J'ai utilisé le servlet-api.jar inclus dans de apache-tomcat, si je ne l'utilise, il indique la même erreur pour 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 

Qu'est-ce que je fais mal?

+0

compilez vos classes de prédictions javac 'dossier classes'' \ * de java' avec réglage. servlet-api.jar dans classpath – Sanjeev

+0

C'est du travail: javac -classpath C: \ apache-tomcat-9.0.0.M8 \ lib \ servlet-api.jar des prédictions \ *. java mais, pourquoi ce n'est pas possible un par un? Merci! –

+0

Voir la réponse ajoutée. – Sanjeev

Répondre

0

Compilez vos classes à partir du classes dossier javac predictions\*.java en définissant servlet-api.jar dans le chemin de classe.

Vous pouvez les compiler un par un, même après la mise en classe chemin correct:

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

Hope it helps