Когда код компилируется, он просто не содержит синтаксических ошибок (как вещи сообщаются компилятору), но это не означает, что семантических ошибок не существует (что нужно сделать для достижения цели ).
Если вы внимательно изучите информацию об исключении, в ее нижней части вы найдете:
Caused by: java.lang.NullPointerException
at Transaction.menuPanel(Transaction.java:64)
at Transaction.<init>(Transaction.java:37)
В методе menuPanel класса Transaction, который был вызван из конструктора транзакции, используется нулевой указатель (вероятно, переменная без правильной инициализации).
Изучая код, кажется, что вы на самом деле используете переменные без инициализации (то есть с нулевыми значениями):
private JMenuItem summaryMenuItem;
private JMenuItem aboutMenuItem;
private JMenuItem exitMenuItem;
В Transaction.menuPanel ():
private void menuPanel()
{
//...
summaryMenuItem.addActionListener(new SummaryMenuListener());
aboutMenuItem.addActionListener(new AboutMenuListener());
file.add(transaction);
file.add(summaryMenuItem);
file.add(exitMenuItem);
}