Тестирую с графическим интерфейсом (совсем простеньким). Наследовал класс от JFrame, теперь нужно сделать так, что бы можно было создать только 1 объект класса. Использовал классическую схему (точнее две). Одна не сработала (ошибки посыпались), другая -> приватное статическое поле и публичный статический метод, для получения поля, если поле != null:
private static SimpleGUI simpleGUI;

public static SimpleGUI getInstance() {
    if (simpleGUI == null) {
        simpleGUI = new SimpleGUI("Поиск по таблицам");
    }
    return simpleGUI;
}
В итоге - тоже не работает.. Вот, что получается Код и вывод, в случае, если фотка "паропадет":
Код:
private static SimpleGUI simpleGUI;

public static SimpleGUI getInstance() {
    if (simpleGUI == null) {
        simpleGUI = new SimpleGUI("Поиск по таблицам");
        System.out.println("Создали новый " + simpleGUI.hashCode());
        return simpleGUI;
    }
    System.out.println("Хоть 1 дойдет?))");
    return simpleGUI;
}
Вывод:
Создали новый 1461149300
Создали новый 436546048
Создали новый 1150284200
Это вообще как? Я даже в synchronized блок его засовывал (по класу) и переменную как volatile помечал (хоть это и бесполезно, тут). В любом случае - создаются 3 объекта какой-то магией.. может JFrame рефлекцию использует? P.S.: Если сразу проинициализировать поле simpleGUI и в методе getInstance() просто возвращать его - программа выбрасывает ошибку NullPointerException во время клацания на кнопочки... видимо что-то создает экземпляры еще до инициализации класса...
private static SimpleGUI simpleGUI = new SimpleGUI("Поиск по таблицам");

public static SimpleGUI getInstance() {
    return simpleGUI;
}