Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中等待一次用户单击?_Java_Multithreading_Swing - Fatal编程技术网

如何在Java中等待一次用户单击?

如何在Java中等待一次用户单击?,java,multithreading,swing,Java,Multithreading,Swing,我正在用java编写一个类,它扩展了JPanel,用于国际象棋游戏。它的主要目标是使用函数getXY给另一个类一个点。当调用getXY方法时,它会启动一个新线程,然后调用wait()。另一个线程向面板添加一个鼠标侦听器,当用户单击面板时,它计算坐标并通知()面板,但它给出一个错误 这是一节课: int spacesX; int spacesY; int panelWidth; int panelHeigth; private int x; private int y; pub

我正在用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();
            }    
        });
    }
}
我能做什么?

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

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

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

您遇到了什么错误?您在等待函数之前没有调用
synchronized(this)
,因此您不是所有者。很抱歉,我认为此代码未指定为21。为了获得更好的帮助,您必须提供更多的信息,尽快发布一个简短、可运行、可编译的SSCCE/MCVE