| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1124 人关注过本帖
标题:[求助]申明static变量引发程序异常!
只看楼主 加入收藏
苍琅
Rank: 1
等 级:新手上路
帖 子:116
专家分:0
注 册:2006-12-11
收藏
 问题点数:0 回复次数:11 
[求助]申明static变量引发程序异常!

BookManagerFrame代码:
/**
* @(#)BookManagerFrame.java
* JFC BookManager application
* @author canglang
* @version 1.00 2007/3/9
*/

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

public class BookManagerFrame extends JFrame {
static JMenu MenuSystem,UserManager,ReaderManager,BookManager,Borrow,Return,AllInfo,Help;
static JMenuItem ItemUserAdd,ItemUserDel,DepManager;
static JRadioButton metalbutton,motifbutton,windowsbutton;

[color="#FF0000"]
//××××××××××××××××××××××××××××××××××××××××××××××
//此处 JMenuBar申明为static出现问题,改为private则正常。


static JMenuBar menuBar = new JMenuBar();


//××××××××××××××××××××××××××××××××××××××××××××××
[/color]
public BookManagerFrame() {
//系统管理
MenuSystem = new JMenu("系统管理");
MenuSystem.addSeparator();
JMenuItem userLogin=new JMenuItem("更换用户");
userLogin.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Object[] options = { "更换用户", "取 消" };
int a=JOptionPane.showOptionDialog(null,"确定要 更换用户 吗?"
,"更 换 用 户",JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, options, options[0]);
if(a==0){
UserLogin Login=new UserLogin();
BookManagerFrame.this.dispose();
}
}});
MenuSystem.add(userLogin);

MenuSystem.addSeparator();
JMenuItem ItemExit = new JMenuItem("退出");
ItemExit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
Object[] options = { "退 出", "返 回" };
int a=JOptionPane.showOptionDialog(null,"确定要 退出系统 吗?"
,"退 出 系 统",JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null, options, options[0]);
if(a==0){
System.exit(0);
}
}});
MenuSystem.add(ItemExit);
menuBar.add(MenuSystem);

//读者管理
ReaderManager=new JMenu("读者管理");
JMenuItem ItemReaderAdd=new JMenuItem("添加读者");
JMenuItem ItemReaderUpdata=new JMenuItem("修改读者信息");
JMenuItem ItemReaderDel=new JMenuItem("删除读者");

ReaderManager.add(ItemReaderAdd);
ReaderManager.add(ItemReaderUpdata);
ReaderManager.add(ItemReaderDel);
menuBar.add(ReaderManager);

//图书管理
BookManager=new JMenu("图书管理");
JMenuItem ItemBookAdd=new JMenuItem("添加图书");
JMenuItem ItemBookUpdata=new JMenuItem("修改图书信息");
JMenuItem ItemBookDel=new JMenuItem("删除图书");

BookManager.add(ItemBookAdd);
BookManager.add(ItemBookUpdata);
BookManager.add(ItemBookDel);
menuBar.add(BookManager);

//借书管理
Borrow=new JMenu("借书管理");
JMenuItem ItemBorrow=new JMenuItem("借书");

Borrow.add(ItemBorrow);
menuBar.add(Borrow);

//还书管理
Return=new JMenu("还书管理");
JMenuItem ItemReturn=new JMenuItem("还书");

Return.add(ItemReturn);
menuBar.add(Return);

//信息查询
AllInfo=new JMenu("信息浏览");
JMenuItem ItemBook=new JMenuItem("图书列表");
JMenuItem ItemReader=new JMenuItem("读者列表");

AllInfo.add(ItemBook);
AllInfo.add(ItemReader);
menuBar.add(AllInfo);

//帮助
Help=new JMenu("帮助");
JMenuItem ItemHelp=new JMenuItem("帮助主题");
JMenuItem ItemAbout=new JMenuItem("关 于");

Help.add(ItemHelp);
Help.addSeparator();
Help.add(ItemAbout);
menuBar.add(Help);

JLabel label = new JLabel(new ImageIcon("bg.jpg"));
add(label);
setTitle("图书借阅管理系统");
setJMenuBar(menuBar);
setSize(new Dimension(800, 600));
setLocationRelativeTo(null);
setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);


// Add window listener.
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}});
}
}


UserLogin代码:

/**
* @(#)UserLogin.java
*
* JFC BookManager application
* @用户登录
* @author canglang
* @version 1.00 2007/2/9
*/

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

public class UserLogin extends JFrame {
static JTextField jTextFiledusername;
static JPasswordField jPasswordold;
static BookManagerFrame myMain;

public UserLogin() {

add(new JLabel("用 户 名"));
jTextFiledusername=new JTextField(16);
add(jTextFiledusername);
add(new JLabel("密 码"));
jPasswordold=new JPasswordField(16);
jPasswordold.setEchoChar('★');
add(jPasswordold);
JButton jButtonOK=new JButton("确定");
add(jButtonOK);
JButton jButtonCancel=new JButton("取消");
add(jButtonCancel);

jButtonOK.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
myMain=new BookManagerFrame();
UserLogin.this.dispose();
}});

jButtonCancel.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}});

setTitle("用户登录");
setSize(new Dimension(300,250));
setLocationRelativeTo(null);
setLayout(new FlowLayout(FlowLayout.CENTER,32,35));
setResizable(false);
setVisible(true);
// Add window listener.
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}});
}
public static void main (String[] args) {
new UserLogin();
}
}


BookManagerFrame中的JMenuBar申明为static时,在系统中执行"更换用户"操作重新登陆后菜单项会重叠出现!~
若将JMenuBar申明为private,则一切正常!~

自己查了书,还是对static的作用不太清楚,有高手给个实例讲解一下!~
谢了~

[此贴子已经被作者于2007-3-19 19:36:13编辑过]

搜索更多相关主题的帖子: static 变量 import java awt 
2007-03-19 19:33
风月_无边
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:60
帖 子:2960
专家分:652
注 册:2007-1-19
收藏
得分:0 
不是很清楚,不过你没必要声明成静态的吧!!

我的网站 http://www.
2007-03-19 19:43
苍琅
Rank: 1
等 级:新手上路
帖 子:116
专家分:0
注 册:2006-12-11
收藏
得分:0 
不申明也可以,但是问题既然出现了就想问清楚~·

现实的残酷并不能磨灭我们对生活的渴望! " target="_blank">http://canglangjv.
2007-03-19 19:52
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
我这里运行了你的代码,没有发现任何问题啊,static也一样可以运行,并且没有任何异常

你说的出问题,是出什么问题?有异常信息不

可惜不是你,陪我到最后
2007-03-20 10:09
苍琅
Rank: 1
等 级:新手上路
帖 子:116
专家分:0
注 册:2006-12-11
收藏
得分:0 
没有异常信息!~

不过运行以后执行“系统-->更换用户”操作,重新登陆后,菜单项会重复显示!~

现实的残酷并不能磨灭我们对生活的渴望! " target="_blank">http://canglangjv.
2007-03-20 10:15
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
我再看看

可惜不是你,陪我到最后
2007-03-20 10:20
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
呵呵,那是因为你换用户的时候,每次都调用了 myMain=new BookManagerFrame();
你一调用这个,就会把菜单条加一遍,你自己做一个判断就可以了,也可以做一个单例模式

可惜不是你,陪我到最后
2007-03-20 10:32
苍琅
Rank: 1
等 级:新手上路
帖 子:116
专家分:0
注 册:2006-12-11
收藏
得分:0 
但是我更换拥护的时候执行了dispose()操作啊!~

现实的残酷并不能磨灭我们对生活的渴望! " target="_blank">http://canglangjv.
2007-03-20 10:38
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
你DISPOSE的只是当前的登录窗口

可惜不是你,陪我到最后
2007-03-20 10:40
苍琅
Rank: 1
等 级:新手上路
帖 子:116
专家分:0
注 册:2006-12-11
收藏
得分:0 

还是不太明白,即使向你说的
“每次都调用了 myMain=new BookManagerFrame();
你一调用这个,就会把菜单条加一遍”

那为什么把 JMenuBar申明为private之后,就不会出现问题了???

能不能举例说明一下static的作用!~ 谢谢


现实的残酷并不能磨灭我们对生活的渴望! " target="_blank">http://canglangjv.
2007-03-20 11:44
快速回复:[求助]申明static变量引发程序异常!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013368 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved