日期:2014-05-20  浏览次数:20894 次

java se 单例模式问题
好吧,就这么简单,无法实现单例模式,代码我网上找的,自己修改了下,具体的自己不太懂
求高人解答

Java code
import java.awt.Color;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

public class ColorTest extends JFrame implements ItemListener { 
 private static final long serialVersionUID = 1L;


     //菜单栏
     private JMenuBar menubar = new JMenuBar();
    private JMenu fileMenu = new JMenu("基本信息设置");
    private JMenuItem newMenuItem = new JMenuItem("客户信息设置");
    private JMenuItem openMenuItem = new JMenuItem("货运方式设置");
    private JMenuItem saveMenuItem = new JMenuItem("联系人设置");
    private JMenuItem saveAsMenuItem = new JMenuItem("设备信息设置");
    private JMenuItem exitMenuItem = new JMenuItem("员工管理");
    
    private JMenuItem goodsStyle = new JMenuItem("货单类型");
    private JMenuItem extraSetting = new JMenuItem("附件设置");
    
    private JMenu configMenu = new JMenu("编辑打印报表");
    private JMenuItem backgroudMusicMenu=new JMenuItem("编辑收发货单");
    private JMenuItem backColorMenu = new JMenuItem("编辑维修单");
    
    //第一个Jpanel里的内容
    
    JLabel jl1=new JLabel("客户名称");
    JCheckBox jcb1=new JCheckBox("查询");
    
    //客户名称
    JTextField jt=new JTextField(10);
    String str[]={"AAA","BBB","CCC"};
    JComboBox JCB=new JComboBox(str);
    
    
    //客户地址
    JLabel jl2=new JLabel("客户地址");
    JTextField jf1=new JTextField();
    
    //联系人
    JLabel jl3=new JLabel("联系人");
    String str2[]={"AAA","BBB","CCC"};
    JComboBox JCB2=new JComboBox(str);
    
    //手机
    JLabel jl4=new JLabel("手机");
    JTextField jtf2=new JTextField();
    
    //联系电话
    JLabel jl5=new JLabel("联系电话");
    JTextField jtf3=new JTextField();
    
    
    
    //功能按钮
    JButton jb1=new JButton("清空客户信息");
    JButton jb2=new JButton("创建客户");
    
    
    //单例模式代码
    private static Map<String,ColorTest> map = new HashMap<String,ColorTest>();
         static{
             ColorTest single = new ColorTest();
             map.put(single.getClass().getName(), single);
        }
         
    
         
    

 public static void main(String args[]) {
  try {
   ColorTest single3 = ColorTest.getInstance(null);
  

  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * Create the frame
  */
 /**
 * 
 */
protected ColorTest() {
  super("维修单收发货程序");
  getContentPane().setLayout(null);
  setBounds(40, 40, 900, 660);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  final JPanel panel = new JPanel();
  panel.setBorder(new TitledBorder(null, "客户信息", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, Color.BLUE));
  panel.setLayout(null);
  panel.setBounds(30, 25, 800, 155);
  getContentPane().add(panel);

  final JButton button = new JButton();
  button.setBounds(84, 74, 106, 28);
  button.setText("New JButton");
  //panel.add(button);
  
  //上面的Jpanel内容添加
  
  jl1.setBounds(22,10,55,40);
  panel.add(jl1);
  
  jcb1.setBounds(85,10,55,40);
  panel.add(jcb1);
  
  
  //菜单栏添加代码
    this.setJMenuBar(menubar);
    menubar.add(fileMenu);
    menubar.add(configMenu);
    
    fileMenu.add(newMenuItem);
    fileMenu.add(openMenuItem);
    fileMenu.add(saveMenuItem);
    fileMenu.add(saveAsMenuItem);    
    fileMenu.add(exitMenuItem);
    fileMenu.add(goodsStyle);
    fileMenu.add(extraSetting);
    
    configMenu.add(backgroudMusicMenu);
    configMenu.add(backColorMenu);
    
    //下拉菜单1(JPanel)
    
     
     JCB.setMaximumRowCount(3);
     JCB.addItemListener(this);
     
     JCB.setLayout(null);
     JCB.setBounds(22,50,200,20);
     
     panel.add(JCB);
     
    //文本框1
     jl2.setLayout(null);
     jl2.setBounds(260,10,53,43);
     panel.add(jl2);
     
     jf1.setLayout(null);
     jf1.setBounds(260,50,370,22);
     panel.add(jf1);
     
     //下拉菜单3
     
     jl3.setLayout(null);
     jl3.setBounds(22,80,53,22);
     panel.add(jl3);
     
     JCB2.setMaximumRowCount(3);
     JCB2.addItemListener(this);
     JCB2.setLayout(null);
     JCB2.setBounds(22,110,198,20);
     panel.add(JCB2);
     
     //文本框2
     
     jl4.setLayout(null);
     jl4.setBounds(260,70,50,50);
     panel.add(jl4);
     
     jtf2.setLayout(null);
     jtf2.setBounds(260,110,140,20);
     panel.add(jtf2);
     
     //文本框3
     jl5.setLayout(null);
     jl5.setBounds(445,70,70,50);
     panel.add(jl5);
     
     jtf3.setLayout(null);
     jtf3.setBounds(445,110,185,20);
     panel.add(jtf3);
     
     //第一个JPanel的右边2个按钮
     jb1.setLayout(null);
     jb1.setBounds(650,70,130,30);
     panel.add(jb1);
     
     
     
     
     
     this.setResizable(false);
     this.setVisible(true);
  
 }

//单例模式代码
public static ColorTest getInstance(String name) {
         if(name == null) {
            name = ColorTest.class.getName();
            System.out.println("name == null"+"--->name="+name);
         }
        if(map.get(name) == null) {
           try {
                 map.put(name, (ColorTest) Class.forName(name).newInstance());
           } catch (InstantiationException e) {
                 e.printStackTrace();
            } catch (IllegalAccessException e) {
                 e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
       return map.get(name);
    }

@Override
public void itemStateChanged(ItemEvent e) {
    // TODO Auto-generated method stub
    
}

}