我将代码更改为更为详细的版本,以便您可以更好地了解我的问题。
我需要“观察”一个整数值,并在其变化时立即做出响应。到目前为止,我发现的最好方法是在无限循环中使用线程。
以下是我的项目中大大简化的部分。总而言之,通过在我的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方法将使实现观察者模式变得轻而易举。