Доступ к объектам, созданным в методе main из других классов - PullRequest
2 голосов
/ 23 декабря 2011

Эй, я пытаюсь получить доступ к объекту, который я создал в методе main, из другого класса, но когда я ссылаюсь на него в другом классе, он не распознается.После некоторого исследования я думаю, что это как-то связано с модификаторами доступа, но я попытался сделать объект общедоступным только для того, чтобы появился комментарий «удалить недопустимый модификатор».Есть указатели?

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

Извините, что не упомянул!Я пишу на Java.Вот что у меня есть:

public static void main(String[] args) {

    Mainframe mainframe = new Mainframe();
    mainframe.initialiseMF();       
    LoginPanel lp = new LoginPanel();
    mainframe.add(lp);
}

public class Mainframe extends JFrame {

public Mainframe () {
    // Set size of mainframe
    setBounds(0, 0, 500, 500);

}

public void initialiseMF (){
    // Get the size of the screen
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

    // Determine the new location of the mainframe
    int w = getSize().width;
    int h = getSize().height;
    int x = (dim.width-w)/2;
    int y = (dim.height-h)/2;

    // Move the mainframe
    setLocation(x, y);
    setVisible(true);
}

}

Я пытаюсь сделать это утверждение в другом классе:

Container content = mainframe.getContentPane();   

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011

Я не совсем уверен, что вы подразумеваете под "объектом", но я просто предполагаю, что вы имеете в виду переменную.

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

например. локальная (метод-локальная) переменная:

//local variables are the ones that are declared inside a method
//their life and visibility is limited only within the block in which they are define.
public static void main(String[] args) { // args is also a local variable
    String localVar = "Access modifiers are not allowed for local variables.";
    //the reason that the access modifiers are not allowed is because
    //the local variables are not members of the class        
}

Имеет смысл только сделать членов класса private, protected, package-private или public.

например. переменная-член:

class AClass {
    private String memberVar = "A member variable can have access modifier.";
    //the access modifier will determine the visibility of that variable.

    public String getMemberVar() {
        return this.memberVar;
    }
} 
  1. private: виден только внутри класса. Вы можете сделать его доступным, используя какой-либо публичный метод. Обычно вызываемые методы получения.

  2. package-private: доступно только внутри пакета. Опять же, вы можете сделать его доступным вне пакета, используя какой-либо публичный метод.

  3. protected: видимый только внутри класса и его подклассов (не имеет значения, даже если подкласс находится вне пакета).

  4. общедоступно: доступно везде.

0 голосов
/ 23 декабря 2011

Помните, что объект мэйнфрейма является локальным для метода main (), который является статическим. Вы не можете получить к нему доступ вне класса.

Возможно, это будет немного чище.

public class Mainframe extends JFrame{
     public Mainframe(){
          initialiseMF ();
     }

     public void initialiseMF (){
          //do ur inits here
     }

}

Тогда сделай это,

public class TheOtherClass{

    private Mainframe mainFrame;

    public TheOtherClass(){
        mainFrame = MainFrame.mainFrame; //although I would not suggest this, it will avoid the Main.mainFrame call
    }

    public void otherMethodFromOtherClass(JFrame mainFrame){
        Container content = mainFrame.getConentPane();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...