1

出力ストリーム ファイルの作成に問題があります。

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);
         }
      }
   }
}

以前は、例外を呼び出す各メソッドの先頭に throws Exception を配置しました。

createprofile();

メソッド (出力ストリームがある場所)。しかし今、私は得る

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

以前は、例外をスローする別の方法があるかどうか疑問に思っていました: ActionListener で actionPerformed(ActionEvent) を実装できません 。これについて複数の言い回しをグーグル検索しましたが、これを行う方法がわかりました...見つけたものも機能しませんでした。

4

2 に答える 2

1

インターフェイスは、そのメソッドが の型をスローActionListenerすることを宣言していません。このシグネチャを変更することはできません。actionPerformedException

メソッド内から例外をキャッチして管理する必要があります。

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ファイルが存在しない場合はファイルを作成できますが、パスが存在しない場合、または指定された場所に書き込むための適切な権限がない場合、またはその他の考えられる問題がいくつかある場合、問題が発生する可能性があります...

于 2013-10-30T06:31:34.147 に答える
0

タイプの不一致が発生しています。ActionListenerインターフェイスのメソッドactionPerformedには句が含まれていないthrows Exceptionため、オーバーライドするメソッドに句を含めることはできません。簡単な修正は、スローされたものをキャッチしException、 として再スローすることRuntimeExceptionです。s はチェックされていないため、句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ブロック内のタイプを、期待している実際の例外タイプに絞り込むことができればより良いでしょう。

于 2013-10-30T06:29:50.580 に答える