簡體   English   中英

需要幫助調試,代碼可以編譯但無法運行

[英]Need help debugging, code compiles but won't run

嘿,我可以使用幫助調試該程序。 該代碼不是我的代碼,它是從問題的答案而來的,我想嘗試一下,但是得到了NullPointerException,無法弄清楚問題出在哪里。 我認為問題可能出在圖像路徑上,但是我不確定是否可以使用幫助。

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

public class CircleImages {

private int score = 0;
private JTextField scoreField = new JTextField(10);

public CircleImages() {
    scoreField.setEditable(false);

    final ImageIcon[] icons = createImageIcons();
    final JPanel iconPanel = createPanel(icons, 8);

    JPanel bottomLeftPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
    bottomLeftPanel.add(new JLabel("Score: "));
    bottomLeftPanel.add(scoreField);

    JPanel bottomRightPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING));
    JButton newGame = new JButton("New Game");
    bottomRightPanel.add(newGame);
    JButton quit = new JButton("Quit");
    bottomRightPanel.add(quit);

    JPanel bottomPanel = new JPanel(new GridLayout(1, 2));
    bottomPanel.add(bottomLeftPanel);
    bottomPanel.add(bottomRightPanel);

    newGame.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            reset(iconPanel, icons);
            score = 0;
            scoreField.setText(String.valueOf(score));
        }
    });

    JFrame frame = new JFrame();
    frame.add(iconPanel);
    frame.add(bottomPanel, BorderLayout.PAGE_END);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
}

private void reset(JPanel panel, ImageIcon[] icons) {
    Component[] comps = panel.getComponents();
    Random random = new Random();
    for(Component c : comps) {
        if (c instanceof JLabel) {
            JLabel button = (JLabel)c;
            int index = random.nextInt(icons.length);
            button.setIcon(icons[index]);
        }
    }
}

private JPanel createPanel(ImageIcon[] icons, int gridSize) {
    Random random = new Random();
    JPanel panel = new JPanel(new GridLayout(gridSize, gridSize));
    for (int i = 0; i < gridSize * gridSize; i++) {
        int index = random.nextInt(icons.length);
        JLabel label = new JLabel(icons[index]);
        label.addMouseListener(new MouseAdapter(){
            public void mouseClicked(MouseEvent e) {
                score += 1;
                scoreField.setText(String.valueOf(score));
            }
        });
        label.setBorder(new LineBorder(Color.GRAY, 2));
        panel.add(label);
    }
    return panel;
}

private ImageIcon[] createImageIcons() {
    String[] files = {"DarkGrayButton.png",
        "BlueButton.png",
        "GreenButton.png",
        "LightGrayButton.png",
        "OrangeButton.png",
        "RedButton.png",
        "YellowButton.png"
    };
    ImageIcon[] icons = new ImageIcon[files.length];
    for (int i = 0; i < files.length; i++) {
        icons[i] = new ImageIcon(getClass().getResource("/circleimages/" + files[i]));
    }
    return icons;
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new CircleImages();
        }
    });
}

}

您的問題在這里:

icons[i] = new ImageIcon(getClass().getResource("/circleimages/" + files[i]));

您的項目中沒有所需的圖像,因此getClass().getResource()將返回null並且ImageIcon的構造函數中將出現NullPointerException

您需要做的是將以下文件放入您的項目中:

  • /circleimages/DarkGrayButton.png
  • /circleimages/BlueButton.png
  • /circleimages/GreenButton.png
  • /circleimages/LightGrayButton.png
  • /circleimages/OrangeButton.png
  • /circleimages/RedButton.png
  • /circleimages/YellowButton.png

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM