如何在Intellij IDEA中使用.form创建Java单例?

时间:2014-01-17 15:22:35

标签: java intellij-idea singleton

问题是要使用在IntellijIDEA中绑定到.form的Java类制作单例。

SSCCE: 我们需要使用IDEA工具“UI Designer”创建一个swing GUI,并使其成为Singleton。

我们已经有一个绑定到ServerFace.java类的ServerFace.form 我们还有一个类Index.java,它首次初始化ServerFace。

请参阅下面两个类的代码(ServerFace.form中没有代码):

ServerFace.java(绑定到ServerFace.form的类):

import javax.swing.*;
public class ServerFace {
    private JPanel panel1;
    private JButton startServerButton;
    private JButton stopServerButton;
    private JButton clearLogButton;
    private JTextArea textArea1;

//Make it Singleton--------------------------------------
    private static volatile ServerFace instance;

    public static ServerFace getInstance(){

        if (instance==null){
            synchronized (ServerFace.class){
                if(instance==null){
                    try{
                        instance=new ServerFace();
                    }catch (Exception e){
                        System.out.println("failed to create UI: "+e+"  |  "+e.getMessage());
                    }
                }
            }
        }
        return  instance;
    }

    private ServerFace() throws Exception{

    }
    private void createUIComponents() {
        // TODO: place custom component creation code here
    }
}

Index.java(获取ServerFace.java实例的类):

import javax.swing.*;

public class Index{

    private static ServerFace _gui;

    public static void main(String[] args){
        _gui = ServerFace.getInstance();
    }
}

当我尝试编译时会抛出异常 “无法创建UI:java.lang.NullPointerException | null”

我做错了什么以及如何做到对不对?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。问题是我的一个组件(panel1)有“自定义创建”标志,但我没有在createUIComponents()中提供任何代码。当标志被移除时,它开始起作用。

PS:感谢IDEA社区的Dmitry Jemerov。