咕哒夫 2017-05-23 10:26 采纳率: 100%
浏览 1036
已采纳

这段几十行的JAVA作业小程序有俩BUG。。跪求解答。。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
public class Task1 extends JFrame implements ActionListener {
    private JLabel word;
    private JLabel[] animal;
    private JButton checkbutton;
    private JPanel jp1, jp2,jp3,jp4;
    private JTextField ans;
    private String answer;
    private String coranswer;
    public Task1() {   
    word=new JLabel("How many animals have come to the party?");
    animal=new JLabel[10];
    jp1 = new JPanel();
    jp2 = new JPanel();
    jp3 = new JPanel();
    jp4 = new JPanel();
    ans = new JTextField(2);
    jp1.setLayout(new GridLayout(0,5));
    jp2.setLayout(new BorderLayout());
    jp3.setLayout(new FlowLayout());
    jp4.setLayout(new FlowLayout());
    this.setTitle("Welcome to the Jungle Party!");
    checkbutton=new JButton("Check!");
    jp4.add(checkbutton);
    jp3.add(word);
    jp3.add(ans);
    jp2.add(BorderLayout.CENTER,jp3);
    jp2.add(BorderLayout.SOUTH,jp4);
    jp2.add(BorderLayout.NORTH,jp1);
    this.makepic1();
    this.getContentPane().add(jp2);
    checkbutton.addActionListener(this);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocation(100,100);
    this.setSize(1920,1080);
    this.setVisible(true);

    }
    public void actionPerformed(ActionEvent event){
        answer = ans.getText().trim();
        while(!answer.equals("null")) 
        {
            if (answer.equals(coranswer)){
                word.setText("Correct!How many animals are in the party now?");
                this.makepic2();
                return;
            }
            else{word.setText("Wrong!Try again!");}
            return;}
          }
    private void makepic1(){
        for(int i=0;i<10;i++){
            int j=i+1;
            animal[i]=new JLabel(new ImageIcon(getClass().getResource("animal"+j+".png")));
            jp1.add(animal[i]);
            coranswer="10";
        }
    }
    private void makepic2(){
        jp1.removeAll();
        double t =Math.floor(Math.random()*9 + 1);
        int k= (int) t;
        coranswer= String.valueOf(k) ;
        for(int i = 0;i<k;i++)
        { int j = i + 1;
        animal[i]=new JLabel(new ImageIcon(getClass().getResource("animal"+j+".png")));
        jp1.add(animal[i]);
    }
    }


} 

这段程序就是一开始显示10张图,在文本框里输入正确的数字(一开始固定是10)的话就会显示正确,然后随机再显示1-10个图片,错误的话就会告诉你错误让你重新输入,像这样无限循环。
现在有两个BUG
如果前后两次图片数正好随机成相等的话,不管输入多少都会显示错误(看起来是这种感觉)。
如果在前一次输入正确的情况下,再次输入正确的话,图片文字都不会换,必须再按一下CHECK,文字显示错误了,图片同时会换(也就是说,必须是文字显示WRONG的情况下,输入正确的结果才能正常运行,如果是文字显示correct的情况下再次正确了,图片不换,必须先wrong了才行。)
程序里用的十张图我发到网盘把。。http://pan.bai du.com/s/1o8UFIw6
用Eclipse多运行几次就知道这俩BUG是什么意思了。。
图片说明
图片说明
图片说明

  • 写回答

1条回答

  • 奔腾的野马 2017-05-23 13:26
    关注

    你说的这个问题是图片加载延迟造成的,
    如果在前一次输入正确的情况下,再次输入正确的话,图片文字都不会换
    这时你试着最小化窗口然后再最大化窗口就能发现其实图片已经发生变化了,只是没有及时显示出来。
    解决的办法:使用双缓冲技术。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况