Hỏi cách tạm dừng chương trình trên Applet

Hè này mình đang tiếp cận Java theo cách Top - Down. Nên kiến thức ly thuyết mình chưa vững lắm (Vào năm học ở trường sẽ dạy môn này theo phương pháp Buttom-up nữa thì mình nghĩ sẽ hoàn thiện). Nên trong phần applet mình gặp chút vấn đề.

Mình mô phỏng trò đoán số, tạo 1 số ngẫu nhiên để đoán, rồi xuất hiện hộp thoại nhập số vào, nếu đoán đúng thì thông báo ra rồi dừng, nếu sai thì thông báo số lớn hơn hoặc nhỏ hơn gì đấy. Đoán tối đa 3 lần.
Trong trường hợp đoán sai, mình dừng chương trình 2 giây (Thread.sleep(2000):wink: để người dùng nhìn thấy thông báo được “paint” ra rồi mới nhảy hộp thoại lên lại. Không hiểu vì sao trong 2 giây đó màn hình nó ko “repaint” nhỉ?

import java.applet.Applet;
import java.awt.Graphics;
import java.util.Random;

import javax.swing.JOptionPane;

public class GuessNumber extends Applet {
    // tao so ngau nhien [0-20]
    Random num = new Random();
    int range = 21;
    int randomNum = num.nextInt(range);
    String result;

    public void init() {
        try {
            // Toi da 3 lan doan
            for (int i = 1; i <= 3; i++) {
                // Hop thoai nhap so vao
                String gNum = JOptionPane
                        .showInputDialog("Doan 1 chu so [0-20]: ");
                // Chuyen chuoi vua nhap thanh so
                int guessNumber = Integer.parseInt(gNum);
                // Tra ve ket qua
                result = check(guessNumber, randomNum);
                if (guessNumber == randomNum) {
                    break;
                }
                repaint();
                Thread.sleep(2000);
            }
        } catch (Exception e) {

        }
       
    }

    public void paint(Graphics g) {
        g.drawString(result, 30, 20);
    }

    // Kiem tra so vua nhap va so random co bang nhau khong
    public String check(int a, int b) {
        if (a == b) {
            return "Congratulation!";
        } else {
            return (a > b) ? "Lon hon so ban vua doan"
                    : "Nho hon so ban vua doan";
        }
    }
}
1 Like

Trong code này Đạt đâu thấy paint được gọi đâu nhỉ?

Hàm paint(Graphics) được gọi thông qua hàm repaint() á a.

Em Đặt debug vào trong hàm paint xem thử có có dừng lại tại vị trí đó không?

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?