【问题标题】:How to wait one user click in Java? [duplicate]如何在 Java 中等待一个用户点击? [复制]
【发布时间】: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


【解决方案1】:

您的代码中没有调用 getXY ()。

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

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

【讨论】:

    猜你喜欢
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多