raphaelbgr
raphaelbgr

Reputation: 177

Singleton going into an infinite loop

I'm using the singleton pattern to build a class, however it does receive another singleton as parameter, it isn't working, is that really possible?

This is the entire project: https://github.com/raphaelbgr/SwingSocketClient/tree/master/src

package clientmain;

import gui.janelas.JanelaMain;

public class ClientMain {

    public static int port              = 0;

    public static Thread receiver           = null;

    public static String ip                 = null;     
    public static String your_name      = null;     

    public static void main(String[] args) {    
        JanelaMain jam = JanelaMain.getInstance(); //JanelaMain extends JFrame
        jam.setLocationByPlatform(false);
    }

This is it's singleton block.

//SINGLETON PATTERN BLOCK
private static JanelaMain jam;
public static JanelaMain getInstance() {
    if (JanelaMain.jam == null) {
        jam = new JanelaMain(JanelaSelectServer.getInstance()); //Another one passed by parameter
    }
    return jam;
}

The other class Singleton block:

//SINGLETON PATTERN BLOCK
private JanelaSelectServer() {} //JanelaSelectServer extends another JFrame
private static JanelaSelectServer jsv;
public static JanelaSelectServer getInstance() {
    if (jsv == null) {
        jsv = new JanelaSelectServer();
    } 
    return jsv;
}

Shit happening (A Loop)

s.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)
at gui.janelas.JanelaMain.getInstance(JanelaMain.java:144)
at gui.updatelogs.ConnectionLog.<init>(ConnectionLog.java:13)
at gui.updatelogs.ConnectionLog.getInstance(ConnectionLog.java:34)
at gui.janelas.JanelaMain.<init>(JanelaMain.java:37)

Thanks.

Upvotes: 0

Views: 671

Answers (2)

pDer666
pDer666

Reputation: 727

Your code looks a bit strange, why giving a singelton to another? You can use the singelton class at the point where you need it and there is no need to give it to another class.

Upvotes: 3

cool
cool

Reputation: 1786

The problem is not about those classes but about ConnectionLog class. You are trying to create an instance in JanelaMain and ConnectionLog tries to creates an instance of JanelaMain.

@SuppressWarnings("serial")
public class JanelaMain extends JFrame {

private FlowLayout layout                           = new FlowLayout();
private JTextField jtxt_send                        = null;

//CUSTOM SWING COMPONENTS
private ConnectionLog cn_log                = ConnectionLog.getInstance();
private TextLog msg_list                    = TextLog.getInstance();


@SuppressWarnings("serial")
public class ConnectionLog extends JTextField {

private JanelaMain jam = JanelaMain.getInstance();

Upvotes: 2

Related Questions