gpt4 book ai didi

java - 带线程的闪烁字符串

转载 作者:行者123 更新时间:2023-12-01 18:57:48 26 4
gpt4 key购买 nike

我正在尝试编写一个Java小程序来显示用户输入的字符串,然后它应该通过在该字符串和另一个字符串之间切换来闪烁该字符串。我正在尝试使用线程来执行此操作,但我对这些和小程序还很陌生,我不知道从现在开始要做什么。

这是我到目前为止所拥有的:

public class FlashingLabel extends JApplet implements Runnable
{
String blank;
String input;
JLabel label;
Thread t;



public void init()
{
input = JOptionPane.showInputDialog(null, "Enter String", "Flashing Label", JOptionPane.QUESTION_MESSAGE);
blank=" ";

t=new Thread(this);
t.start();
}

public void run()
{
while(true)
{
label=new JLabel(blank);
add(label);
this.repaint();
label=new JLabel(input);
add(label);
this.repaint();
}
}
}

最佳答案

  • 切勿在事件分派(dispatch)线程中执行任何会阻塞它的操作(长时间运行的任务或 IO),这会让您的应用程序看起来像是挂起的。
  • 切勿从事件调度线程以外的任何线程创建或更新任何 UI 组件
  • 每次要更新消息时,无需创建新的 JLabel,只需使用 JLabel#setText 即可。您的代码当前正在每个循环上添加两个新标签

为了满足您的需求,一个简单的 javax.swing.Timer将执行您想要实现的任务。

public class FlashApplet extends JApplet {

@Override
public void init() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException ex) {
} catch (InstantiationException ex) {
} catch (IllegalAccessException ex) {
} catch (UnsupportedLookAndFeelException ex) {
}

setLayout(new BorderLayout());
add(new FlashPane());

}
});
}

@Override
public void start() {
}

public static class FlashPane extends JPanel {

protected static final String[] MESSAGES = {"Bad Boys", "What you gonna do"};

private Timer flashTimer;
private JLabel label;
private int messageIndex = -1;

public FlashPane() {
setLayout(new BorderLayout());
add((label = new JLabel()));
label.setHorizontalAlignment(JLabel.CENTER);

flashTimer = new Timer(500, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
messageIndex++;
if (messageIndex >= MESSAGES.length) {
messageIndex = 0;
}
label.setText(MESSAGES[messageIndex]);
}
});
flashTimer.setRepeats(true);
flashTimer.setCoalesce(true);
flashTimer.setInitialDelay(0);
flashTimer.start();
}

}

}

您可能想通读Concurrency in Swing

关于java - 带线程的闪烁字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13354084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com