Java:在线程化时更改标签值
我想创建一个小循环,在按下GUI上的一个按钮后,一个值将每秒改变一次;我试过使用一个线程,但似乎无法使它正常工作。现在发生的情况是,程序在按下按钮后暂停10秒钟。你能帮我吗 这就是我的代码的样子Java:在线程化时更改标签值,java,multithreading,label,Java,Multithreading,Label,我想创建一个小循环,在按下GUI上的一个按钮后,一个值将每秒改变一次;我试过使用一个线程,但似乎无法使它正常工作。现在发生的情况是,程序在按下按钮后暂停10秒钟。你能帮我吗 这就是我的代码的样子 private void ButtonActionPerformed(java.awt.event.ActionEvent evt) { for (x = 0; x <= 10; x++) { try { Thread.sleep(1000);
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
for (x = 0; x <= 10; x++)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt(); here.
}
nummerlabel.setText(String.valueOf(x));
}
}
private void按钮执行的操作(java.awt.event.ActionEvent evt){
对于(x=0;x我想你要找的是swing
软件包附带的Timer
类。读一读,它会帮助你解决问题。我想你要找的是swing
软件包附带的Timer
类。读一读,它会帮助你解决问题问题。我想你要找的是swing
软件包附带的Timer
类。读一读,它会帮助你解决问题。我想你要找的是swing
软件包附带的Timer
类。读一读,它会帮助你解决问题问题。一个简单的规则是使用executor服务并以可运行状态运行代码。这不会阻止程序的全局流。请记住关闭executor
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
for (int x = 0; x <= 10; x++) {
final int y=x;
executorService.execute(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//nummerLabel should be accessed via final reference
nummerlabel.setText(String.valueOf(y));
}
});
}
executorService.shutdown();
}
private void按钮执行的操作(java.awt.event.ActionEvent evt){
ExecutorService ExecutorService=Executors.newFixedThreadPool(1);
对于(int x=0;x一个简单的规则是使用ExecutorService并以可运行状态运行代码。这不会阻止程序的全局流。请记住关闭executor
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
for (int x = 0; x <= 10; x++) {
final int y=x;
executorService.execute(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//nummerLabel should be accessed via final reference
nummerlabel.setText(String.valueOf(y));
}
});
}
executorService.shutdown();
}
private void按钮执行的操作(java.awt.event.ActionEvent evt){
ExecutorService ExecutorService=Executors.newFixedThreadPool(1);
对于(int x=0;x一个简单的规则是使用ExecutorService并以可运行状态运行代码。这不会阻止程序的全局流。请记住关闭executor
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
for (int x = 0; x <= 10; x++) {
final int y=x;
executorService.execute(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//nummerLabel should be accessed via final reference
nummerlabel.setText(String.valueOf(y));
}
});
}
executorService.shutdown();
}
private void按钮执行的操作(java.awt.event.ActionEvent evt){
ExecutorService ExecutorService=Executors.newFixedThreadPool(1);
对于(int x=0;x一个简单的规则是使用ExecutorService并以可运行状态运行代码。这不会阻止程序的全局流。请记住关闭executor
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
for (int x = 0; x <= 10; x++) {
final int y=x;
executorService.execute(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//nummerLabel should be accessed via final reference
nummerlabel.setText(String.valueOf(y));
}
});
}
executorService.shutdown();
}
private void按钮执行的操作(java.awt.event.ActionEvent evt){
ExecutorService ExecutorService=Executors.newFixedThreadPool(1);
for(int x=0;x在操作侦听器(或任何事件处理程序)中调用Thread.sleep()
,将导致程序在sleep()调用期间无响应
Java Swing等GUI框架通常有一个事件调度线程(EDT),用于处理所有键盘和鼠标输入。事件处理程序在EDT中调用,并且由于只有一个EDT,因此必须一次调用一个。在当前事件的处理程序返回之前,您的程序无法响应下一个事件
正如Jimmy Jutt在回答中所说,在GUI程序中,使事情稍后发生或以周期性间隔发生的正确方法是使用某种计时器(例如,javax.swing.timer
)。计时器可用于计划将来的定时事件,您为其编写处理程序函数的方式与为按键和鼠标事件编写处理程序的方式相同。在操作侦听器(或任何事件处理程序)中调用Thread.sleep()
将导致程序在sleep()调用期间无响应
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i <= 10; i++) {
nummerlabel.setText(String.valueOf(i));
TimeUnit.SECONDS.sleep(1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
}
Java Swing等GUI框架通常有一个事件调度线程(EDT),用于处理所有键盘和鼠标输入。事件处理程序在EDT中调用,并且由于只有一个EDT,因此必须一次调用一个。在当前事件的处理程序返回之前,您的程序无法响应下一个事件
正如Jimmy Jutt在回答中所说,在GUI程序中,使事情稍后发生或以周期性间隔发生的正确方法是使用某种计时器(例如,javax.swing.timer
)。计时器可用于计划将来的定时事件,您为其编写处理程序函数的方式与为按键和鼠标事件编写处理程序的方式相同。在操作侦听器(或任何事件处理程序)中调用Thread.sleep()
将导致程序在sleep()调用期间无响应
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i <= 10; i++) {
nummerlabel.setText(String.valueOf(i));
TimeUnit.SECONDS.sleep(1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
}
Java Swing等GUI框架通常有一个事件调度线程(EDT),用于处理所有键盘和鼠标输入。事件处理程序在EDT中调用,并且由于只有一个EDT,因此必须一次调用一个。在当前事件的处理程序返回之前,您的程序无法响应下一个事件
正如Jimmy Jutt在回答中所说,在GUI程序中,使事情稍后发生或以周期性间隔发生的正确方法是使用某种计时器(例如,javax.swing.timer
)。计时器可用于计划将来的定时事件,您为其编写处理程序函数的方式与为按键和鼠标事件编写处理程序的方式相同。在操作侦听器(或任何事件处理程序)中调用Thread.sleep()
将导致程序在sleep()调用期间无响应
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i <= 10; i++) {
nummerlabel.setText(String.valueOf(i));
TimeUnit.SECONDS.sleep(1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
}
Java Swing等GUI框架通常有一个事件调度线程(EDT),用于处理所有键盘和鼠标输入。事件处理程序在EDT中调用,并且由于只有一个EDT,因此必须一次调用一个。在当前事件的处理程序返回之前,您的程序无法响应下一个事件
正如Jimmy Jutt在回答中所说,在GUI程序中,使事情稍后发生或以周期性间隔发生的正确方法是使用某种计时器(例如,javax.swing.timer
)。计时器可用于计划未来的定时事件,您为其编写处理程序函数的方式与为按键和鼠标事件编写处理程序的方式相同。p
private void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i <= 10; i++) {
nummerlabel.setText(String.valueOf(i));
TimeUnit.SECONDS.sleep(1);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();
}