我将代码更改为更为详细的版本,以便您可以更好地了解我的问题。

我需要“观察”一个整数值,并在其变化时立即做出响应。到目前为止,我发现的最好方法是在无限循环中使用线程。

以下是我的项目中大大简化的部分。总而言之,通过在我的Bubble类中单击一个按钮,可以将notificationValue设置为1。我需要该applet能够监视此notificationValue并在其更改时做出响应。

这是我的小程序:

public class MyApplet extends JApplet
{
    Bubble myBubble = new Bubble();
    public void run()
    {
        new Thread(
        new Runnable() {
            public void run() {
                while(true) {
                    if(myBubble.getNotificationValue() == 1) {
                        /* here I would respond to when the
                        notification is of type 1 */
                        myBubble.resetNotificationValue;
                    }
                    else if(myBubble.getNotificationValue() == 2) {
                        /* here I would respond to when the
                        notification is of type 2 */
                        myBubble.resetNotificationValue;
                    }
                    else if(myBubble.getNotificationValue() != 2) {
                        /* if it is any other number other
                        than 0 */
                        myBubble.resetNotificationValue;
                    }

                    // don't do anything if it is 0
                }
            }
        }).start();
    }
}


这是我的课:

public class Bubble extends JPanel
{
    public JButton bubbleButton;

    public int notificationValue = 0;

    public int getNotificationValue()
    {
        return notificationValue;
    }
    public void resetNotificationValue()
    {
        notificationValue = 0;
    }

    protected void bubbleButtonClicked(int buttonIndex)
    {
        notificationValue = buttonIndex;
    }

    public Bubble()
    {
        bubbleButton = new JButton();
        bubbleButton.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event)
            {
                bubbleButtonClicked(1);
            }
        });
    }
}


但是显然,这会使CPU保持100%的运行速度,并且根本没有效率。有什么更好的方法可以做到这一点? (假设我无法更改负责更改整数的任何方法。)

最佳答案

更改时立即响应


这到底需要多“直接”?在while循环中添加Thread.sleep(10)可能会将CPU负载降低到接近零。


有什么更好的方法可以做到这一点? (假设我无法更改负责更改整数的任何方法。)


更好的方法是不直接公开字段。封装好处的一个很好的例子-使用setter方法将使实现观察者模式变得轻而易举。

10-05 18:41