有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

多线程如何在Java中等待一次用户点击?

我正在用java编写一个类,它扩展了JPanel,用于国际象棋游戏。它的主要目标是使用函数getXY给另一个类一个点。当调用getXY方法时,它会启动一个新线程,然后调用wait()。另一个线程向面板添加一个鼠标侦听器,当用户单击面板时,它计算坐标并通知()面板,但它给出一个错误

这是一节课:

int spacesX;
int spacesY;
int panelWidth;
int panelHeigth;

    private int x;
    private int y;

public PannelloInputGriglia(int x, int y,int heigth,ChessModel model)
{
    this.setBounds(x, y, (heigth/model.getHeight()*model.getWidth()), heigth);
    spacesX = model.getWidth();
    spacesY = model.getHeight();
    panelWidth = this.getWidth();
    panelHeigth = this.getHeight();
    }

    public void setX(int x)
    {
        this.x = x;
    }

    public void setY(int y)
    {
        this.y = y;
    }

    public Point getXY()
    {
        InputThread th = new InputThread(this);
        try {
            this.wait();
        } catch (InterruptedException ex) {
            Logger.getLogger(PannelloInputGriglia.class.getName()).log(Level.SEVERE, null, ex);
        }
         return new Point(x, y);
    }

    private class InputThread extends Thread
    {
        PannelloInputGriglia pannello;
        public InputThread(PannelloInputGriglia p)
        {
            pannello = p;
            start();
        }

    @Override
    public void run() {
        pannello.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
        int sectorsX = panelWidth/spacesX;
        int sectorsY = panelHeigth/spacesY;
                setX(e.getX() / sectorsX);
                setY(e.getY() / sectorsY);
                super.mouseClicked(e);
                pannello.notify();
            }    
        });
    }
}

我能做什么


共 (1) 个答案

  1. # 1 楼答案

    代码中没有对getXY()的调用

    但从你发布的代码来看,我认为你应该:

    • 阅读一些关于Threads/Runnable(Jenkov tutorial)的文档。考虑一下在InputThread构造函数中调用start()方法的影响
    • 阅读Swing GUI如何处理线程(Swing multithreading