如何在Java中等待一次用户单击?
我正在用java编写一个类,它扩展了JPanel,用于国际象棋游戏。它的主要目标是使用函数getXY给另一个类一个点。当调用getXY方法时,它会启动一个新线程,然后调用wait()。另一个线程向面板添加一个鼠标侦听器,当用户单击面板时,它计算坐标并通知()面板,但它给出一个错误 这是一节课:如何在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
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