我有一个Java Swing程序,其中后台程序在更改jSlider时执行。但是jSlider不能通过人工交互来改变,但它会自动减少(jSlider代表液体的浓度水平)。一旦减少,其他程序通过actionListener读取jSlider并提供适当的溶质以满足浓度要求。我无法实现这种情况。我尝试过使用线程,但由于我的知识很少,我可能不会编写正确的代码。
public static void main(String args[])
{
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
new IPS().setVisible(true);
}
});
Thread concentration = new Thread()
{
public void run()
{
try
{
Thread.sleep(3000);
} catch (InterruptedException v)
{
}
sldLevel.setValue(sldLevel.getValue() - 3);
}
};
boolean carryOn = true;
while (carryOn && !btnIPSStart.isEnabled())
{
concentration.start();
}
}
使用Swing Timer进行代码更新
public static void main(String args[])
{
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
new IPS().setVisible(true);
}
});
Timer myTimer = new Timer(100, 1000);
// I get a error 'int cannot be converted to action listener
while (myTimer.isRunning)
{
sldLevel.setValue(sldLevel.getValue() - 3)
}
答案 0 :(得分:1)
您不应该使用Thread,也不应该使用Thread.sleep()。这将导致GUI冻结,并且无法重新绘制自己。
相反,您应该使用Swing Timer。当计时器触发时,您可以更新滑块的值。