gpt4 book ai didi

java - 从 JFrame 返回一个值到 main()

转载 作者:行者123 更新时间:2023-12-02 05:36:51 25 4
gpt4 key购买 nike

我正在编写一个程序,其中有一个带有 JMenu 的 JFrame。一旦用户单击菜单项,就会调用 JDialog,以从用户那里获取字符串。我想在我的主程序中使用该字符串,但我不知道如何将该值从 JFrame 返回到主程序(我设法将值从 JDialog 返回到 JFrame)。有什么想法吗?

我的主要::

public static void main(String[] args)
{
myFirstFrame m = new myFirstFrame();

m.setVisible(true);

String localhost = m.getLh();

System.out.println(localhost);
}

我的 JFrame::

public class myFirstFrame extends JFrame
{
String lh;

myDialog myD;

public myFirstFrame(JFrame mf)
{
super();
setTitle("Welcome");
setSize(300, 300);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);

JMenuItem playg = new JMenuItem("Play game");
simetoxi.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
myD = new myDialog(myFirstFrame.this);
myD.setVisible(true);

String lh = myD.getText();
System.out.println(lh + "ASasASas");
dispose();
}

});

JMenu game = new JMenu("GAME");
game.add(playg);
JMenuBar myBar = new JMenuBar();
myBar.add(game);
setJMenuBar(myBar);
}

public String getLh()
{
return lh;
}
}

我的 JDialog::

public class myDialog extends JDialog
{
JTextField t1;

String sname;

public myDialog(JFrame fr)
{
super(fr, true);
setTitle("Connect");
setSize(200, 200);
setLayout(new FlowLayout());
JLabel l1 = new JLabel("Give the server name");
t1 = new JTextField(15);
add(l1);
add(t1);
JButton okb = new JButton("submit");
okb.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
sname = t1.getText();
dispose();
}
});
add(okb);
}

public String getText()
{
return sname;
}
}

最佳答案

问题是,当 main 创建 Frame 时,它不会停止并等待该值变得可用,然后再执行 main 的其余部分 函数。

有很多方法可以解决这个问题。例如,您可以将 System.out.println(localhost) 放在 main 中,而可以将其放在不同的方法中。然后,在 Frame 中,获取值时调用该方法。

如果您确实想将该调用放入 main 中,则必须找到某种方法来使 main 阻塞,直到该值可用为止。例如,您可以创建一个 BlockingQueue,并尝试将 main 中的值出队。在 Frame 事件处理程序中,将所需的值推送到队列中。

关于java - 从 JFrame 返回一个值到 main(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24889282/

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