我的教授分配了一个通过 GUI 运行模拟的项目。要对其进行编辑,我们需要创建一个“新建”菜单项。我们还没有学会如何从 GUI 中获取数据,而且我们的书根本没有涉及它。
我想要做的是,当点击“新建”命令时,焦点会转移回 CMD 提示符,即 System.out 所在的位置。再次开始工作并提示用户输入。
但是,当我尝试实现这一点时,我的程序崩溃了。我能做些什么来解决这个问题?
我的教授分配了一个通过 GUI 运行模拟的项目。要对其进行编辑,我们需要创建一个“新建”菜单项。我们还没有学会如何从 GUI 中获取数据,而且我们的书根本没有涉及它。
我想要做的是,当点击“新建”命令时,焦点会转移回 CMD 提示符,即 System.out 所在的位置。再次开始工作并提示用户输入。
但是,当我尝试实现这一点时,我的程序崩溃了。我能做些什么来解决这个问题?
System.out 是否在终端(非 Java)窗口中?如果是这样,我认为这将比您想象的要困难得多。
我很想将 System.in / System.out 重定向到 GUI 上的 JTextPane (这样,改变焦点等会容易得多。我认为你需要尝试解释你在做什么你的问题好一点,当你的程序崩溃时可能会发布一个堆栈跟踪。
无论如何,要在单击“新”菜单项时执行某些操作,您需要执行以下操作:
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Code here to be performed when the item is clicked
}
});
看起来您并没有保留对新创建的 GUI 的引用。据我记得,如果没有对 FoxGui 对象的引用,Java 将垃圾收集该对象(以及任何其他对象)。尝试创建一个全局变量来存储对新创建的 FoxGui 对象的引用。就像是...
FoxGui MyGUIRef;
public void actionPerformed(ActionEvent event)
{
System.out.println("Item: " + event.getActionCommand());
// File Menu Controls
if (event.getActionCommand().equals("New"))
{
MyGUIRef = runNew();
}
}
//Now returns a reference to FoxGui
private FoxGui runNew()
{
return new FoxGui(....)
}
你知道吗?我找到了一个真正简单的解决方案,JOptionPane。我只需要找到一个很好的例子。它会很好地满足我的需求。感谢所有的帮助。我会检查所有帮助过的人。
我知道这是很晚的答案,但在任何地方......
只有一种方法可以完全按照您的意愿行事。
信息:
这是唯一的解决方案,因为 GUI 从不将焦点放在 CMD 上,但如果 GUI 从 CMD 运行,您可以轻松使用 System.in。
问候,格雷格