java打地鼠小游戏改编成图片从数据库中随机读取


public class PlayMouse extends JFrame implements Runnable {
    public JLabel bgLabel;
    public JLabel[] mouses;
    public JLabel jtf;
    public int score;
    public Random random = new Random();

    public PlayMouse() {
        Cursor myCursor = null;
        try {
            myCursor = Toolkit.getDefaultToolkit().createCustomCursor(
                    ImageIO.read(new File("hand.jpg")),new Point(0,0),"");
        } catch (IOException e) {
            System.out.println(e);
        }
        setCursor(myCursor);

        jtf = new JLabel();
        jtf.setBounds(360,10,235,50);
        jtf.setFont(new Font("",Font.BOLD,25));
        jtf.setForeground(Color.blue);
        jtf.setText("您的得分是:   分");
        add(jtf);

        bgLabel = new JLabel();
        bgLabel.setIcon(new ImageIcon("bgimage.jpg"));
        bgLabel.setBounds(0,0,1000,800);

        setResizable(false);
        setTitle("打地鼠");
        setBounds(300,100,1000,800);

        Connection con=null;
        Statement sql;
        ResultSet rs;
        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        }catch(Exception e){
            System.out.println(e);
        }
        try{
            con = DriverManager.getConnection(
                    "jdbc:sqlserver://127.0.0.1:1435;DatabaseName=caoyao","sa","1227mq");
        }catch(SQLException e){
            System.out.println(e);
        }

        mouses = new JLabel[17];

        for (int i = 0; i < 17; i++) {
            mouses[i] = new JLabel();
            mouses[i].setSize(110,110);
            try{
                sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                        ResultSet.CONCUR_READ_ONLY);
                rs =sql.executeQuery("SELECT * FROM caoyao");
                rs.last();
                int max = rs.getRow();
                int num=(int)(Math.random()*max+1);
                rs.absolute(num);
                String path=rs.getString(3);
                String name=rs.getString(2);
                mouses[i].addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        if(name.equals("清热药"))
                            score++;
                        else
                            score--;
                        jtf.setText("您的得分是:   "+score+"分");
                        repaint();
                    }
                });
                mouses[i].setIcon(new ImageIcon(path));
                mouses[i].setVisible(false);
                add(mouses[i]);
                con.close();
            } catch(SQLException e) {
                System.out.println(e);
            }
        }
        mouses[0].setLocation(120,520);
        mouses[1].setLocation(480,520);
        mouses[2].setLocation(850,520);
        mouses[3].setLocation(50,420);
        mouses[4].setLocation(350,420);
        mouses[5].setLocation(650,420);
        mouses[6].setLocation(900,420);
        mouses[7].setLocation(210,333);
        mouses[8].setLocation(500,333);
        mouses[9].setLocation(750,333);
        mouses[10].setLocation(150,250);
        mouses[11].setLocation(370,250);
        mouses[12].setLocation(625,250);
        mouses[13].setLocation(850,250);
        mouses[14].setLocation(260,150);
        mouses[15].setLocation(480,150);
        mouses[16].setLocation(680,150);
        add(bgLabel);
        setVisible(true);
        new Thread(this).start();
    }

    public static void main(String[] args) {
        PlayMouse game = new PlayMouse();
    }

    public void run() {
        while(true){
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                System.out.println(e);            }
            int pos = random.nextInt(17);
            //mouses[pos].setLocation(random.nextInt(1000),random.nextInt(800));
            if(!mouses[pos].isVisible()){
                mouses[pos].setVisible(true);
                try {
                    Thread.sleep(1200);
                } catch (InterruptedException e) {
                    System.out.println(e);
                }
                if(mouses[pos].isVisible()){
                    mouses[pos].setVisible(false);
                }
            }
        }
    }
}

怎么从数据库中随机获取一个图片显示在随机的坑里啊??当点击的图片不是清热药时,总分减一,是清热药时,总分加一。为什么只显示第一个地鼠洞里的图片啊,请教各位!

可能是因为在循环中每次都关闭了数据库连接,导致后面的图片无法从数据库中获取。解决方法:将关闭数据库连接的代码移到循环外面。

public class PlayMouse extends JFrame implements Runnable {
    public JLabel bgLabel;
    public JLabel[] mouses;
    public JLabel jtf;
    public int score;
    public Random random = new Random();
    public Connection con;

    public PlayMouse() {
        Cursor myCursor = null;
        try {
            myCursor = Toolkit.getDefaultToolkit().createCustomCursor(
                    ImageIO.read(new File("hand.jpg")),new Point(0,0),"");
        } catch (IOException e) {
            System.out.println(e);
        }
        setCursor(myCursor);

        jtf = new JLabel();
        jtf.setBounds(360,10,235,50);
        jtf.setFont(new Font("",Font.BOLD,25));
        jtf.setForeground(Color.blue);
        jtf.setText("您的得分是:   分");
        add(jtf);

        bgLabel = new JLabel();
        bgLabel.setIcon(new ImageIcon("bgimage.jpg"));
        bgLabel.setBounds(0,0,1000,800);

        setResizable(false);
        setTitle("打地鼠");
        setBounds(300,100,1000,800);

        try{
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            con = DriverManager.getConnection(
                    "jdbc:sqlserver://127.0.0.1:1435;DatabaseName=caoyao","sa","1227mq");
        }catch(Exception e){
            System.out.println(e);
        }

        mouses = new JLabel[17];

        for (int i = 0; i < 17; i++) {
            mouses[i] = new JLabel();
            mouses[i].setSize(110,110);
            try{
                Statement sql = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                        ResultSet.CONCUR_READ_ONLY);
                ResultSet rs = sql.executeQuery("SELECT * FROM caoyao");
                rs.last();
                int max = rs.getRow();
                int num=(int)(Math.random()*max+1);
                rs.absolute(num);
                String path=rs.getString(3);
                String name=rs.getString(2);
                mouses[i].addMouseListener(new MouseAdapter() {
                    @Override
                    public void mouseClicked(MouseEvent e) {
                        if(name.equals("清热药"))
                            score++;
                        else
                            score--;
                        jtf.setText("您的得分是:   "+score+"分");
                        repaint();
                    }
                });
                mouses[i].setIcon(new ImageIcon(path));
                mouses[i].setVisible(false);
                add(mouses[i]);
            } catch(SQLException e) {
                System.out.println(e);
            }
        }
        mouses[0].setLocation(120,520);
        mouses[1].setLocation(480,520);
        mouses[2].setLocation(850,520);
        mouses[3].setLocation(50,420);
        mouses[4].setLocation(350,420);
        mouses[5].setLocation(650,420);
        mouses[6].setLocation(900,420);
        mouses[7].setLocation(210,333);
        mouses[8].setLocation(500,333);
        mouses[9].setLocation(750,333);
        mouses[10].setLocation(150,250);
        mouses[11].setLocation(370,250);
        mouses[12].setLocation(625,250);
        mouses[13].setLocation(850,250);
        mouses[14].setLocation(260,150);
        mouses[15].setLocation(480,150);
        mouses[16].setLocation(680,150);
        add(bgLabel);
        setVisible(true);
        new Thread(this).start();
    }

    public static void main(String[] args) {
        PlayMouse game = new PlayMouse();
    }

    public void run() {
        while(true){
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                System.out.println(e);            }
            int pos = random.nextInt(17);
            if(!mouses[pos].isVisible()){
                try{
                    Statement sql = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                            ResultSet.CONCUR_READ_ONLY);
                    ResultSet rs = sql.executeQuery("SELECT * FROM caoyao");
                    rs.last();
                    int max = rs.getRow();
                    int num=(int)(Math.random()*max+1);
                    rs.absolute(num);
                    String path=rs.getString(3);
                    String name=rs.getString(2);
                    mouses[pos].setIcon(new ImageIcon(path));
                    mouses[pos].addMouseListener(new MouseAdapter() {
                        @Override
                        public void mouseClicked(MouseEvent e) {
                            if(name.equals("清热药"))
                                score++;
                            else
                                score--;
                            jtf.setText("您的得分是:   "+score+"分");
                            repaint();
                        }
                    });
                    mouses[pos].setVisible(true);
                    Thread.sleep(1200);
                    mouses[pos].setVisible(false);
                } catch(SQLException | InterruptedException e) {
                    System.out.println(e);
                }
            }
        }
    }
}

在这里插入图片描述