Solved

getConstructor in JAVA

Posted on 2013-01-15
16
502 Views
Last Modified: 2013-01-15
Dear Experts,
I have a JDialog and want to call the JDialog using getConstructor. I am unable to pass String array to the constructor and system is giving error like
"java.lang.NoSuchMethodException: guestName.<init>(java.lang.Integer, java.lang.String, boolean, java.awt.Frame)
      at java.lang.Class.getConstructor0"
I want to pass Integer,String Array, Boolean and Frame. I do require your help know what I should class should I declare to pass an array of String[][]. The sintex which I used is as under

String guestName2[][] = {{"A","0","B"},{"C","1","D"}}; //,{"E","2","F"},{"G","3","H"}};
int gc = Integer.parseInt(Guest_text.getText());
String retv = "guestName";
try {
Class cl = Class.forName(retv);
Constructor constructor =  cl.getConstructor(new Class[] {Integer.class, String.class, boolean.class, Frame.class});
Object invoker = constructor.newInstance(new Object[]{gc, guestName2, true, (new javax.swing.JFrame())});
}

guestName2 is an two dimensional array.


Regards
0
Comment
Question by:MILIND_JOG
  • 7
  • 6
  • 3
16 Comments
 
LVL 16

Expert Comment

by:Valeri
ID: 38778030
try this:

public class GuestName extends JDialog {
    private Integer yourInt;
    private String[][] yourArray;

    public GuestName(Integer yourInt, String[][] yourArray, Frame owner, boolean modal) throws HeadlessException {
        super(owner, modal);
        this.yourInt = yourInt;
        this.yourArray = yourArray;
    }
}
0
 

Author Comment

by:MILIND_JOG
ID: 38778217
Dear Valery,

Thanks for fast response.

I have two seperate JDialog
1> newGuest and 2> guestName

I want to call guestName from newGuest

guestName constructor is having 4 arguments
          public guestName(int gn,String guestName1[][], boolean modal, java.awt.Frame parent)

From newGest, I am calling guestName as below

String guestName2[][] = {{"A","0","B"},{"C","1","D"}}; //,{"E","2","F"},{"G","3","H"}};
int gc = Integer.parseInt(Guest_text.getText());
String retv = "guestName";
try {
Class cl = Class.forName(retv);
Constructor constructor =  cl.getConstructor(new Class[] {Integer.class, String.class, boolean.class, Frame.class});
Object invoker = constructor.newInstance(new Object[]{gc, guestName2, true, (new javax.swing.JFrame())});
}

I am getting error as
java.lang.NoSuchMethodException: guestName.<init>(java.lang.Integer, [[Ljava.lang.String;, boolean, java.awt.Frame)
      at java.lang.Class.getConstructor0(Class.java:2706)

Please give your inputs.
Regards
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 38778230
I have a JDialog and want to call the JDialog using getConstructor.
Why? Why are you using reflection?
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:MILIND_JOG
ID: 38778266
Dear CEHJ,

Please suggest the alternate.

Regards
0
 

Author Comment

by:MILIND_JOG
ID: 38778284
Dear CEHJ,
I want to instanciate the second JDialog after some inputs in first JDialog and values need to pass from one to other.

Regards
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 38778290
Please suggest the alternate.
I can't really, since you don't give your GOAL
Gernerally speaking, reflection should only be used for very specialized purposes
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 38778299
I want to instanciate the second JDialog after some inputs in first JDialog and values need to pass from one to other.
Then all you need to do is to provide a constructor in your JDialog subclass that accepts the required parameters.
0
 

Author Comment

by:MILIND_JOG
ID: 38778313
Dear CEHJ,
I tried for the same but I am getting error.

java.lang.NoSuchMethodException: guestName.<init>(java.lang.Integer, [[Ljava.lang.String;, boolean, java.awt.Frame)
      at java.lang.Class.getConstructor0(Class.java:2706)

I have passed exectlty the same which is required in second JDialog.

Regards
0
 

Author Comment

by:MILIND_JOG
ID: 38778319
Deear CHEJ,
I am suspecting error due to [[Ljava.lang.String

Regards
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 38778344
What you should be doing is something like this:

MySecondDialog d = new MySecondDialog(someStringArray, true, someFrame);

Open in new window

0
 

Author Comment

by:MILIND_JOG
ID: 38778359
Ok CHEJ,

Let me try and will come back to you.

Regards
0
 
LVL 86

Accepted Solution

by:
CEHJ earned 500 total points
ID: 38778363
(Obviously you will need to create a JDialog subclass to do that)
0
 

Author Closing Comment

by:MILIND_JOG
ID: 38778414
Issue closed and supported well.

Regards.
0
 
LVL 16

Expert Comment

by:Valeri
ID: 38778425
Hei Milind,
CEHJ is right, don't use reflection! Use the classes in this way (I created some for you)

import javax.swing.*;

public class JFrameTester {

      public static void main(String[] args) {
        JFrame f = new JFrame("your JFrame");
        f.setSize(400, 400);
        f.setLocation(300,200);
        f.setVisible(true);

        String guestName2[][] = {{"A","0","B"},{"C","1","D"}}; //,{"E","2","F"},{"G","3","H"}};

        NewGuest newGuest = new NewGuest(f, false, 5, guestName2);
        newGuest.setSize(250, 250);
        newGuest.setVisible(true);

        newGuest.showGuestNname();  

      }
}

=============================================================

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

public class NewGuest extends JDialog {
    private Integer yourInt;
    private String[][] guestName2;
    private Frame owner;

    public NewGuest(Frame owner, boolean modal, Integer yourInt, String[][] guestName2) throws HeadlessException {
        super(owner, modal);
        this.owner = owner;
        this.yourInt = yourInt;
        this.guestName2 = guestName2;
    }

    public void showGuestNname() {
        GuestName guestName = new GuestName(owner, false, 5, guestName2);
        guestName.setSize(150, 150);
        guestName.setVisible(true);
    }
}

=======================================================

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

public class GuestName extends JDialog {
    private Integer yourInt;
    private String[][] guestName2;

    public GuestName(Frame owner, boolean modal, Integer yourInt, String[][] guestName2) throws HeadlessException {
        super(owner, modal);
        this.yourInt = yourInt;
        this.guestName2 = guestName2;
    }
}

then start the first class! forget about reflection, it's for other purposes.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 38778436
:)
0
 
LVL 16

Expert Comment

by:Valeri
ID: 38778456
CEHJ was faster than me ;-)
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Introduction This article is the first of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article explains our test automation goals. Then rationale is given for the tools we use to a…
Viewers will learn about if statements in Java and their use The if statement: The condition required to create an if statement: Variations of if statements: An example using if statements:
The viewer will learn how to implement Singleton Design Pattern in Java.

756 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question