ahuxi 2016-10-17 14:02 采纳率: 77.8%
浏览 1111
已采纳

学了一天线程动画的java新丁求助一个问题

我好奇按照网上的教程写了一段java线程动画,但是repaint()这个地方只能执行一次,
请问下高手这是怎么回事呢?从输出结果看,repaint()只运行了一次,但是
PaintThread却每隔40毫秒就执行一次,对照了好几遍,都没发现是哪错了,请高手指点下

 package study;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;

import javax.management.timer.Timer;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JTextField;

public class swing extends JFrame {
    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    swing frame = new swing();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public swing() {//布局
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
    }
    int x = 120;
    int y = 120;
    public void paint(Graphics g){//绘制线图
        Image img = GameUtil.getImage("images/小车.jpg"); 
        g.setColor(Color.BLUE);
        g.fillRect (200, 0, 50, 300);
        g.fillRect (0, 120, 450, 50);
        g.drawImage(img, x, y,null);
        new PaintThread().start();
        x+=3;
        y+=3;
        System.out.println(1);
    }
    }
class PaintThread extends Thread{//PaintThread
    int x = 120;
    int y = 120;
    public void run(){//run
        swing paint = new swing();
        while(true){//while
            try {//try
                paint.repaint();
                System.out.println(2);
                Thread.sleep(40);//40毫秒,相当于每秒25帧
            } catch (InterruptedException e) {//catchtry
                // TODO Auto-generated catch block
                e.printStackTrace();
            }//catch
        }//while
    }//run
}//PaintThread
  • 写回答

1条回答 默认 最新

  • ljheee 2016-10-17 15:18
    关注
    public static void main(String[] args) {
          new PaintThread().start();
    }
    
        main函数,这样写试试。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 matlab计算中误差
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊