使用java多线程方法sleep()创建闪烁文本
嗨,我正在使用线程处理方法创建一个闪烁的文本框,下面是我的代码:使用java多线程方法sleep()创建闪烁文本,java,multithreading,swing,Java,Multithreading,Swing,嗨,我正在使用线程处理方法创建一个闪烁的文本框,下面是我的代码: import javax.swing.*; public class FlashingText extends JApplet implements Runnable { /** * */ private static final long serialVersionUID = 1L; private JLabel jlblText = new
import javax.swing.*;
public class FlashingText extends JApplet implements Runnable {
/**
*
*/
private static final long serialVersionUID = 1L;
private JLabel jlblText = new JLabel("welcome",JLabel.CENTER);
public FlashingText() {
add(jlblText);
new Thread(this).start();
}
@Override
public void run() {
try {
while(true) {
if(jlblText.getText() == null) {
jlblText.setText("Welcome");
Thread.sleep(2000);
} else
jlblText.setText(null);
}
} catch(InterruptedException ex) {
}
}
}
在我编译并运行它之后,文本似乎根本没有闪烁
我的代码有什么问题吗?
非常感谢 据我所知,以下代码块中存在问题:
try {
while(true) {
if(jlblText.getText() == null) {
jlblText.setText("Welcome");
Thread.sleep(2000);
} else
jlblText.setText(null);
}
}
因为第一次看到值是欢迎的,所以它将进入循环并转到else并将其设置为null,然后立即再次检查,因为else中没有睡眠,所以它将再次检查并进入if块并将其设置为欢迎,整个过程将以很快的速度完成,这样你就看不到闪光效果了。所以我认为你应该试着在else块的末尾放一个睡眠,然后看看,根据我的说法,它应该会起作用。
您应该更改:
else
jlblText.setText(null);
到
或者类似的东西据我所知,以下代码块中存在问题:
try {
while(true) {
if(jlblText.getText() == null) {
jlblText.setText("Welcome");
Thread.sleep(2000);
} else
jlblText.setText(null);
}
}
因为第一次看到值是欢迎的,所以它将进入循环并转到else并将其设置为null,然后立即再次检查,因为else中没有睡眠,所以它将再次检查并进入if块并将其设置为欢迎,整个过程将以很快的速度完成,这样你就看不到闪光效果了。所以我认为你应该试着在else块的末尾放一个睡眠,然后看看,根据我的说法,它应该会起作用。
您应该更改:
else
jlblText.setText(null);
到
或者类似的东西据我所知,以下代码块中存在问题:
try {
while(true) {
if(jlblText.getText() == null) {
jlblText.setText("Welcome");
Thread.sleep(2000);
} else
jlblText.setText(null);
}
}
因为第一次看到值是欢迎的,所以它将进入循环并转到else并将其设置为null,然后立即再次检查,因为else中没有睡眠,所以它将再次检查并进入if块并将其设置为欢迎,整个过程将以很快的速度完成,这样你就看不到闪光效果了。所以我认为你应该试着在else块的末尾放一个睡眠,然后看看,根据我的说法,它应该会起作用。
您应该更改:
else
jlblText.setText(null);
到
或者类似的东西据我所知,以下代码块中存在问题:
try {
while(true) {
if(jlblText.getText() == null) {
jlblText.setText("Welcome");
Thread.sleep(2000);
} else
jlblText.setText(null);
}
}
因为第一次看到值是欢迎的,所以它将进入循环并转到else并将其设置为null,然后立即再次检查,因为else中没有睡眠,所以它将再次检查并进入if块并将其设置为欢迎,整个过程将以很快的速度完成,这样你就看不到闪光效果了。所以我认为你应该试着在else块的末尾放一个睡眠,然后看看,根据我的说法,它应该会起作用。
您应该更改:
else
jlblText.setText(null);
到
或者类似这样的东西,从代码中看,您似乎并没有在闪烁任何东西。我发现您的代码存在一些问题:
- 如果标签没有文本,则
方法将生成空字符串(getText()
),而不是“”
李>null
- 在更新可视组件时,需要通过事件调度程序线程(EDT)。这是通过课堂向您公开的
threads通常是个坏主意。如果通过EDT进行更改,将挂起ED线程,这将导致应用程序UI冻结,这是不需要的sleep()
- 你在吞咽例外。在异常处理中,您没有做任何事情。不处理异常被认为是不好的做法(有时一条简单的日志消息就可以了)
- 如果标签没有文本,则
方法将生成空字符串(getText()
),而不是“”
李>null
- 在更新可视组件时,需要通过事件调度程序线程(EDT)。这是通过课堂向您公开的
threads通常是个坏主意。如果通过EDT进行更改,将挂起ED线程,这将导致应用程序UI冻结,这是不需要的sleep()
- 你在吞咽例外。在异常处理中,您没有做任何事情。不处理异常被认为是不好的做法(有时一条简单的日志消息就可以了)
- 如果标签没有文本,则
方法将生成空字符串(getText()
),而不是“”
李>null
- 在更新可视组件时,需要通过事件调度程序线程(EDT)。这是通过课堂向您公开的
threads通常是个坏主意。如果通过EDT进行更改,将挂起ED线程,这将导致应用程序UI冻结,这是不需要的sleep()
- 你在吞咽例外。在异常处理中,您没有做任何事情。不处理异常被认为是不好的做法(有时一条简单的日志消息就可以了)
- 如果标签没有文本,则
方法将生成空字符串(getText()
),而不是“”
李>null
- 在更新可视组件时,需要通过事件调度程序线程(EDT)。这是通过课堂向您公开的
threads通常是个坏主意。如果通过EDT进行更改,将挂起ED线程,这将导致应用程序UI冻结,这是不需要的sleep()
- 你在吞咽例外。在异常处理中,您没有做任何事情。不处理异常(有时是一条简单的日志消息