我需要制作一段文字,通过将每个字母从一个jlabel移动到另一个jlabel,沿着页面滚动。到目前为止这是我的代码。它需要一个延迟,因为它太快但它似乎在字符串完成时崩溃。任何帮助将不胜感激?。
ForEach-Object
答案 0 :(得分:2)
首先。是的,您的应用程序崩溃了。从技术上讲,您在IndexOutOfBoundsException
方法中调用input.substring(i, i + 1)
时获得run
。您可以在无限循环中增加i
。因此它会高于你的字符串长度,结果是substring
然后抛出该异常
因此,在递增索引时,首先修复是一种限制。
[...]
i = i + 1;
if(i > length - 1)
i = 0;
下一个修复应该是延迟。但这并不像听起来那么容易。您应该开始学习Threads
如何在Java中工作,因为您需要启动它。多数民众赞成因为您永远不应该将主线程发送到睡眠状态,否则您的GUI将不负责任。所以我会给你一个简单的解决方案,并提醒你学习Threads是如何工作的
因此,请删除run
方法并更改actionPerformed
方法,如下所示:
public void actionPerformed(ActionEvent e) {
if (e.getSource() == inputTextField) {
String j = inputTextField.getText();
// run("abcdef");
new Thread(new Runnable(){
@Override
public void run() {
int length = j.length();
int i = 0;
while (true) {
if (output[0] != null) {
output[0].setText(j.substring(i, i + 1));
} else {
output[0].setText("");
}
i = i + 1;
if(i > length - 1)
i = 0;
try {
Thread.sleep(500); // your delay in ms
} catch (InterruptedException e) {
e.printStackTrace();
}
shift();
}
}
}).start();
}
}