Чтобы сэкономить оперативную память, я хочу создавать классы на случай, если они понадобятся, а затем их можно будет использовать повторно.

Мой класс таков:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class Engine implements ActionListener {

    JFileChooser fileChooser = new JFileChooser();
    Boolean addWindow = false;

    Engine(){}

    //@ void actionPerformed()
    public void actionPerformed(ActionEvent evt){

        if ( evt.getActionCommand().equals("add") ) {
            if ( addWindow = false ) {
                Add Add = new Add();
                Add.setVisible(true);
            }
            else Add.setVisible(true);
        }
    }
}

(Всего один класс проекта)

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

Но если я попытаюсь скомпилировать, он говорит:

Engine.java:21: ошибка: на нестатический метод setVisible (boolean) нельзя ссылаться из статического контекста: else Add.setVisible (true); (Маркер находится в точке между Add и setVisible ().)

Я не хочу каждый раз воссоздавать класс Add. Просто используйте повторно, если он уже был создан.

0
Kaai Kivi 22 Мар 2013 в 08:12
If (addWindow = false) {должно быть == вероятно ...
 – 
TofuBeer
22 Мар 2013 в 08:25

1 ответ

Лучший ответ
Add add = new Add();
if ( addWindow == false ) { //Thanks to @TofuBeer's comment. I didn't notice this at all.         
    add.setVisible(true);
}
else
    add.setVisible(true);

Поскольку вы используете Add (это имя самого класса), он пытается вызвать метод статически, который выдает ошибку, поскольку это не статический метод в вашем классе Add.

Используйте созданный вами экземпляр для вызова метода и убедитесь, что имя экземпляра не совпадает с именем класса (имя класса с большой буквы A).

Добавить - название класса

добавить - имя экземпляра (если вы также укажете здесь Add, он будет учитывать имя класса вместо имени экземпляра).

3
Rahul 22 Мар 2013 в 08:30
Будет работать только частично, поскольку add будет ограничен блоком if и будет недоступен в else.
 – 
Rob Hruska
22 Мар 2013 в 08:16
Ты уверен, что это точно так же? Java - это CASE-SENSITIVE. Запомни.
 – 
Rahul
22 Мар 2013 в 08:20
Это имеет смысл, но создаст класс Add, даже если он никогда не будет использоваться :(
 – 
Kaai Kivi
22 Мар 2013 в 08:22
Вы собираетесь установить видимость либо true, либо false. Следовательно, он вам понадобится в любом случае.
 – 
Rahul
22 Мар 2013 в 08:23
Разве НЕТ СПОСОБА создать класс, если он нужен? Это позволит значительно сэкономить производительность в больших проектах!
 – 
Kaai Kivi
22 Мар 2013 в 08:28