Ошибка при вызове метода get в JFames

Я делаю игру типа блэк-джек, и хотел передать сумму ставки из действительного кадра блэкджека в другой кадр, который появляется, когда вы выигрываете / проигрываете, говоря о выигранной / проигранной сумме. Мой код:

public int getBet() {
    return (bet1);
}
public int getMoney() {
    return (money1);
}

(весь этот код выше находится в публичном классе, а не в публичном методе).

Когда я пытаюсь использовать любой из этих операторов get из другого фрейма (всплывающего окна) с кодом

public class LoseFrame extends JFrame {
    JLabel Lost;
    int bet;
    public LoseFrame(){
        super("LoseFrame");
        JFrame LoseFrame = new JFrame("");
        JPanel panel = new JPanel();
        panel.setBackground(Color.LIGHT_GRAY);
        Lost = new JLabel("Sorry, you busted and lost $" + blackJackFrame.getBet());
        panel.add(Lost);
        LoseFrame.setBounds (300, 300, 400, 70);
        LoseFrame.setContentPane (panel);
        LoseFrame.setVisible (true);
    }  
}

Это дает мне ошибку:

C:\LoseFrame.java:27: error: non-static method getBet() cannot be referenced from a static context
    Lost = new JLabel("Sorry, you busted and lost $" + blackJackFrame.getBet());

Спасибо всем, кто помог, если потребуется дополнительная информация, которую я могу опубликовать, застрявшая на некоторое время, это, вероятно, простая ошибка. Спасибо РЕДАКТИРОВАТЬ: Вот начало блэкджекфрейма, его более 2500 строк кода, не знаю, хотите ли вы, чтобы я его опубликовал, но методы get находятся в публичном классе... избавились от некоторых вещей, чтобы сделать его более читабельным

public class blackJackFrame extends JFrame implements ActionListener{
    JLabel bet,money,card1,card2,card3,card4,card5,handscore;
    JButton hit,deal,stand;
    JRadioButton b10,b50,b100,b250,b500,b1000;
    int bet1=1,money1=1000;     

    boolean gameinprogress = false,playerbust = false,dealerbust = false;
public blackJackFrame() {

РЕДАКТИРОВАТЬ #2: blackjackFrame запускается с главной страницы с помощью кнопки. Инициируется с помощью кода:

public class PlayFrame extends JFrame implements ActionListener {
JButton slots,blackJack;
public PlayFrame(){
    super("PlayFrame");
    JFrame PlayFrame = new JFrame("Chrisino Lobby");
    JPanel panel = new JPanel();

    PlayFrame.setBounds (300, 300, 250, 100);

    slots = new JButton("Slots");
    blackJack = new JButton("BlackJack");


    slots.addActionListener(this);
    blackJack.addActionListener(this);


    panel.add(slots);
    panel.add(blackJack);


    PlayFrame.setContentPane(panel);
    PlayFrame.setVisible(true);
}

 public void actionPerformed(ActionEvent e) {

    JButton c = (JButton)e.getSource();
    if (c.equals(slots)){
        new SlotsFrame ();
    }
    else if (c.equals(blackJack)){
        new blackJackFrame ();
    }

 }

}

1 ответ

Вы пытаетесь получить доступ getBet() как если бы это был статический метод, использующий имя класса 'blackJackFrame'. Вы должны решить, является ли ваш экземпляр blackJackFrame это синглтон. В случае, если это синглтон (вы используете его только один раз за исполнение), вы можете установить getBet() метод, чтобы быть статическим, а также установить ваш текстовый компонент, чтобы быть статическим.

Однако правильнее было бы добавить ссылку на ваш blackJackFrame в конструкторе LoseFrameи использовать это.

public class LoseFrame extends JFrame {
    JLabel Lost;
    int bet;
    public LoseFrame(blackJackFrame bJFrame){
        super("LoseFrame");
        ...
        Lost = new JLabel("Sorry, you busted and lost $" + bJFrame.getBet());
        ...
    }  
}

Где вы создаете LoseFrame:

если изнутри blackJackFrame:

LoseFrame loseFrame = new LoseFrame(this);

если откуда-то еще доступна ссылка на объект blackJackFrame:

 blackJackFrame framename = ...;
 LoseFrame loseFrame = new LoseFrame(framename);
Другие вопросы по тегам