Причина, по которой они не отображаются, заключается в том, что вы, вероятно, вызываете статический showCourseListDialog()
, чтобы показать свой диалог.Этот метод проверяет, является ли ваш статический courseListDialog
нулевым, и, если это так, создайте его и установите , чтобы диалоговое окно было видимым, а не clf
, который вы создали.
Если в вашем showCourseListDialog()
вы вызываете метод addCourses()
после создания экземпляра своего 'singleton', вы должны быть в порядке:
public static void showCourseListDialog() {
if (courseListDialog == null) {
courseListDialog = new CourseListFrame();
courseListDialog.addCourses();// <<---- this is key!
}
courseListDialog.pack();
courseListDialog.setVisible(true);
courseListDialog.setSize(260, 180);
}
Тем не менее, имея static
courseListDialog
, очевидно, что вы хотите, чтобы этот диалог был единичным.Если это так, я бы по крайней мере сделал бы ваш конструктор private
.Вы хотите активно избегать ситуации, в которую вы попадаете, когда вы можете создать несколько экземпляров синглтона.В вашем showCourseListDialog
вы все равно будете иметь условие гонки, но поскольку вы будете вызывать этот метод только в EDT, вы должны быть в безопасности.
Взгляните на this и другие темы по разработке Singleton в Java (и не забудьте прочитать аргументы con * , где это описано как анти-шаблон)