JAVA - 如何在每次单击鼠标时创建新线程

标签 java multithreading

在 java 中,如何在每次单击鼠标时将球放到面板上?假设我点击面板 3 次,那么面板中应该有 3 个球弹跳。

我有这个代码块:

ball = new Thread() {
    public void run() {
        while (true) { 
            x += speedX;
            y += speedY;
        }
    }
};
ball.start();

repaint();
try {Thread.sleep(100/3);}catch(InterruptedException ex){}

以及画球的方法:

public void paintComponent(Graphics ball) {
  super.paintComponent(ball);
  if(clicks>0){
    ball.setColor(Color.BLUE);
    ball.fillOval((int) (x - rad), (int) (y - rad), (int)(2 * rad), (int)(2 * rad));
  }
}

但是这个线程只在面板中丢了 1 个球。我也确实尝试了一系列线程,但它没有用。

最佳答案

面板的行为必须通过为面板设置 MouseListener 来定义,以启动将创建新球的新线程。

    final JPanel p = new JPanel();
    p.addMouseListener(new MouseListener() {
        @Override
        public void mouseClicked(MouseEvent e) {
            Thread ball = new Thread() {
                public void run() {
                    while (true) {
                        x += speedX;
                        y += speedY;
                    }
                }
            };
            ball.start();

            p.repaint();
        }

        @Override
        public void mousePressed(MouseEvent e) {

        }

        @Override
        public void mouseReleased(MouseEvent e) {

        }

        @Override
        public void mouseEntered(MouseEvent e) {

        }

        @Override
        public void mouseExited(MouseEvent e) {

        }
    });

关于JAVA - 如何在每次单击鼠标时创建新线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33061825/

相关文章:

java - java中使用一个ForEach语句迭代两个相同大小不同值的Vector

java - 绘图时如何防止屏幕闪烁?

python - 在 Python 中的任意时间后中断方法执行

python - PyQt5 线程、信号和槽。连接错误

java - 为什么这个 lambda 函数在错误的类加载器中启动类加载?

java - 使用Resteasy开发的REST服务的@POST方法

c# - 如何启动一个停止的线程

c# - SynchronizationAttribute.SUPPORTED 创建同步内容

c++ - Qt 在第一个窗口关闭时打开另一个窗口

java - 我的 Android Studio 模拟器无法正常工作