我用java的weka api做了一些分類程式,我使用了weka的默認contact-lens.arff資料集。
我已經完成了代碼,它運行良好,但有一個例外。
import weka.core.Instances;
import weka.classifiers.rules.OneR;
import weka.classifiers.trees.J48;
import weka.classifiers.bayes.NaiveBayes;
/*
~ some codes ~
*/
static OneR or_lens = new OneR();
static J48 tree_lens=new J48();
static NaiveBayes nb_lens = new NaiveBayes();
static OneR or_weather = new OneR();
static J48 tree_weather=new J48();
static NaiveBayes nb_weather = new NaiveBayes();
public static void lens_learning(Instances lens_data) {
try {
or_lens.buildClassifier(lens_data); // occur exception
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
~ some codes ~
*/
java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @4dcbadb4
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at weka.core.WekaPackageClassLoaderManager.injectClasses(WekaPackageClassLoaderManager.java:792)
at weka.core.WekaPackageClassLoaderManager.injectAllClassesInFromStream(WekaPackageClassLoaderManager.java:690)
at weka.core.WekaPackageClassLoaderManager.injectMTJCoreClasses(WekaPackageClassLoaderManager.java:118)
at weka.core.WekaPackageManager.<clinit>(WekaPackageManager.java:255)
at weka.core.ResourceUtils.readProperties(ResourceUtils.java:241)
at weka.core.ResourceUtils.readProperties(ResourceUtils.java:184)
at weka.core.Utils.readProperties(Utils.java:183)
at weka.core.Capabilities.<clinit>(Capabilities.java:104)
at weka.classifiers.AbstractClassifier.getCapabilities(AbstractClassifier.java:509)
at weka.classifiers.rules.OneR.getCapabilities(OneR.java:289)
at weka.classifiers.rules.OneR.buildClassifier(OneR.java:317)
at hw2.Hw2.lens_learning(Hw2.java:25)
at hw2.Hw2.main(Hw2.java:102)
發生此運行時例外后,程式運行順利。
但是,我想隱藏或擺脫這個例外字串。
我用jdk-17.0.1.
為什么
buildClassifier會出現這個例外?如何隱藏此例外字串?
try ... catch ...無法隱藏它們:,(
uj5u.com熱心網友回復:
在撰寫本文時,Weka 的包管理器不適用于 Java 16 或更高版本(由于低級類注入)。請改用 Java 11。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/366164.html
下一篇:如何快速找出導致錯誤的串列?
