JFuzzyLogic在Eclipse IDE中提供错误,同时代码可与另一个IDE很好地配合

问题描述

相同的代码在NetBeans IDE中工作时,它会在eclipse上给出此错误!运行代码并提供输入后出现此错误

线程“主”中的异常java.lang.NoClassDefFoundError: net / sourceforge / jFuzzyLogic / FIS位于 pkt.Resturant。(Resturant.java:17)在 pkt.Program.main(Program.java:15)由以下原因引起: java.lang.classNotFoundException:net.sourceforge.jFuzzyLogic.FIS位于 java.base / jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) 在 java.base / jdk.internal.loader.ClassLoaders $ AppClassLoader.loadClass(ClassLoaders.java:178) 在java.base / java.lang.classLoader.loadClass(ClassLoader.java:521) ...还有2个

Resturant.java 文件

package pkt;

import java.io.File;
import java.net.URISyntaxException;

import net.sourceforge.jFuzzyLogic.FIS;

public class Resturant {
    private FIS fis;
    private double servis;
    private double yemek;

    public Resturant(double servis,double yemek) throws URISyntaxException {
        this.servis = servis;
        this.yemek = yemek;
        File dosya = new File(getClass().getResource("Model.fcl").toURI());
        fis = FIS.load(dosya.getPath(),true);
        fis.setvariable("servis",servis);
        fis.setvariable("yemek",yemek);
        fis.evaluate();
    }

    public Resturant() throws URISyntaxException {
        File dosya = new File(getClass().getResource("Model.fcl").toURI());
        fis = FIS.load(dosya.getPath(),true);
    }

    public FIS getModel() {
        return fis;
    }

    @Override
    public String toString() {
        String cikti = "servis: " + servis + "\nYemek: " + yemek + "\nTur: " + fis.getvariable("tur").getValue();
        return cikti;
    }
}

Program.java 文件

package pkt;

import java.net.URISyntaxException;
import java.util.Scanner;
import net.sourceforge.jFuzzyLogic.plot.JFuzzyChart;

public class Program {
    public static void main(String[] args) {
        Scanner in = new Scanner(system.in);
                System.out.print("Servis (0-9): ");
        double servis = in.nextDouble();
        System.out.print("Yemek (0-9): ");
        double yemek = in.nextDouble();
        try {
            Resturant r = new Resturant(servis,yemek);
                        System.out.print(r);
        } catch(URISyntaxException e) {
            e.printstacktrace();
        }
    }
}

和JFuzzyLogic文件Model.fcl

FUNCTION_BLOCK model

VAR_INPUT
    servis : REAL;
    yemek : REAL;
END_VAR

VAR_OUTPUT
    tur : REAL;
END_VAR

FUZZIFY servis
    TERM kotu := (0,1)(4,0);
    TERM iyi := (1,0)(4,1)(6,1)(9,0);
    TERM mukemmel := (6,0)(9,1);
END_FUZZIFY

FUZZIFY yemek
    TERM kotu := (0,1)(3,0);
    TERM lezzetli := (4,1);
END_FUZZIFY

DEFUZZIFY tur
    TERM ucuz := (0,1)(20,1)(50,0);
    TERM orta := (40,0)(60,1)(80,0);
    TERM iyi := (70,0)(85,1)(100,0);
    METHOD : COG;
    DEFAULT := 0;
END_DEFUZZIFY

RULEBLOCK kuralblock1
    AND : MIN;
    ACT : MIN;
    ACCU : MAX;
    
    RULE 1 : IF servis IS kotu OR yemek IS kotu THEN tur IS ucuz;
    RULE 2 : IF servis IS iyi THEN tur IS orta;
    RULE 3 : IF servis IS mukemmel AND yemek IS lezzetli THEN tur IS iyi;
    
END_RULEBLOCK

END_FUNCTION_BLOCK

解决方法

这时我所能做的就是指出您尚未提供的信息,这将告诉我们问题出在哪里。您的项目具有源代码,例如“ Restaurant”类,但也具有依赖项,例如“ net.sourceforge.jFuzzyLogic.FIS”类。后一个类不包含在您的项目中,必须将其指定为依赖项。 Eclipse项目可以使用多种方式指定依赖项,并且必须谨慎进行。

我们不知道您如何指定对该类“ net.sourceforge.jFuzzyLogic.FIS”的依赖,甚至根本不知道。您可能正在使用Maven构建项目,这意味着您正在使用“ m2e” Eclipse插件。您也可以使用Ant,尽管我对此表示怀疑。您也可能根本不使用任何构建系统,这意味着您必须打算将包含该类的jar文件直接存储在项目的子目录中,并指定对该jar的直接依赖项。

我们也不知道您如何运行项目。您最有可能直接在Eclipse中运行它,但是我可能错了。

,

我弄清楚了问题所在,这就是添加FazzyLogic库的方式! 我没有将其添加到Classpath中,而是将其添加到Modulepath中! 我没有使用Java和Eclipse IDE的经验。