gpt4 book ai didi

java - 如何使用线程和 awt-events?

转载 作者:行者123 更新时间:2023-12-02 00:46:19 26 4
gpt4 key购买 nike

我有一个可运行的 gui swing 类,它在初始化构造函数时设置我的变量。当 GUI 运行时,它作为自己的单独线程运行。然而问题是,当我的 gui 上触发操作事件时,当我尝试访问已初始化的变量时,它们将重置为默认值。经过一些调试后,似乎触发的 Action 事件是作为它自己的线程开始的。在处理操作事件时,如何在正确的线程中访问正确的变量?

示例代码:

public class myGui implements Runnable{
private flag = false;
public myGui(){
flag = true;
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
System.out.println("The value of flag is: " + flag); // prints flag is false
}
public void run(){
// Do stuff
}
// More code ...
}

在我的示例中,在线程中初始化构造函数时,flag 设置为 true。但是,当触发操作事件时,它将看到标记设置为 false,忽略我的线程变量。我该如何解决这个问题?

谢谢

最佳答案

这里的关键部分是跨不同线程的变量的可见性。在没有同步的情况下,编译器、处理器和运行时可能会对操作的执行顺序执行一些完全奇怪的事情。

因此,请在 flag 变量上使用 volatile 修饰符,以确保对变量的更新可预测地传播到其他线程。

看看Initial Threads Swing 中的并发部分。确保 UI 更新在 Event Dispatcher Thread 中运行例如 invokeLaterinvokeAndWait 。这应该可以让您更清楚地了解 Swing 中涉及的不同线程。

关于java - 如何使用线程和 awt-events?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245702/

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