2014-01-11 5 views
0

Я получил ошибку в своем коде, но я не уверен, что означает ошибка, я пробовал исследовать ошибку, но, похоже, ничего не связано с моим кодом, может ли кто-нибудь помочь мне?Реализовать унаследованный абстрактный метод?

Мой код;

import java.io.*; 
import java.lang.*; 
import java.util.*; 
import java.awt.event.*; 
import java.awt.*; 

import javax.swing.*; 


public class Assignment4Test { 

public static void main(String[] args) throws IOException { 
    Scanner console = new Scanner(System.in); 
    BufferedReader in = new BufferedReader(new FileReader("shop-account")); 

    final int Username = 3387; 
    final int Password = 5183; 
    final int AccountNumber = 22334455; 

    int EnteredUsername; 
    int EnteredPassword; 
    int EnteredAccountNumber; 
    for (int s = 0; s <= 3; s++) { 
     if (s < 3) { 
      System.out.println("Enter Username"); 
      EnteredUsername = console.nextInt(); 
      System.out.println("Username Entered is " + EnteredUsername); 
      System.out.println("Enter Password"); 
      EnteredPassword = console.nextInt(); 
      System.out.println("Password Entered is " + EnteredPassword); 
      System.out.println("Enter Account Number"); 
      EnteredAccountNumber = console.nextInt(); 
      System.out.println("Account Number Entered is " + EnteredAccountNumber); 
      if (Username == EnteredUsername && (Password == EnteredPassword) 
        && (AccountNumber == EnteredAccountNumber)) { 
       System.out.println("Welcome"); 
       System.out.println("Account username, password, account number and current balance and shown below;"); 
       String line; 
       while((line = in.readLine()) != null) 
       { 
        System.out.println(line); 
       } 
       new MyFrame().displayGui(); 
       break; 
      } else { 
       System.out.println("Wrong Username, Password or Account Number. Please try again."); 
      } 
     } else { 
      System.out.println("3 incorrect enteries detected. Program is terminating, goodbye!"); 
     } 
    } 
} 

static class MyFrame extends JFrame { 

    JMenuBar menubar; 

    JMenu TransferAnAmount; 
    JMenuItem TransferAnAmountToAnotherAccount; 

    JMenu ListRecentTransactions; 
    JMenuItem ShowList; 

    JMenu DisplayCurrentBalance; 
    JMenuItem ShowBalance; 

    JMenu ExitProgram; 
    JMenuItem Exit; 

    public MyFrame() { 

     setLayout(new FlowLayout()); 

     menubar = new JMenuBar(); 
     setJMenuBar(menubar); 

     TransferAnAmount = new JMenu("Transfer An Amount"); 
     menubar.add(TransferAnAmount); 

     ListRecentTransactions = new JMenu("List Recent Transactions"); 
     menubar.add(ListRecentTransactions); 

     DisplayCurrentBalance = new JMenu("Display Current Balance"); 
     menubar.add(DisplayCurrentBalance); 

     ExitProgram = new JMenu("Exit Program"); 
     menubar.add(ExitProgram); 

     TransferAnAmountToAnotherAccount = new JMenuItem("Transer an amount to another account"); 
     TransferAnAmount.add(TransferAnAmountToAnotherAccount); 

     ShowList = new JMenuItem("Show List"); 
     ListRecentTransactions.add(ShowList); 

     ShowBalance = new JMenuItem("Show Balance"); 
     DisplayCurrentBalance.add(ShowBalance); 
     event s = new event(); 
     ShowBalance.addActionListener(s); 

     Exit = new JMenuItem("Exit Program"); 
     ExitProgram.add(Exit); 
     event e = new event(); 
     Exit.addActionListener(e); 

    } 

    class event implements ActionListener { 
     public void actionPerformed3(ActionEvent s) throws IOException { 
      BufferedReader in = new BufferedReader(new FileReader("shop-account")); 
      String line; 
      while((line = in.readLine()) != null) 
      { 
       System.out.println(line); 
      } 
     } 
     public void actionPerformed4(ActionEvent e) { 
      System.exit(0); 

     } 

    } 

    public void displayGui() { 
     MyFrame gui = new MyFrame(); 
     gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gui.setSize(600, 300); 
     gui.setVisible(true); 

    } 

} 
} 

Я дал ошибку, как эта линия в моем коде;

} 

    class event implements ActionListener { // <<< This line 
     public void actionPerformed3(ActionEvent s) throws IOException { 
      BufferedReader in = new BufferedReader(new FileReader("shop-account")); 
      String line; 
      while((line = in.readLine()) != null) 
      { 
       System.out.println(line); 
      } 
     } 
     public void actionPerformed4(ActionEvent e) { 
      System.exit(0); 

     } 

    } 

Ошибка дано это;

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
    The type Assignment4Test.MyFrame.event must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent) 

Я не уверен, что ошибка или как это исправить.

Любая помощь приветствуется, спасибо.

+0

Вам необходимо реализовать метод 'public void actionPerformed (ActionEvent s)'. Вы можете прочитать о интерфейсах: http://docs.oracle.com/javase/tutorial/java/concepts/interface.html –

+1

Вы используете Eclipse, не так ли? Итак, перейдите в меню «Окно» и откройте представление «Проблемы». Это представление всегда должно быть открыто, и вы даже не должны пытаться запустить приложение, пока ошибки компиляции все еще перечислены в этом представлении. Eclipse, BTW, вероятно, предупредил вас, что при запуске программы у вас были не компилируемые классы, но вы, вероятно, предпочли игнорировать это предупреждение. Не.И исправить ошибки компиляции перед запуском программы. –

ответ

1

ActionListener интерфейс содержит метод actionPerformed, поэтому при реализации этого интерфейса обязательно переопределить метод actionPerformed. Правильное определение метода: есть

public void actionPerformed(ActionEvent e) 

Не уверен, является ли это просто опечатка, но есть два способа actionPerformed3 и actionPerformed4, которые на самом деле не Переопределение actionPerformed метода ActionListener класса.

Чтобы избежать таких проблем, всегда полезно использовать аннотацию @Override поверх метода, который вы пытаетесь переопределить. Так что это лучше и безопаснее:

@Override   
public void actionPerformed(ActionEvent e) { 
      // method body 
} 
+0

И вы должны использовать аннотацию @Override, которая помогает обнаружить такие ошибки на ранней стадии. – SirRichie

+0

Привет, спасибо за ответ, я понимаю, что вы имеете в виду здесь, но я пытаюсь создать несколько функций для своего меню, но мне нужно изменить имя 'actionPerformed3' или' actionPerformed4' на 'actionPerformed', чтобы' @Override '. Но у меня не может быть более одного «actionPerformed». Как мне создать несколько «actionPerformed» и все еще иметь возможность «@ переопределять» все методы, чтобы гарантировать, что все они работают правильно? – Yaz

0

ActionListener - это интерфейс.

Таким образом, при реализации этого интерфейса, вы должны override в actionPerformed(ActionEvent e) метод:

class MyListener implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     // do something 
     // maybe call actionPerformed3(e)? 
    } 
} 
0

Вам нужно реализовать public void actionPerformed(ActionEvent e) внутри определения класса событий

class event implements ActionListener { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
    // you need to implement this 
    } 
      public void actionPerformed3(ActionEvent s) throws IOException { 
       BufferedReader in = new BufferedReader(new FileReader("shop-account")); 
       String line; 
       while((line = in.readLine()) != null) 
       { 
        System.out.println(line); 
       } 
      } 
      public void actionPerformed4(ActionEvent e) { 
       System.exit(0); 

     } 

    } 
0

Поскольку вы реализуете интерфейс вам необходимо переопределить все методы в нем.

@override 
    public void actionPerformed(ActionEvent e) 

    { 

    //some code. 

    } 

Добавьте этот код и попытайтесь его.

Правило: вы должны переопределить все методы, определенные в интерфейсе, который вы реализуете, если ваш класс не является абстрактным.

Смежные вопросы