我必須製作2個面板,一個帶有停止和啓動按鈕,另一個顯示簡筆畫。當你按下開始它移動,停止它停止。當我按下開始時,我得到這個錯誤信息:線程「AWT-EventQueue-0」中的異常java.lang.NullPointerException at Stick.actionPerformed(Stick.java:64)試圖讓一個簡筆畫在屏幕上移動,得到錯誤信息
指向此行:myBanner。 startAnimation();
因此,Banner類的startAnimation函數顯然有些問題,但我不確定。任何想法如何讓這個東西運行?
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.BoxLayout;
public class Stick extends JFrame implements ActionListener{
public static final int FRAME_WIDTH = 500;
private static final int FRAME_HEIGHT = 500;
private static final int FRAME_X_ORIGIN = 150;
private static final int FRAME_Y_ORIGIN = 200;
JButton stop, go;
Graphics g;
MovingBanner myBanner;
Thread thrd;
public static void main(String[] args){
Stick frame = new Stick();
frame.setVisible(true);
}
public Stick(){
Container contentPane;
contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(FRAME_WIDTH,FRAME_HEIGHT);
setVisible(true);
g = contentPane.getGraphics();
JPanel panel1, panel2;
panel1 = new JPanel(new FlowLayout());
panel2 = new JPanel(new FlowLayout());
contentPane.add(panel1);
contentPane.add(panel2);
stop = new JButton("STOP");
go = new JButton("GO");
stop.addActionListener(this);
go.addActionListener(this);
panel1.add(go);
panel1.add(stop);
}
public void actionPerformed(ActionEvent event){
if (event.getSource() instanceof JButton){
JButton clickedButton = (JButton) event.getSource();
if(clickedButton == go){
myBanner.startAnimation();
thrd = new Thread (myBanner);
thrd.start();
}
if(clickedButton == stop){
myBanner.stopAnimation();
thrd = null;
}
}
}
}
class MovingBanner extends JPanel implements Runnable{
private int x;
public static final int FRAME_WIDTH = 500;
private static final int FRAME_HEIGHT = 500;
private static final int FRAME_X_ORIGIN = 150;
private static final int FRAME_Y_ORIGIN = 200;
int bodyX = 250;
int bodyY1 = 160;
int bodyY2 = 210;
int armHeight = 190;
int armLength = bodyX + 30;
int armLength1 = bodyX - 30;
int legY = 110;
private Boolean animate;
public MovingBanner(){
x = 2;
animate = true;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawLine(bodyX + x, bodyY1, bodyX + x, bodyY2); //body
g.drawOval(bodyX + x, bodyY2, 40, 40); //head
g.drawLine(armLength + x,armHeight, armLength1 + x, armHeight); //arms
g.drawLine(bodyX + x, bodyY1, bodyX + 20 + x,legY); //leg
g.drawLine(bodyX + x, bodyY1, bodyX - 20 + x, legY); //leg
}
public void run(){
while (animate){
changeX();
repaint();
try {Thread.sleep(100); } catch(Exception e){};
}
}
public void changeX() {
if (x <= FRAME_WIDTH)
x++;
else x = 2;
}
public void stopAnimation() {
animate = false;
}
public void startAnimation() {
animate = true;
}
}
你能發佈完整的錯誤信息嗎? – CodeGuy
異常在線程 「AWT-EventQueue的-0」 顯示java.lang.NullPointerException \t在Stick.actionPerformed(Stick.java:64) \t在javax.swing.AbstractButton.fireActionPerformed(未知來源) \t在javax.swing中。 AbstractButton的$ Handler.actionPerformed(來源不明) \t在javax.swing.DefaultButtonModel.fireActionPerformed(來源不明) \t在javax.swing.DefaultButtonModel.setPressed(來源不明) \t在javax.swing.plaf.basic.BasicButtonListener。 mouseReleased(未知來源) –
太久無法發佈,但它只是繼續與未知的來源 –