Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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 如何访问相同的文本区域变量?_Java_Swing_Jframe - Fatal编程技术网

Java 如何访问相同的文本区域变量?

Java 如何访问相同的文本区域变量?,java,swing,jframe,Java,Swing,Jframe,以下代码的工作原理如下: 用户单击run按钮 程序从指定位置读取文件 程序从中删除内容,包括标记本身 程序将编辑后的文本返回到名为textArea的JTextArea 我试着把它变成一个全局变量,因为它在两个不同的类中。一旦用户单击“运行按钮”,GUI类中初始化的文本区域就会更新 public class GUI{ static JTextArea textArea; public GUI() { JFrame frame = new JFrame()

以下代码的工作原理如下:

  • 用户单击run按钮
  • 程序从指定位置读取文件
  • 程序从
    中删除内容,包括标记本身
  • 程序将编辑后的文本返回到名为
    textArea
    JTextArea
我试着把它变成一个全局变量,因为它在两个不同的类中。一旦用户单击“运行按钮”,GUI类中初始化的文本区域就会更新

public class GUI{
        static JTextArea textArea;
    public GUI() {
        JFrame frame = new JFrame();
        textArea = new JTextArea(5,30);
        JButton runButton = new JButton("Remove JS");
        JButton importButton = new JButton("Import File");
        JPanel panel = new JPanel();
        
        runButton.addActionListener(new runApp());
        runButton.setBounds(100, 100, 100, 80);
        importButton.addActionListener(new importFile());
        importButton.setBounds(100, 100, 80, 60);
        
        panel.setBorder(BorderFactory.createEmptyBorder(300, 300 , 150, 150));
        panel.setLayout(new GridLayout(0, 1));
        panel.add(textArea);
        panel.add(runButton);
        panel.add(importButton);
        
        frame.add(panel, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("JavaScript Extractor");
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new GUI();

    }
}

class runApp implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
        
        RemoveScript run = new RemoveScript();
        

        try {
            File fileObject = new File("C:\\Users\\coker\\Documents\\readJS.txt");
            Scanner reader = new Scanner(fileObject);
            while(reader.hasNextLine()) {
                String output = reader.nextLine();
                textArea.setText(run.removeScript(output));
            }
            reader.close();
        }catch(FileNotFoundException e) {
            System.out.println("An error has occured.");
            e.printStackTrace();
        }
    }
}

3种选择:

  • 使您的侦听器类成为
    GUI
    的内部类,那么它将可以访问其外部类的所有字段(在这种情况下不需要静态)
  • 将这两个类完全分开,并将对文本字段的引用传递给侦听器(例如,通过构造函数参数)
  • 通过
    GUI.textArea

一些信息已从原始帖子中删除,程序正在删除的是javascript脚本标记,它会在没有这些标记的情况下翻转文件内容。这是给出错误“textArea.setText(run.removeScript(output))”的行;“什么是错误和stacktracke?我建议将有问题的行拆分为两个单独的指令,以了解是哪一个导致错误。”textArea无法解决“它让我可以选择创建一个本地变量textArea,但我确信它会创建另一个JTextArea,这不是我想要的。我只是想让它知道,我引用的“textArea”刚刚实现了您所说的内容,并且成功了,谢谢您,Reto。不要使用静态变量。没有必要,这是糟糕的设计,这不是静态变量应该如何使用。