Java не понимает Int внутри, если изменилось

Мой код должен отображаться как фон типа игрового автомата, в каждой полосе есть изображения, которые не активированы, и когда вы нажимаете spin, он случайным образом определяет, какие из них становятся видимыми, и если они не должны быть видимыми, они устанавливаются как невидимые. Моя проблема заключается в том, что при нажатии spin изображения не отображаются. Когда я устанавливаю их видимыми как обычно, они появляются. Поэтому я считаю, что это происходит, когда я пытаюсь сделать их видимыми в операторах if/else.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.awt.Dimension;
import javax.swing.ImageIcon;

public class Slots1 extends JFrame implements ActionListener
{
  JPanel panel;
  JButton spin;
  int wheelOne = 0;
  JLabel ImgSlot1;
  JLabel ImgSlot12;
  JLabel ImgSlot13;
  JLabel ImgSlot14;
  JLabel ImgSlot15;
  JLabel ImgSlot16;
  JLabel ImgSlot17;

  public Slots1()
  {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    double width = screenSize.getWidth();
    double height = screenSize.getHeight();
    int wid = (int) width;
    int hgt = (int) height;

    JFrame frame = new JFrame("sesame chicken");
    frame.setSize(wid,hgt);
    frame.setUndecorated(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    panel = new JPanel(null);
    panel.setBackground(Color.GRAY);

    ImageIcon pic = new ImageIcon("Backr.png");
    JLabel layout = new JLabel(pic);
    layout.setLocation(0,0);
    layout.setSize(1366,768);

    ImageIcon Slot1 = new ImageIcon("SLu1.png"); 
    ImageIcon Slot2 = new ImageIcon("SLu2.png"); 
    ImageIcon Slot3 = new ImageIcon("SLu3.png"); 
    ImageIcon Slot4 = new ImageIcon("SLu4.png"); 
    ImageIcon Slot5 = new ImageIcon("SLu5.png"); 
    ImageIcon Slot6 = new ImageIcon("SLu6.png"); 
    ImageIcon Slot7 = new ImageIcon("SLu7.png"); 

    ImgSlot1 = new JLabel(Slot1);
    ImgSlot1.setLocation(75,25);
    ImgSlot1.setSize(150,500);
    JLabel ImgSlot12 = new JLabel(Slot2);
    ImgSlot12.setLocation(75,25);
    ImgSlot12.setSize(150,500);
    JLabel ImgSlot13 = new JLabel(Slot3);
    ImgSlot13.setLocation(75,25);
    ImgSlot13.setSize(150,500);
    JLabel ImgSlot14 = new JLabel(Slot4);
    ImgSlot14.setLocation(75,25);
    ImgSlot14.setSize(150,500);
    JLabel ImgSlot15 = new JLabel(Slot5);
    ImgSlot15.setLocation(75,25);
    ImgSlot15.setSize(150,500);
    JLabel ImgSlot16 = new JLabel(Slot6);
    ImgSlot16.setLocation(75,25);
    ImgSlot16.setSize(150,500);


    JLabel ImgSlot17 = new JLabel(Slot7);
    ImgSlot17.setLocation(75,25);
    ImgSlot17.setSize(150,500);

    ImgSlot1.setVisible(false);
    ImgSlot12.setVisible(false);
    ImgSlot13.setVisible(false);
    ImgSlot14.setVisible(false);
    ImgSlot15.setVisible(false);
    ImgSlot16.setVisible(false);
    ImgSlot17.setVisible(false);

    JButton spin = new JButton("SPIN");
    spin.setSize(100,50);
    spin.setLocation(100, 650);
    spin.setBackground(Color.green);
    spin.setForeground(Color.red);

    panel.add(ImgSlot1);
    panel.add(ImgSlot12);
    panel.add(ImgSlot13);
    panel.add(ImgSlot14);
    panel.add(ImgSlot15);
    panel.add(ImgSlot16);
    panel.add(ImgSlot17);
    panel.add(spin);
    panel.add(layout);
    frame.add(panel);

    frame.setVisible(true);
    panel.setVisible(true);

    spin.addActionListener(this);
  }
  public void actionPerformed(ActionEvent e) 
  {
    Object source = e.getSource();
    if (source == spin){
      Random rand = new Random();
      wheelOne = rand.nextInt(7);
    }

    if (wheelOne == 1){
      ImgSlot1.setVisible(true);}
    else if (wheelOne == 2){
      ImgSlot12.setVisible(true);}
    else if (wheelOne == 3){
      ImgSlot13.setVisible(true);}
    else if ((wheelOne == 4)){
      ImgSlot14.setVisible(true);}
    else if (wheelOne == 5){
      ImgSlot15.setVisible(true);}
    else if (wheelOne == 6){
      ImgSlot16.setVisible(true);}
    else if (wheelOne == 7){
      ImgSlot17.setVisible(true);}

    if (wheelOne != 1){
      ImgSlot1.setVisible(false);}
    if (wheelOne != 2){
      ImgSlot12.setVisible(false);}
    if (wheelOne != 3){
      ImgSlot13.setVisible(false);}
    if (wheelOne != 4){
      ImgSlot14.setVisible(false);}
    if (wheelOne != 5){
      ImgSlot15.setVisible(false);}
    if (wheelOne != 6){
      ImgSlot16.setVisible(false);}
    if (wheelOne != 7){
      ImgSlot17.setVisible(false);}

  }
  public static void main(String[] args)
  {
    Slots1 run = new Slots1();
  }
}

Это код, которым я закончил

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.awt.Dimension;
import javax.swing.ImageIcon;

public class Slots1 extends JFrame implements ActionListener
{
  JPanel panel;
  JButton spin;
  JLabel ImgSlot1;
  JLabel ImgSlot2;
  JLabel ImgSlot3;
  JLabel ImgSlot4;
  JLabel ImgSlot5;
  JLabel ImgSlot6;
  JLabel ImgSlot7;
  int wheelOne = 1;
  public Slots1()
  {
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    double width = screenSize.getWidth();
    double height = screenSize.getHeight();
    int wid = (int) width;
    int hgt = (int) height;

    JFrame frame = new JFrame("sesame chicken");
    frame.setSize(wid,hgt);
    frame.setUndecorated(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    panel = new JPanel(null);
    panel.setBackground(Color.GRAY);

    ImageIcon pic = new ImageIcon("Backr.png");
    JLabel layout = new JLabel(pic);
    layout.setLocation(0,0);
    layout.setSize(1366,768);

    ImageIcon Slot1 = new ImageIcon("SLu1.png"); 
    ImageIcon Slot2 = new ImageIcon("SLu2.png"); 
    ImageIcon Slot3 = new ImageIcon("SLu3.png"); 
    ImageIcon Slot4 = new ImageIcon("SLu4.png"); 
    ImageIcon Slot5 = new ImageIcon("SLu5.png"); 
    ImageIcon Slot6 = new ImageIcon("SLu6.png"); 
    ImageIcon Slot7 = new ImageIcon("SLu7.png"); 

    ImgSlot1 = new JLabel(Slot1);
    ImgSlot1.setLocation(75,25);
    ImgSlot1.setSize(150,500);
    ImgSlot2 = new JLabel(Slot2);
    ImgSlot2.setLocation(75,25);
    ImgSlot2.setSize(150,500);
    ImgSlot3 = new JLabel(Slot3);
    ImgSlot3.setLocation(75,25);
    ImgSlot3.setSize(150,500);
    ImgSlot4 = new JLabel(Slot4);
    ImgSlot4.setLocation(75,25);
    ImgSlot4.setSize(150,500);
    ImgSlot5 = new JLabel(Slot5);
    ImgSlot5.setLocation(75,25);
    ImgSlot5.setSize(150,500);
    ImgSlot6 = new JLabel(Slot6);
    ImgSlot6.setLocation(75,25);
    ImgSlot6.setSize(150,500);
    ImgSlot7 = new JLabel(Slot7);
    ImgSlot7.setLocation(75,25);
    ImgSlot7.setSize(150,500);

    ImgSlot1.setVisible(false);
    ImgSlot2.setVisible(false);
    ImgSlot3.setVisible(false);
    ImgSlot4.setVisible(false);
    ImgSlot5.setVisible(false);
    ImgSlot6.setVisible(false);
    ImgSlot7.setVisible(false);

    spin = new JButton("SPIN");
    spin.setSize(100,50);
    spin.setLocation(100, 650);
    spin.setBackground(Color.green);
    spin.setForeground(Color.red);

    panel.add(ImgSlot1);
    panel.add(ImgSlot2);
    panel.add(ImgSlot3);
    panel.add(ImgSlot4);
    panel.add(ImgSlot5);
    panel.add(ImgSlot6);
    panel.add(ImgSlot7);
    panel.add(spin);
    panel.add(layout);
    frame.add(panel);

    frame.setVisible(true);
    panel.setVisible(true);

    spin.addActionListener(this);
    System.out.println(spin);
  }
  public void actionPerformed(ActionEvent e) 
  {
    Object source = e.getSource();
System.out.println(source);
System.out.println(spin);
System.out.println();
    if (source.equals(spin)){
    Random rand = new Random();
    wheelOne = rand.nextInt(7);}

    if (wheelOne == 0){
      ImgSlot1.setVisible(true);}
    else if (wheelOne != 0){
    ImgSlot1.setVisible(false);}
    if (wheelOne == 1){
    ImgSlot2.setVisible(true);}
    else if (wheelOne != 1){
    ImgSlot2.setVisible(false);}
    if (wheelOne == 2){
    ImgSlot3.setVisible(true);}
    else if (wheelOne != 2){
    ImgSlot3.setVisible(false);}
    if ((wheelOne == 3)){
    ImgSlot4.setVisible(true);}
    else if (wheelOne != 3){
    ImgSlot4.setVisible(false);}
    if (wheelOne == 4){
    ImgSlot5.setVisible(true);}
    else if (wheelOne != 4){
    ImgSlot5.setVisible(false);}
    if (wheelOne == 5){
    ImgSlot6.setVisible(true);}
    else if (wheelOne != 5){
    ImgSlot6.setVisible(false);}
    if (wheelOne == 6){
    ImgSlot7.setVisible(true);}
    else if (wheelOne != 6){
      ImgSlot7.setVisible(false);}

    }

  public static void main(String[] args)
  {
    Slots1 run = new Slots1();
  }
}

2 ответа

Решение

Первая проблема заключается в том, как вы используете класс Random. Если вы создаете его снова и снова, а затем позвоните random.nextInt(7), вы всегда получите одно и то же значение обратно (вероятно, 0).

Вместо этого вам нужно создать его экземпляры в конструкторе и назначить его переменной экземпляра.

Вторая проблема заключается в том, что nextInt(7) не возвращает значение int между 1 и 7, как вы предполагаете, но возвращает значение int между 0 и 6.

Вы забыли инициализировать ImgSlot12 (и другие), поэтому он генерирует исключение:

else if (wheelOne == 2){
        ImgSlot12.setVisible(true);}

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
   at com.company.Slots1.actionPerformed(Slots1.java:132)
   ...
Другие вопросы по тегам