Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何获取变量形式JTeXtField并在算法J48中使用_Java_Swing_Static_Compiler Errors - Fatal编程技术网

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

Java-如何获取变量形式JTeXtField并在算法J48中使用,java,swing,static,compiler-errors,Java,Swing,Static,Compiler Errors,我想用Java创建一个小应用程序-一个按钮和一个JTextField。此外,我使用从J48算法生成“树”的代码(当我查找WEKA totorial时,我在web中找到代码)。此代码中应使用可变形式的文本字段(实现J48)。我创建了这样的东西,但它不起作用: package visio; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; impo

我想用Java创建一个小应用程序-一个按钮和一个JTextField。此外,我使用从J48算法生成“树”的代码(当我查找WEKA totorial时,我在web中找到代码)。此代码中应使用可变形式的文本字段(实现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”的声明:

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

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


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

请不要建议他使用静态变量,因为这样会破坏OOP合规性,并且实例变量可以正常工作。@HovercraftFullOfEels在他的例子中,使一个变量为静态比使其余代码为“非静态”容易得多“这更容易,但它是错误的,只会强化一个坏习惯。”我来这里是为了回答他的问题,而不是教他编程实践。无论如何,我添加了一个解决方案来保持他的变量实例。@jesuplsplus“我来这里是为了回答他的问题,而不是教他编程实践”,我认为它们是相互包容的目标。你不应该在没有其他方法的情况下尝试一种方法——你需要从静态main方法中获取大部分代码,而应该使用对象、实例变量和非静态方法来解决你的问题。考虑一下java和面向对象编程中的一些入门教程。
static int temp;