问题,我试图让一个SwingWorker的工作。 我有下面的代码的那一刻:用的SwingWorker
public class ImageWorker extends SwingWorker<Void, Void> implements KeyListener
{
private JLabel imageLabel;
private ImageIcon basicImage;
private ImageIcon whiteImage;
public static void main(String[] args)
{
new ImageWorker();
}
public ImageWorker()
{
final JFrame frame = new JFrame();
imageLabel = new JLabel();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 400);
frame.getContentPane().add(imageLabel);
frame.setVisible(true);
try
{
basicImage = new ImageIcon(ImageIO.read(new File("src\\img\\basis1.jpg")).getScaledInstance(1024, 768, Image.SCALE_SMOOTH));
whiteImage = new ImageIcon(ImageIO.read(new File("src\\img\\wit.jpg")).getScaledInstance(1024, 768, Image.SCALE_SMOOTH));
}
catch(IOException ex)
{
ex.getMessage();
}
this.execute();
}
@Override
protected Void doInBackground()
{
try
{
while (true)
{
displayImage(basicImage);
Thread.sleep(1000L);
if(isCancelled())
return null;
}
}
catch(InterruptedException e)
{
e.getMessage();
}
return null;
}
private void displayImage(final Icon image)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
imageLabel.setIcon(image);
}
});
}
我期待的图像出现在的JLabel,但我只看到JFrame中弹出。文件正确加载我已经在另一个设置中测试过。 任何指针?
你究竟在做什么,需要一个'SwingWorker'?它意味着用于在后台执行某些密集操作但希望结果显示在UI中的情况,因此需要在“Event Dispatch Thread”中执行某些操作,例如通过网络加载映像。在这里,它看起来像你只是不断地显示图像。也许如果你解释你想达到什么,你会得到一个很好的答案。 – 2011-03-03 15:13:25
我没有做任何事情,我只是试图在JLabel上替换一些图像,直到用户按下一个键。但由于我不是程序员,我不知道从哪里开始。我被告知SwingWorker将是一个容易开始的地方,因为效率和代码都不重要。这是我一次性使用某个课程的演示文稿(显然不是CS相关的)。我在寻找快速ñ脏嘿嘿http://stackoverflow.com/questions/5179569/alternating-images-with-a-timer-using-java – Oxymoron 2011-03-03 15:17:57
好了,没有什么帮助。让我再说一遍。 – 2011-03-03 15:25:37