JFuzzyLogic 在 Eclipse IDE 中给出错误,而代码在另一个 IDE 中运行良好
JFuzzyLogic gives error in Eclipse IDE while code working well with another IDE
虽然相同的代码 在 NetBeans 中工作 IDE 它在 eclipse 上给出了这个错误!我在 运行 代码和输入
后收到此错误
Exception in thread "main" java.lang.NoClassDefFoundError:
net/sourceforge/jFuzzyLogic/FIS at
pkt.Resturant.(Resturant.java:17) at
pkt.Program.main(Program.java:15) Caused by:
java.lang.ClassNotFoundException: net.sourceforge.jFuzzyLogic.FIS at
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 2 more
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,1)(6,0);
TERM lezzetli := (4,0)(9,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
此时我所能做的就是指出您未提供的信息,这将告诉我们问题出在哪里。您的项目有源代码,如 class“餐厅”,但它也有依赖项,如 class“net.sourceforge.jFuzzyLogic.FIS”。后者 class 不包含在您的项目中,必须将其指定为依赖项。 Eclipse 项目可以通过多种方式指定依赖项,必须谨慎使用。
我们不知道您是如何指定对 class“net.sourceforge.jFuzzyLogic.FIS”的依赖的,或者即使您有。您可能正在使用 Maven 构建您的项目,这意味着您正在使用“m2e”Eclipse 插件。您也可以使用 Ant,尽管我对此表示怀疑。您也可能根本不使用构建系统,这意味着您必须打算将包含 class 的 jar 文件直接存储在项目的子目录中,并指定对该 jar 的直接依赖。
我们也不知道你 运行 这个项目怎么样。您很可能是直接在 Eclipse 中 运行,但我可能错了。
我明白问题出在哪里了,是FazzyLogic库的添加方式!
我没有将它添加到类路径,而是将它添加到模块路径!
我没有使用 java 和 eclipse IDE.
的经验
虽然相同的代码 在 NetBeans 中工作 IDE 它在 eclipse 上给出了这个错误!我在 运行 代码和输入
后收到此错误Exception in thread "main" java.lang.NoClassDefFoundError: net/sourceforge/jFuzzyLogic/FIS at pkt.Resturant.(Resturant.java:17) at pkt.Program.main(Program.java:15) Caused by: java.lang.ClassNotFoundException: net.sourceforge.jFuzzyLogic.FIS at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 2 more
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,1)(6,0);
TERM lezzetli := (4,0)(9,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
此时我所能做的就是指出您未提供的信息,这将告诉我们问题出在哪里。您的项目有源代码,如 class“餐厅”,但它也有依赖项,如 class“net.sourceforge.jFuzzyLogic.FIS”。后者 class 不包含在您的项目中,必须将其指定为依赖项。 Eclipse 项目可以通过多种方式指定依赖项,必须谨慎使用。
我们不知道您是如何指定对 class“net.sourceforge.jFuzzyLogic.FIS”的依赖的,或者即使您有。您可能正在使用 Maven 构建您的项目,这意味着您正在使用“m2e”Eclipse 插件。您也可以使用 Ant,尽管我对此表示怀疑。您也可能根本不使用构建系统,这意味着您必须打算将包含 class 的 jar 文件直接存储在项目的子目录中,并指定对该 jar 的直接依赖。
我们也不知道你 运行 这个项目怎么样。您很可能是直接在 Eclipse 中 运行,但我可能错了。
我明白问题出在哪里了,是FazzyLogic库的添加方式! 我没有将它添加到类路径,而是将它添加到模块路径! 我没有使用 java 和 eclipse IDE.
的经验