gpt4 book ai didi

Java - 如何获取变量形式 JTeXtField 并在算法 J48 中使用

转载 作者:行者123 更新时间:2023-11-30 11:37:49 29 4
gpt4 key购买 nike

我想用 Java 创建一个小应用程序 - 一个按钮和一个 JTextField。此外,我使用从 J48 算法生成“树”的代码(我在寻找 WEKA totorial 时在网上找到代码)。可变形式在此代码中应使用文本字段(实现 J48)。我创建了这样的东西,但它不起作用:

package visio;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;



import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.FileReader;

import javax.swing.JFrame;

import weka.classifiers.trees.J48;
import weka.core.Instances;
import weka.gui.treevisualizer.PlaceNode2;
import weka.gui.treevisualizer.TreeVisualizer;

public class Visio extends JFrame implements ActionListener {

int temp;
JTextField pole;
JButton button = new JButton("bb");

public Visio() {

setSize(400, 400);
setTitle("okno");

setLayout(null);


button.setBounds(50, 50, 100, 20);
add(button);

button.addActionListener(this);

pole = new JTextField("");
pole.setBounds(20, 70, 150, 20);
add(pole);



}

public static void main(String[] args) throws Exception {

Visio okienko = new Visio();
okienko.setDefaultCloseOperation(EXIT_ON_CLOSE);
okienko.setVisible(true);

// train classifier
J48 cls = new J48();

BufferedReader reader;
reader = new BufferedReader(new FileReader("E:/Desktop/weka.arff"));
Instances data = new Instances(reader);
reader.close();




/* Instances data = new Instances(new BufferedReader(new FileReader(args[0])));*/
data.setClassIndex(data.numAttributes() - temp);
cls.buildClassifier(data);

// display classifier
final javax.swing.JFrame jf =
new javax.swing.JFrame("Weka Classifier Tree Visualizer: J48");
jf.setSize(500, 400);
jf.getContentPane().setLayout(new BorderLayout());
TreeVisualizer tv = new TreeVisualizer(null,
cls.graph(),
new PlaceNode2());
jf.getContentPane().add(tv, BorderLayout.CENTER);
jf.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
jf.dispose();
}
});

jf.setVisible(true);
tv.fitToScreen();


}

@Override
public void actionPerformed(ActionEvent e) {


temp = Integer.parseInt(pole.getText());


}
}

帮帮我。我有一个错误:无法从静态上下文中引用非静态变量

最佳答案

这意味着您正在使用“temp”,这是一个在您的静态 main 方法中不是静态的变量。

data.setClassIndex(data.numAttributes() - temp); // you use it here

如果你想修复它,你所要做的就是更改“temp”的变量声明:

static int temp;

但请确保您learn what static means , 能够编写您不理解的代码是没有意义的 ;),还要记住,如果方便的话,最好避免使用静态变量。

另一种选择是将 main 方法中的代码移动到“Visio”的构造函数中。由于“Visio”的构造函数不是静态的,因此您可以访问所有实例变量而不会出错。

这就像将代码从“main”复制粘贴到“Visio”一样简单,只需确保将“okienko.(whatever)”更改为“this.(whatever)”。 (虽然您不必放入“this”关键字,但我还是喜欢在引用继承成员时这样做;它使源代码更加清晰)。

关于Java - 如何获取变量形式 JTeXtField 并在算法 J48 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13898212/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com