【发布时间】:2014-05-13 11:48:22
【问题描述】:
我正在用 Java 编写一个扩展 JPanel 以用于国际象棋游戏的类。它的主要目标是用函数 getXY 给另一个类一个点。当调用 getXY 方法时,它会启动一个新线程,然后调用 wait()。另一个线程向面板添加一个鼠标侦听器,当用户单击面板时,它会计算面板的坐标和 notify(),但它会给出一个错误。
这是课程:
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();
}
});
}
}
我能做什么?
【问题讨论】:
-
你得到什么错误?
-
您没有在等待函数之前调用
synchronized(this),因此不是所有者。 -
对不起,我认为此代码未指定为 21 日。世纪,您必须提供比这更多的信息,以获得更好的帮助,尽快发布 SSCCE/MCVE,简短、可运行、可编译
标签: java multithreading swing