Как исправить?Переменная с является доступной изнутри внутреннего класса, должна быть окончательной или эффективной окончательной - PullRequest
0 голосов
/ 11 июня 2018

Я занимаюсь разработкой скрипта Anti-AFK на Java и столкнулся с этой ошибкой.

"Доступ к переменной с внутренним классом должен быть окончательным или окончательным".

Я искал и искал, но все еще не знаю, как исправить.Спасибо за помощь.Вот сценарий.

Еще одна вещь, это мой первый пост на этом сайте, поэтому я прошу прощения, если что-то пропустил.Кроме того, если вы, ребята, хотите действительно помочь мне, потому что я глупый, как бы я заставил ключевой слушатель работать?У него своя ошибка "MKeyListener is never used" Спасибо за все!

package com.plugin.TTT;

import javafx.fxml.FXML;
import javafx.scene.input.KeyCode;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class Main {


    Random random = new Random();

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

        String Switch = "Off";
        boolean test = true;
        boolean On = false;
        JFrame afk = new JFrame("Anti AFK");
        afk.setLayout(new BoxLayout(afk.getContentPane(), BoxLayout.Y_AXIS));
        JLabel text = new JLabel("Anti AFK Program");

        JToggleButton toggleButton = new JToggleButton("On");
        ItemListener itemListener = new ItemListener() {
            public void itemStateChanged(ItemEvent itemEvent) {
                int state = itemEvent.getStateChange();
                if (state == ItemEvent.SELECTED) {
                    Switch = "On";
                    toggleButton.setText("Off");
                    afk.getContentPane().setBackground(Color.GREEN);
                } else {
                    Switch = "Off";
                    afk.getContentPane().setBackground(Color.RED);
                    toggleButton.setText("On");
                }
            }
        };
        toggleButton.addItemListener(itemListener);



        text.setAlignmentX(Component.CENTER_ALIGNMENT);
        text.setAlignmentY(Component.CENTER_ALIGNMENT);
        toggleButton.setAlignmentX(Component.CENTER_ALIGNMENT);
        toggleButton.setAlignmentY(Component.CENTER_ALIGNMENT);

        afk.getContentPane().setBackground(Color.RED);
        afk.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        afk.setSize(500, 500);
        afk.add(text);
        afk.add(toggleButton);
        afk.setVisible(true);




        while (Switch.equals("On")){
        Random diceRoller = new Random();

            int RN = diceRoller.nextInt(4) + 1;
            Thread.sleep(1000);

            System.out.println(RN);


            if (RN == 1) {
                try {

                    Robot robot = new Robot();
                    robot.keyPress(KeyEvent.VK_ESCAPE);
                    robot.keyPress(KeyEvent.VK_ESCAPE);
                    robot.keyPress(KeyEvent.VK_W);


                } catch (AWTException e) {
                    e.printStackTrace();
                }
            }
            if (RN == 2) {
                    try {

                        Robot robot = new Robot();
                        robot.keyPress(KeyEvent.VK_ESCAPE);
                        robot.keyPress(KeyEvent.VK_ESCAPE);
                        robot.keyPress(KeyEvent.VK_A);

                    } catch (AWTException e) {
                        e.printStackTrace();
                    }
                }
             if (RN == 3) {
                        try {

                            Robot robot = new Robot();
                            robot.keyPress(KeyEvent.VK_ESCAPE);
                            robot.keyPress(KeyEvent.VK_ESCAPE);
                            robot.keyPress(KeyEvent.VK_S);

                        } catch (AWTException e) {
                            e.printStackTrace();
                        }
                    }
             if (RN == 4) {
                            try {

                                Robot robot = new Robot();
                                robot.keyPress(KeyEvent.VK_ESCAPE);
                                robot.keyPress(KeyEvent.VK_ESCAPE);
                                robot.keyPress(KeyEvent.VK_D);

                            } catch (AWTException e) {
                                e.printStackTrace();
                            }
                        }

}






    }

class MyKeyListener extends KeyAdapter {
@Override
public void keyPressed(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
System.exit(1);
System.out.println("YOU PRESSED");

}}}}

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Вы можете сделать вашу переменную Switch глобальной, переместив ее на верхний уровень класса, таким образом вы решите проблему.

Переменная, определенная в методе и доступная анонимным внутренним классомдолжен быть окончательным.Это происходит потому, что в анонимных классах у вас нет родительской области видимости, и вы не можете знать, меняет ли она переменную.Делая его окончательным, вы гарантируете, что изменения сделаны только в области внутреннего класса.Делая его глобальным, вы делаете его видимым в целом.

0 голосов
/ 11 июня 2018

Я думаю, компилятор жалуется на JFrame afk.

Вы используете его внутри внутреннего класса, но это не финальная переменная.

Самое простое решение - предоставить его как переменную-конструктор вашего внутреннего класса и использовать там.Таким образом вы избавитесь от ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...