我在创建输出流文件时遇到问题。
OutputStream output = new FileOutputStream(username + ".txt");
byte buffer[] = data.getBytes();
output.write(buffer);
output.close();
它工作正常,直到我做了另一种方法:
public void actionPerformed (ActionEvent e) //When a button is clicked
{
if (e.getSource() == encrBtn)
{
menu.setVisible(false);
createProfile();
menu.setVisible(true);
}
else
{
if (e.getSource() == decrBtn)
{
menu.setVisible(false);
viewProfile();
menu.setVisible(true);
}
else
{
if (e.getSource() == exitBtn)
{
JOptionPane.showMessageDialog(null, "Goodbye!");
System.exit(0);
}
}
}
}
以前,我在调用
的每个方法的开头放置了Exceptioncreateprofile();
方法(输出流是)。但现在我得到了
ProfileEncryption_2.java:54: error: actionPerformed(ActionEvent) in ProfileEncryption_2 cannot implement actionPerformed(ActionEvent) in ActionListener
public void actionPerformed (ActionEvent e) throws Exception //When a button is clicked
^
overridden method does not throw Exception
以前,我想知道是否有另一种方法可以抛出异常:cannot implement actionPerformed(ActionEvent) in ActionListener 但现在我认为以某种方式强制输出流来制作文件会更好。我用google搜索了多个这样的措词,但我现在知道怎么做了......我找到的东西也没用。
答案 0 :(得分:1)
ActionListener
接口未将其actionPerformed
方法声明为抛出任何类型的Exception
,您无法更改此签名。
您需要从方法中捕获并管理异常。
public void actionPerformed(ActionEvent e) //When a button is clicked
{
if (e.getSource() == encrBtn) {
menu.setVisible(false);
try {
createProfile();
} catch (Exception exp) {
exp.printStackTrace();
JOptionPane.showMessageDialog(this, "Failed to create profile", "Error", JOptionPane.ERROR_MESSAGE);
}
menu.setVisible(true);
} else {
//...
}
}
如果文件不存在, FileOutputStream
能够创建该文件,但如果路径没有,或者如果您没有足够的权限写入指定位置或任何其他位置,则可能会出现问题可能的问题......
答案 1 :(得分:0)
您的类型不匹配。 ActionListener
接口的actionPerformed
方法不包含throws Exception
子句,因此您不能在您覆盖的方法中包含一个子句。一个简单的解决方法是捕获任何抛出的Exception
,并将其作为RuntimeException
重新抛出。由于未选中RuntimeException
,因此您无需将其包含在throws
子句中。
public void actionPerformed (ActionEvent e) //When a button is clicked
{
try { // <-- Added try block
if (e.getSource() == encrBtn)
{
menu.setVisible(false);
createProfile();
menu.setVisible(true);
}
else
{
if (e.getSource() == decrBtn)
{
menu.setVisible(false);
viewProfile();
menu.setVisible(true);
}
else
{
if (e.getSource() == exitBtn)
{
JOptionPane.showMessageDialog(null, "Goodbye!");
System.exit(0);
}
}
}
}
catch (Exception e) { // <-- Catch exception
throw new RuntimeException(e); // <-- Re-throw as RuntimeException
}
}
如果可能的话,实际上通常会更好地处理异常,但是如果你只想查看异常(例如调试),那么我会说将它包装在RuntimeException
并重新抛出它是一个比在所有方法签名的末尾添加throws Exception
更清洁。如果您可以将Exception
块中的catch
类型缩小到您期望的实际异常类型,也会更好。