问题是要使用在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”
我做错了什么以及如何做到对不对?
答案 0 :(得分:0)
我终于找到了解决方案。问题是我的一个组件(panel1)有“自定义创建”标志,但我没有在createUIComponents()中提供任何代码。当标志被移除时,它开始起作用。
PS:感谢IDEA社区的Dmitry Jemerov。