我正在构建自己的GUI,它将以列表形式显示Friend的对象列表。我遇到的第一个问题是,当我在没有构造函数的情况下运行代码时,一切正常。但是当我为GUI类创建构造函数时,会显示错误消息:
load: GUIapp.class is not public or has no public constructor.
java.lang.IllegalAccessException: Class sun.applet.AppletPanel can not access a member of class GUIapp with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.Class.newInstance0(Class.java:349)
at java.lang.Class.newInstance(Class.java:308)
at sun.applet.AppletPanel.createApplet(AppletPanel.java:807)
at sun.applet.AppletPanel.runLoader(AppletPanel.java:714)
at sun.applet.AppletPanel.run(AppletPanel.java:368)
at java.lang.Thread.run(Thread.java:680)
我的代码:
public class GUIapp extends JApplet{
/*
* Attributes
*/
//** Friends Objects**//
private FriendsGroup a;
private ArrayList<friends> friendList;
//** PANEL **//
private JPanel outerPanel;
//** Button **//
private JButton button1;
/*
* Constructor for Getting all the friends set up
*/
private GUIapp(){
a = null; //initialize variable
try {
a = new FriendsGroup("friends.txt"); //import friend list
} catch (IOException e) {
System.out.println("Fail Import.");
}
friendList = a.getFriendsGroup(); //return an arrayList of Friends Object
}
/*
* Create Stuff
*/
public void createStuff() {
outerPanel = new JPanel(); //create outer panel
button1 = new JButton("Click Me");
outerPanel.add(button1,BorderLayout.SOUTH);
}
/*
* Initialize Stuff
*
*/
public void init(){
createStuff(); //initialize create stuff
this.add (outerPanel);
}
}
在上面的代码中,如果你取出构造函数,它似乎完美无缺。我的问题是,代码有什么问题?为什么我似乎不能创建一个构造函数来首先加载数据?
我的第二个问题是如何创建一个显示朋友姓名列表的面板?这些名称被导入并存储在朋友的arraylist中,对象名为friendList,存储在构造函数中。
谢谢,
答案 0 :(得分:1)
当你自己定义构造函数时 编译器不会创建默认构造函数 因为你定义的构造函数是私有的 你不会有公共构造函数
所以简单地创建一个公共构造函数
public GUIapp(){
// your code
}
答案 1 :(得分:0)
因为您定义构造函数private
将其更改为;
public GUIapp(){
a = null; //initialize variable
try {
a = new FriendsGroup("friends.txt"); //import friend list
} catch (IOException e) {
System.out.println("Fail Import.");
}
friendList = a.getFriendsGroup(); //return an arrayList of Friends Object
}
答案 2 :(得分:0)
问题在于:private GUIapp(){
。这意味着您的构造函数仅对该类可用。通常构造函数是public
,尽管存在例外情况,其中的例子可能是Singleton Pattern。
删除构造函数是有效的,因为默认情况下每个类都有一个无参数构造函数。有关访问修饰符的更多信息,请查看this教程。
或者,您可以在GUIapp
类中使用类似的方法:
public static GUIapp getInstance() { return new GUIapp(); }
你从主要课程中调用它,但我认为在这种情况下,将构造函数从private
更改为public
就足够了。
关于你的第二个问题,this教程应该有所帮助。
答案 3 :(得分:0)
您已将syour构造函数更改为public并调试为:
a.getFriendsGroup();
它不清楚这个方法做了什么,我假设由于某种原因(maby文件中的列表是empt),methode尝试访问一个导致空引用异常的非分配对象,尝试调试到方法中看看发生这种情况或发布方法代码。