我在java中创建了一个GUI,它包含许多JButton。我想要包含一些异常处理,以便在特定按钮被单击两次或直接相互跟随时,会弹出一条消息,说明不允许该命令。您建议我使用哪种类型的例外?
的问候。
答案 0 :(得分:1)
langage语义禁止从actionPerformed
之类的方法中抛出异常。即使它已被授权,您认为主事件处理线程能够对这样的异常做什么?
您需要重新思考界面的工作方式。例如,如果禁止某个操作,那么您的界面必须通过禁用对象来显示它。不让用户点击按钮比让它点击并向他发送一些他的行为不好的反馈更符合人体工程学。
在更复杂的场景中,您只需要出现一些模态对话框,告知用户他当前所要求的内容是不可能的。这可能是在事件处理程序期间抛出一些异常的结果,但是你抓住它不会抛出它:
... actionPerformed(...) {
if (someConditionOccured) {
JOptionPane.showMessageDialog(...);
} else {
// do what you want on normal condition
}
现在可能是这样的:
... actionPerformed(...) {
try {
// something
} catch (...) {
JOptionPane.showMessageDialog(...);
}
您可以使用任何其他合适的对话框。
答案 1 :(得分:0)
我假设您为每个按钮附加了一个监听器,以便在单击该按钮时执行操作。
在该侦听器中,在执行属于该按钮的操作之前,请执行一些验证:
public void actionPerformed (ActionEvent e) {
if (e.getSource() == myNotAllowedToClickButton) {
return;
}
// code that does stuff
}
更好的是,请确保用户无法点击该按钮(myButton.setEnabled(false);
)。
答案 2 :(得分:0)
你根本不能在这里使用try / catch,因为点击两次按钮不是特例。仅通过行动就不会产生任何例外。用户点击后在代码中执行的任何操作都可能导致异常,但这就是您。
您要在此处执行的操作是确定用户是否在动作事件中使用getClickCount()多次单击。或者,您可以在动作侦听器的开头禁用该按钮 - 执行您需要的任何操作 - 然后在操作结束时再次启用该按钮。
如果你需要比这更复杂的东西,你需要重新设计你的应用程序,因为你最终可能会遇到并发问题。
答案 3 :(得分:0)
堆栈的大小应该等于点击模式的最大大小,您将使用。