2017-06-24 1 views
0

J'ai une méthode dans laquelle je crée un fichier arff et si je l'exécute (avec le code dans les méthodes principales) fonctionne comme prévu. Lorsque j'essaie de placer le code dans une autre méthode, puis d'appeler la méthode d'une autre classe (dans mon cas, à partir d'une classe de servlet), j'obtiens l'erreur ci-dessus lorsque le constructeur est appelé. Mon jargon wekka est 3.8.1 et la classe FastVector est déprimée. Toute idée comment puis-je résoudre ceci? Voici le code:java.lang.ClassNotFoundException: weka.core.FastVector

public void createTestData(int id_student, String teacher_subject, int id_level, boolean isMand) 
     throws IOException { 
    FastVector attribute, attributeVals; 
    Instances data; 
    Instances dataRel; 
    double[] vals; 

    String isMandatory = "" + isMand; 
    int level = 10; 

    String teacher = teacher_subject.split("-")[1]; 
    String subject = teacher_subject.split("-")[0]; 

    // 1. set up attributes 
    attribute = new FastVector(); 
    attribute.addElement(new Attribute("id_student")); 

    // - string 
    attribute.addElement(new Attribute("subject", (FastVector) null)); 
    attribute.addElement(new Attribute("teacher", (FastVector) null)); 

    // - numeric 
    attribute.addElement(new Attribute("level")); 
    // - nominal 
    attributeVals = new FastVector(); 
    attributeVals.addElement("true"); 
    attributeVals.addElement("false"); 
    attribute.addElement(new Attribute("isMandatory", attributeVals)); 
    // attribute.addElement(new Attribute("rezult")); 

    // 2. create Instances object 
    data = new Instances("MyRelation", attribute, 0); 

    // 3. fill with data 
    // first instance 
    vals = new double[data.numAttributes()]; 
    // - numeric 
    vals[0] = id_student; 
    // - nominal 
    vals[1] = data.attribute(1).addStringValue(subject); 
    // - string 
    vals[2] = data.attribute(2).addStringValue(teacher); 
    // - date 
    vals[3] = level; 
    vals[4] = attributeVals.indexOf(isMandatory); 
    // vals[5] = 10; 
    // add 
    data.add(new DenseInstance(1.0, vals)); 
    // 4. output data 
    System.out.println(data); 

    ArffSaver arffSaverInstance = new ArffSaver(); 
    arffSaverInstance.setInstances(data); 
    arffSaverInstance.setFile(new File("test.arff")); 
    arffSaverInstance.writeBatch(); 
} 

Dans la classe servlet:

DataForTrain testData = new DataForTrain(); 
    try { 
     testData.createTestData(id_student, teacher_subject, id_level, isMandatory); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
+0

Le fichier jar avec cette classe est-il disponible sur le serveur sur lequel vous exécutez le logiciel? –

Répondre

0

La solution était de trouver l'Assemblée de déploiement Web sur serch Propriétés (clic droit sur le projet => Propriétés) => add => Archives du système de fichiers et ajouter le pot weka là.