| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 391 人关注过本帖
标题:Swing 向jframe中添加 jpanel类的问题
收藏  订阅  推荐  打印
Jared_self
Rank: 1
来自:黑龙江
等级:新手上路
帖子:20
积分:318
注册:2008-8-6
Swing 向jframe中添加 jpanel类的问题

我创建了
一个jframe类 mainframe
一个jpanel 类 Book
一个控制类 add   在add类中 new一个 Book加到mainframe里
add类在mainframe的菜单监听里调用add(mainframe)参数是mainframe类型的

在mainframe中建立main方法 启动 添加 jpanel类型的Book 成功显示

但当通过登陆窗口 打开 mainframe 窗口时再调用add(mainframe)有空指针异常
请问 在 mainframe本类中new 和在登陆窗口中new  出的mainframe窗口有什么不同吗
要怎么解决
2008-8-6 23:42
jdk2006
Rank: 3Rank: 3
等级:中级会员
帖子:239
积分:2604
注册:2007-5-12

上传代码看看

2008-8-7 04:08
Jared_self
Rank: 1
来自:黑龙江
等级:新手上路
帖子:20
积分:318
注册:2008-8-6

//已经解决 但我还是想不通  代码有点长 写的不全  希望能够得到 详细的答案 谢谢!
第一个类Main:
public class Main extends JFrame {
    final JLabel label;
    .........................//略
    static Main fm;
public Main() {
        super();
........................//略

final JMenuItem menuItem_4 = new JMenuItem();
        menuItem_4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {// 加入 出借图书 面板
                if (RemoveAble) {
                    fm.getContentPane().removeAll();
                    fm.getContentPane().add(label, BorderLayout.NORTH);
                }
//##################当用第三个类new此类的时候 下面的语句出现空指针异常 应该是fm为空吧
                new Menu_OutBook().add(fm);//通过监听调用逻辑控制类的方法加入面板
                RemoveAble = true;//其中fm就是本类的一个实例
            }
        });
}

public static void main(String args[]) {
        try {
            fm = new Main();
            fm.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void addFm(Main a){//################################此行是后加进去的
        this.fm = a;
    }
}

[ 本帖最后由 Jared_self 于 2008-8-7 23:12 编辑 ]
2008-8-7 22:59
Jared_self
Rank: 1
来自:黑龙江
等级:新手上路
帖子:20
积分:318
注册:2008-8-6

第二个类Menu_OutBook :
package Ctrl;

import java.awt.BorderLayout;
import View.OutBook;
import View.Main;

/*******************************************************************************
* 加入-----出借图书面板
******************************************************************************/
public class Menu_OutBook {
    public void add(Main frame) {
        OutBook f = new OutBook();
        f.setVisible(true);
        frame.getContentPane().add(f, BorderLayout.CENTER);
        frame.validate();
    }
}
2008-8-7 22:59
Jared_self
Rank: 1
来自:黑龙江
等级:新手上路
帖子:20
积分:318
注册:2008-8-6

第三个类是一个登陆敞口的监听 当验证正确后
public class FirstUser {
    public static Main frame;
.............//验证正确
frame = new Main();
//#####################################//这一行是后加进去的以解决问题
frame.addFm(frame);
//#################################
frame.setVisible(true);
uin.setVisible(false);// 隐藏登陆窗口
}

[ 本帖最后由 Jared_self 于 2008-8-7 23:01 编辑 ]
2008-8-7 22:59
Jared_self
Rank: 1
来自:黑龙江
等级:新手上路
帖子:20
积分:318
注册:2008-8-6

我是想知道,为什么Main自己new自己的时候没有问题,而通过第三个类FirstUser new的时候要调用frame.addFm(frame);方法?把自己的属性再次加到自己身上那?难道两次new出的frame不是一个吗。想不大通?
2008-8-7 23:06
jdk2006
Rank: 3Rank: 3
等级:中级会员
帖子:239
积分:2604
注册:2007-5-12

奥,这样的。你对创建实例还不是很理解。new每次都会开一个新的实例。在虚拟机的存储也发生变化。
public class test {
    public test(char flag){
        System.out.println("测试对象:"+flag);
    }
    public static void main(String[] args) {
        test a=new test('a');
        System.out.println(a);
        test b=new test('b');
        System.out.println(b);
    }
}
打印出的值:
测试对象:a
test@de6ced
测试对象:b
test@c17164
你的程序一些方法名对照不齐,看不懂。

2008-8-8 03:07
Jared_self
Rank: 1
来自:黑龙江
等级:新手上路
帖子:20
积分:318
注册:2008-8-6
回复 7# jdk2006 的帖子

但是我的 属性static Main fm;是累的静态的  应该是每个实例公用的啊  难道只是内存地址相同 而并不是真正的同一个fm
这么理解对吗

谢谢你的讲解
2008-8-8 16:33
jdk2006
Rank: 3Rank: 3
等级:中级会员
帖子:239
积分:2604
注册:2007-5-12

static Main fm只能算是创建了Main 的一个对象,而不是实例。new Main()才是实例。因此fm没有实例化

2008-8-8 18:55
Jared_self
Rank: 1
来自:黑龙江
等级:新手上路
帖子:20
积分:318
注册:2008-8-6

明白了 谢谢 有些东西 不做真的不懂啊 呵呵
2008-8-9 16:36
共有 390 人关注过本帖
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.073946 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved