-1
我正在寫java擴展JPanel進行棋類遊戲。它的主要目標是給函數getXY另外一個類。當調用方法getXY時,它啓動一個新的線程,然後調用wait()。另一個線程向面板添加一個鼠標偵聽器,當用戶單擊面板時,它會計算座標和notify()面板,但會給出一個錯誤。如何在Java中等待一個用戶點擊?
這是類:
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,更短的,可運行的,可編譯的 – mKorbel