gpt4 book ai didi

java - 跨方法更改变量

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:26 26 4
gpt4 key购买 nike

我已经设置了 GUI,如果按下按钮 b1:

 public class CubeCalc  {

static int next = 0;

public static void MakeTitlePage()
{
final JFrame window = new JFrame("Cubic Feet Calculator"); //Creates Frame

JButton b1 = new JButton("Start");
b1.setBackground(Color.decode("#5A20DF"));
b1.setForeground(Color.WHITE);
/*b1.setLayout(new GridBagLayout());*/
b1.setPreferredSize(new Dimension(150,50));
b1.addActionListener(new ActionListener() { // action when button is pressed
int pressCount=0;
@Override
public void actionPerformed(ActionEvent e) {

window.dispose();
next = 1;


}
});

然后它将处理标题页,并且 next 将等于 1,并且在事件调度线程上,它会创建一个执行其他操作的新页面:

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() { // launch frame on the Event Dispatch Thread
@Override
public void run() {
MakeTitlePage();

if (next==1)
{
MakeCalcPage();
}

System.out.println(next);
}
});
}

问题是变量 next 仍然等于零,即使我在方法 MakeTitlePage() 中更改了它。如何跨所有方法更改变量,而不仅仅是那个方法?

最佳答案

我认为您可能误解了事件调度线程的工作原理。当您向组件添加监听器时,您就是在告诉 Swing 监听某些事件并在事件分派(dispatch)线程上调用关联的监听器。如果您使用静态变量 next 在线程之间进行通信,那么,首先,这不是这样做的方法,其次,您无论如何都在与同一个线程进行通信。

如果您希望按钮关闭当前窗口并打开一个新窗口,那么您应该直接在 actionPerformed 方法中执行此操作:

public void actionPerformed(ActionEvent e) {
window.setVisible(false);
showCalculationFrame();
}

关于java - 跨方法更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690907/

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