gpt4 book ai didi

java - 如何从 Java 中的 ActionListener 内部更改变量的值?

转载 作者:行者123 更新时间:2023-12-02 09:07:04 25 4
gpt4 key购买 nike

    int test;

b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent b){
test = 1;
}
});

如何使用此操作监听器将 test 更改为 1 我知道上面的代码不起作用,但我能做什么?

最佳答案

恐怕你根本做不到。

假设test是一个局部变量,回调方法不允许改变它。

为什么?

因为在调用回调时,声明 test 变量的方法可能已经返回,这意味着该变量不再存在。 (编译器提示 test 应该只在监听器方法中读取......我认为。)

<小时/>

让我们将其放入(假设的)上下文中:

public class MyClass {
Button b = ...

public void myMethod() {
int test = 0;

b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent b){
test = 1; // COMPILATION ERROR
}
});

System.out.println("test is " + test);
}
}

此处的目的是在单击按钮时打印“test is 1”。

但这行不通。问题是 addActionListener 添加监听器方法并立即返回。接下来发生的事情是 myMethod 将尝试打印 test。即使这是合法的 Java(它不是!),打印的值也将是 0 ...而不是 1

我们可以通过将 test 声明为实例变量而不是局部变量来“修复”编译错误。

public class MyClass {
Button b = ...
int test = 0;

public void myMethod() {

b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent b){
test = 1; // OK now ...
}
});

System.out.println("test is " + test);
}
}

但是代码仍然没有达到我们想要的效果。 test 变量将很快被打印。

您需要了解的是回调总是稍后发生。如果您想在 println 处查看对 test 的更改,那么回调(监听器)不是实现事物的正确方法。

<小时/>

摘要:您的示例代码中同时存在编译错误和概念问题。

关于java - 如何从 Java 中的 ActionListener 内部更改变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59726095/

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