私は Java でプログラミングしており、それぞれ独自のクラスの拡張である 2 つの JPanel を切り替えるためにカード所有者を使用しようとしています。基本的な概念は理解していると思いますが、現在のリビジョンでクラスを呼び出すときにエラーが発生しています。ヌル ポインター例外が発生しました。これは構造上の問題だと思いますが、その方法や理由がわかりません。
メイン メソッドはこのクラスを指します
public class Skeleton implements ActionListener{
JPanel cardHolder;
CardLayout cards;
String cardA = "A";
String cardB = "B";
JPanel Jboard;
JPanel Jmenu;
JFrame frame2;
Board board;
Menu menu;
boolean menuSet;
boolean boardSet;
Timer timer;
public class Switcher implements ActionListener{
String card;
Switcher(String card){
this.card = card;
}
@Override
public void actionPerformed(ActionEvent e) {
cards.show(cardHolder, card);
}
}
public Skeleton(JFrame frame){
JPanel menu = new Menu();
JPanel board = new Board();
JFrame frame2 = frame;
timer = new Timer(5, this);
timer.start();
cardHolder = new JPanel();
cards = new CardLayout();
cardHolder.setLayout(cards);
cardHolder.add(menu, cardA);
cardHolder.add(board, cardB);
frame2.add(cardHolder);
frame2.revalidate();
frame2.setVisible(true);
}
public JFrame getSkeleton(){
return frame2;
}
public JPanel getCardHolder(){
return cardHolder;
}
public void checkStatus(){
if (menuSet == true){
new Switcher(cardB);
boardSet = false;
}
if (boardSet == true){
new Switcher(cardA);
menuSet = false;
}
}
@Override
public void actionPerformed(ActionEvent e) {
menuSet = menu.getMenuset();
boardSet = board.getBoardset();
checkStatus();
}
}
これは、切り替えようとしている JPanel の 1 つであるボード クラスです。
public class Board extends JPanel{
boolean boardset;
Menu menu = new Menu();
public Board(){
setBackground(Color.WHITE);
}
public JPanel getPanel(){
return this;
}
public void setBoardset(boolean x){
boardset = x;
}
public boolean getBoardset(){
return boardset;
}
}
これは別の JPanel クラスで、別の JPanel クラスに切り替えるためのボタンが含まれています。これは、使用された元の開始 JPanel でもあります。
public class Menu extends JPanel implements ActionListener{
boolean menuset;
public Menu(){
setBackground(Color.BLACK);
JButton button = new JButton("hello");
button.addActionListener(this);
this.add(button);
}
public JPanel getPanel(){
return this;
}
@Override
public void actionPerformed(ActionEvent e) {
menuset = true;
}
public void setMenuset(boolean x){
menuset = x;
}
public boolean getMenuset(){
return menuset;
}
}
私が言ったように、ヌルポインタ例外が発生しています。Skeleton() クラスのこの行で発生しています
menuSet = menu.getMenuset();
上記の行は、上記の actionPerformed イベント (タイマーから) の直後にあり、タイマーを少しテストしました。このヌルポインター例外が発生します。
アドバイスをいただければ幸いです。私がこれをやっている方法は少し複雑かもしれないと思います。これを行うためのより良い方法に関する提案があれば、それも役に立ちます。私の主な目標は、カード所有者を含む 1 つのメイン クラスから 2 つの別個のクラスを呼び出せるようにすることです。そうすれば、コードを分離して、すべてを分離して整理することができます。