ResultSet: SQLException when send to another class

Hi everyone,
This simplified version of my code compiles but I get "SQLException: Invalid Descriptor Index" in setData() at runtime. I still get the same problem when I put ClassA and ClassB in the same package.
rsResult has valid data in ClassA but rsResult in setData() seems to have no data at all. Any help on this would be greatly appreciated. - Howard
package com.PK;
public class ClassA
funtion MyFunc()
       Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            err = err + " Loaded sun.jdbc.odbc.JdbcOdbcDriver ";       
        //verify driver is valid
        if (DriverManager.getDriver("jdbc:odbc:History").jdbcCompliant())
                con = DriverManager.getConnection("jdbc:odbc:History");                   
                String strSql = "{call sproc_getData()}";
                cs = con.prepareCall(strSql);
.prepareCall(strSql);               
                 cs.execute();               
                 rsResult= cs.getResultSet();
                 ClassB cB = new ClassB();
                 while(rsResult.next())
                  System.out.println("before send" + rsResult.getString("Symbol")); // good data
                   cB.setData(rsResult);
package com.PK.History; //error
//package com.PK; //also error
ClassB
   public void setData(ResultSet rsResult)
            System.out.println("setData:in" + rsResult.getString(1)); // error
            //System.out.println("setData:in" + rsResult.getString("Symbol")); //also error.
}

I did read the columns in sequence. Also, I did not
close the statement or connection.Not in the code you posted, you didn't. You called rs.getString("Symbol") and then rs.getString(1). That can't be "in sequence".
After more testing, it turned out that this code
works if I use ClassB directly. (Abtract Factory
pattern) I was using ClassB's Factory interface class.This suggests to me that your code is a mess. If changes like that break your JDBC code then you need to clean it up. In general if you find yourself passing ResultSets as parameters to methods in other classes, that's a symptom that your JDBC code is all over the place.

Similar Messages

  • Repaint not running properly when called in another class/actionlistener

    I've got this code that is suppose to call and create a JPanel
    (The frame and timeframe variables were declared statically at the beginning of the class)
    When I call the runGame1 method from the main, the code runs fine and my JPanel is being repainted with the time and pictures, but when I can this runGame1 method from an ActionListener/actionPerformed method, it doesn't repaint properly and the while loop is running properly but I think there isn't enough resources for the method to actually paint my JFrame?? The JFrames open but nothing is painted.
    Anyone know what I can do?
    More Info........................
    Basically my program contains a title JFrame and 2 game JFrames, I want to be able to call the game JFrames from the title JFrames and go back and forth from the JPanels.
    The title JFrame consists of just components such as JLabels and JButtons.
    One of the game JFrames consists of JLabels, JTextFields and JButtons, basically the method generates random numbers and an arithmetic operation that the user has to calculate and enter in the program and the program checks if its correct or not.
    One of the game JFrames consist of a paint method that paints circles and the user has to click on it and when a circle is clicked on, it is repainted to not show the circle.(a coordinate system is used etc etc)
    public static void runGame1(){
              k=20;
              kcolor=2;
              fillcolor();
              checkcolor();
              frame = new Circlepix();
              timeframe = new TimerPanel();
              time1 = System.currentTimeMillis();     
              //Repaints the count down
              while((60-seconds)>0){
                   try{
                        Thread.sleep(1000);
                   catch(InterruptedException e){
                   timeframe.repaint();
                   System.out.println("aaa");
              timeframe.dispose();
    public void actionPerformed(ActionEvent e) {
                   if (e.getActionCommand().equals("Reset Scores"))
                        game1score=0;
                        game2score=0;
                   else if(e.getActionCommand().equals("Speed Circles")){
                   mainframe.dispose();
                   runGame1();
              }

    main is running in a different thread (the main thread)
    action events are sent via the event dispatch thread, and painting is done on the event dispatch thread.
    You should always be calling your runGame1 method from a separate thread of your own, so you don't block the event dispatch thread and painting
    http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html
    Edited by: bsampieri on Jun 5, 2008 4:50 PM

  • Picture "mms" email sent multiple times when sending to another phone

    I sent a picture using gmail to a friend's cell phone (Verizon) to [email protected] so they can get is as an MMS text. They received the message, but about a day or two later they received the message again about 15 times. I went into my sent folder and deleted the message and that seemed to stop it from being sent. This has happened multiple times. Anyone know why it would be doing this? Hopefully MMS will be added in a future update it would make it so much easier to send and receive pics.

    Not sure why and although I've done this only a few times, I have not experienced the same but I haven't used a Gmail account for this. Do you access another email account on your iPhone besides your Gmail account? If so, try using another account for sending all MMS via email to see if the same occurs.

  • When sending an email using outlook can you attach another email?

    When sending a new email using outlook, is it possible to attach another email?

    What does that have to do with iPhones?

  • When sending a text to another iphone it sends it twice and the reply comes delayed, sometimes hours later. How can I fix this?

    When sending a text to another iphone it sends it twice and the reply comes delayed, sometimes hours later. How can I fix this?

    That usually means that the recipient is in a bad wifi or cellular data signal area.

  • Can't add list element when calling a method from another class

    I am trying to call a method in another class, which contains code listmodel.addElement("text"); to add an element into a list component made in that class.
    I've put in System.out.println("passed"); in the method just to make sure if the method was being called properly and it displays normally.
    I can change variables in the other class by calling the method with no problem. The only thing I can't do is get listmodel.addElement("text"); to add a new element in the list component by doing it this way.
    I've called that method within it's class and it added the element with no problem. Does Java have limitations about what kind of code it can run from other classes? And if that's the case I'd really like to know just why.

    There were no errors, just the element doesnt get added to the list by doing it this way
    class showpanel extends JPanel implements ActionListener, MouseMotionListener {
           framepanel fp = new framepanel();
           --omitted--
         public void actionPerformed(ActionEvent e){
                  if(e.getSource() == button1){
                       fp.addLayer();
    /*is in a different class file*/
    class framepanel extends JPanel implements ActionListener{
            --omitted--
         public void addLayer(){
              listmodel.addElement("Layer"+numLayer);
              numLayer++;
    }

  • I want to bcc myself when sending mail from one account but not another. When I check "automatically bcc myself", it bcc's me from both accounts.  Can I set this to work with only one account?

    I have two mail accounts on my Mac.  I want one account to bcc me when I send emails from that account.  I checked "automatically bcc myself" under mail>preferences>composing, but both accounts bcc me when sending mail.  Can I set this to only bcc myself from one specific email account? Thanks.

    It does not make sense that your ssh does not have a dash capital Y (-Y) option. It is in "man ssh", and my 10.6.6 has the -Y option, and I've had a -Y option since at least Tiger (10.4) days.
    My ssh is in /usr/bin/ssh
    I'm not very good at X11 issues, so I'm just throwing ideas out there.
    Does your broken account have a $HOME/.ssh/config file, and if so, what is in it?
    Does the broken account have any $HOME/.x* or $HOME/.X* files that X11 might be reading to configure your X11 behavior differently from the new test account?
    $HOME/.Xauthority
    $HOME/.Xdefaults-<hostname>
    $HOME/.Xresources
    $HOME/.ICEauthority
    $HOME/.keymap.km
    The above are a few names I found looking through "man X"
    While I'm thinking about it, I assume that when going to the server, you are using the exact same user account on the server, so that you have a constant at least at that end.
    Have you tried trashing your
    $HOME/Library/Preferences/org.x.X11.plist
    file, to see if that is affecting the broken account?
    Again, I am just throwing out ideas to see if anything sticks.

  • Adding a MeshView as part of another class not working when returned?

    I have a class that extends box, to get the properties to display it as a box, or else have the option to display it as a 3D image/Mesh.
    I have this code
    public class Face extends Box
            private MeshView image3D;
            public Face(TriangleMesh mesh)
                this.image3D = new MeshView(mesh);
        public TriangleMesh getImage3D()
            return (TriangleMesh) image3D.getMesh();
    public MeshView getImage3DView()
            return image3D;
        public void setImage3D(TriangleMesh mesh)
            this.image3D = new MeshView(mesh);
    Granted there are many more methods and variables I just wanted to show what I needed. Basically I have a 3D importer class, which I'll post in a second, which imports the data for the mesh. From there I return the TriangleMesh and then set it to a MeshViewer that is setup currently as a constructor call in the Face class, and then I set it to a group using the getter method.
      Face d = new Face(i.stlImporter("CylinderHead-binary.stl"));
    d.setMaterial(gray);
    d.setLayoutX(200);
    d.setLayoutY(200);
    Group s1 = new Group (d.getImage3DView());and finally
    public class importer
        TriangleMesh mesh = new TriangleMesh();
       public TriangleMesh stlImporter(String s)
            StlMeshImporter stl = new StlMeshImporter();
            // Generated vertex normals result in a smoothly shaded surface
            stl.setCreaseAngle(24); 
            try
                URL cylinderHeadUrl = this.getClass().getResource(s);
                stl.read(cylinderHeadUrl);
            catch (ImportException e) {
                e.printStackTrace();
            // STL includes only geometry data
            mesh = stl.getImport();
            stl.close();
            return mesh;
       public TriangleMesh getStlImport()
           return mesh;
    }However if I change all of the face code into MeshView it will work. So basically it seems that something is up with MeshView being used in Face.
    Edited by: KonradZuse on Apr 5, 2013 8:22 PM

    Well basically I wanted to have a class that was originally a box, but then would have a 3D image. The converter that came out a week or so ago imports it as a Mesh, so I wanted to be able to have it return a mesh if it's a 3D object.
    I was just confused how it would all work. To make a box, I assumed I had to extend the box, and great it based on that, or shape. Maybe it would just be easier to save the TriangleMesh, then load it into a MeshViewer in another class. I figured I could just make a viewer in the class and just add that viewer, but maybe that's not a good idea.
    Now I realize that I can just make everything a 3D mesh, box included, so I can just make it a viewer with additional properties like my box was supposed to be, or maybe just the mesh itself, then add it to a viewer later, thoughts?
    I'd appreciate any insight on the class structure that I'm confused about, thanks!~!!
    ~KZ

  • Setting up new email and there's nothing in inbox when I send from another account

    I created a new email address but messages I'm sending from another account aren't showing up in the inbox? It's got the little triangle with an exclamation point in it?

    Troubleshooting Apple Mail
    What does Mail/Window/Connection Doctor Show? If the server is red, select it and look at the Show Details box.
    Troubleshooting sending and receiving email messages

  • Calling a class's method from another class

    Hi, i would like to know if it's possible to call a Class's method and get it's return from another Class. This first Class doesn't extend the second. I've got a Choice on this first class and depending on what is selected, i want to draw a image on the second class witch is a Panel extended. I put the control "if" on the paint() method of the second class witch is called from the first by the repaint() (first_class.repaint()) on itemStateChanged(). Thankx 4 your help. I'm stuck with this.This program is for my postgraduation final project and i'm very late....

    import java.awt.*;
    import java.sql.*;
    * This type was generated by a SmartGuide.
    class Test extends Frame {
         private java.awt.Panel ivjComboPane = null;
         private java.awt.Panel ivjContentsPane = null;
         IvjEventHandler ivjEventHandler = new IvjEventHandler();
         private Combobox ivjCombobox1 = null;
    class IvjEventHandler implements java.awt.event.WindowListener {
              public void windowActivated(java.awt.event.WindowEvent e) {};
              public void windowClosed(java.awt.event.WindowEvent e) {};
              public void windowClosing(java.awt.event.WindowEvent e) {
                   if (e.getSource() == Test.this)
                        connEtoC1(e);
              public void windowDeactivated(java.awt.event.WindowEvent e) {};
              public void windowDeiconified(java.awt.event.WindowEvent e) {};
              public void windowIconified(java.awt.event.WindowEvent e) {};
              public void windowOpened(java.awt.event.WindowEvent e) {};
         private Panel ivjPanel1 = null;
    * Combo constructor comment.
    public Test() {
         super();
         initialize();
    * Combo constructor comment.
    * @param title java.lang.String
    public Test(String title) {
         super(title);
    * Insert the method's description here.
    * Creation date: (11/16/2001 7:48:51 PM)
    * @param s java.lang.String
    public void conexao(String s) {
         try {
              Class.forName("oracle.jdbc.driver.OracleDriver");
              String url = "jdbc:oracle:thin:system/[email protected]:1521:puc";
              Connection db = DriverManager.getConnection(url);
              //String sql_str = "SELECT * FROM referencia";
              Statement sq_stmt = db.createStatement();
              ResultSet rs = sq_stmt.executeQuery(s);
              ivjCombobox1.addItem("");
              while (rs.next()) {
                   String dt = rs.getString(1);
                   ivjCombobox1.addItem(dt);
              db.close();
         } catch (SQLException e) {
              System.out.println("Erro sql" + e);
         } catch (ClassNotFoundException cnf) {
    * connEtoC1: (Combo.window.windowClosing(java.awt.event.WindowEvent) --> Combo.dispose()V)
    * @param arg1 java.awt.event.WindowEvent
    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    private void connEtoC1(java.awt.event.WindowEvent arg1) {
         try {
              // user code begin {1}
              // user code end
              this.dispose();
              // user code begin {2}
              // user code end
         } catch (java.lang.Throwable ivjExc) {
              // user code begin {3}
              // user code end
              handleException(ivjExc);
    * Return the Combobox1 property value.
    * @return Combobox
    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    private Combobox getCombobox1() {
         if (ivjCombobox1 == null) {
              try {
                   ivjCombobox1 = new Combobox();
                   ivjCombobox1.setName("Combobox1");
                   ivjCombobox1.setLocation(30, 30);
                   // user code begin {1}
                   this.conexao("select * from referencia");
                   // user code end
              } catch (java.lang.Throwable ivjExc) {
                   // user code begin {2}
                   // user code end
                   handleException(ivjExc);
         return ivjCombobox1;
    * Return the ComboPane property value.
    * @return java.awt.Panel
    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    private java.awt.Panel getComboPane() {
         if (ivjComboPane == null) {
              try {
                   ivjComboPane = new java.awt.Panel();
                   ivjComboPane.setName("ComboPane");
                   ivjComboPane.setLayout(null);
                   getComboPane().add(getCombobox1(), getCombobox1().getName());
                   getComboPane().add(getPanel1(), getPanel1().getName());
                   // user code begin {1}
                   // user code end
              } catch (java.lang.Throwable ivjExc) {
                   // user code begin {2}
                   // user code end
                   handleException(ivjExc);
         return ivjComboPane;
    * Return the ContentsPane property value.
    * @return java.awt.Panel
    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    private java.awt.Panel getContentsPane() {
         if (ivjContentsPane == null) {
              try {
                   ivjContentsPane = new java.awt.Panel();
                   ivjContentsPane.setName("ContentsPane");
                   ivjContentsPane.setLayout(new java.awt.BorderLayout());
                   getContentsPane().add(getComboPane(), "Center");
                   // user code begin {1}
                   // user code end
              } catch (java.lang.Throwable ivjExc) {
                   // user code begin {2}
                   // user code end
                   handleException(ivjExc);
         return ivjContentsPane;
    * Return the Panel1 property value.
    * @return Panel
    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    private Panel getPanel1() {
         if (ivjPanel1 == null) {
              try {
                   ivjPanel1 = new Panel();
                   ivjPanel1.setName("Panel1");
                   ivjPanel1.setBackground(java.awt.SystemColor.scrollbar);
                   ivjPanel1.setBounds(24, 118, 244, 154);
                   // user code begin {1}
                   // user code end
              } catch (java.lang.Throwable ivjExc) {
                   // user code begin {2}
                   // user code end
                   handleException(ivjExc);
         return ivjPanel1;
    * Called whenever the part throws an exception.
    * @param exception java.lang.Throwable
    private void handleException(java.lang.Throwable exception) {
         /* Uncomment the following lines to print uncaught exceptions to stdout */
         // System.out.println("--------- UNCAUGHT EXCEPTION ---------");
         // exception.printStackTrace(System.out);
    * Initializes connections
    * @exception java.lang.Exception The exception description.
    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    private void initConnections() throws java.lang.Exception {
         // user code begin {1}
         // user code end
         this.addWindowListener(ivjEventHandler);
    * Initialize the class.
    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    private void initialize() {
         try {
              // user code begin {1}
              // user code end
              setName("Combo");
              setLayout(new java.awt.BorderLayout());
              setSize(460, 300);
              setTitle("Combo");
              add(getContentsPane(), "Center");
              initConnections();
         } catch (java.lang.Throwable ivjExc) {
              handleException(ivjExc);
         // user code begin {2}
         // user code end
    * Insert the method's description here.
    * Creation date: (11/17/2001 2:02:58 PM)
    * @return java.lang.String
    public String readCombo() {
         String dado = ivjCombobox1.getSelectedItem();
         return dado;
    * Starts the application.
    * @param args an array of command-line arguments
    public static void main(java.lang.String[] args) {
         try {
              /* Create the frame */
              Test aTest = new Test();
              /* Add a windowListener for the windowClosedEvent */
              aTest.addWindowListener(new java.awt.event.WindowAdapter() {
                   public void windowClosed(java.awt.event.WindowEvent e) {
                        System.exit(0);
              aTest.setVisible(true);
         } catch (Throwable exception) {
              System.err.println("Exception occurred in main() of Test");
              exception.printStackTrace(System.out);
    * Insert the type's description here.
    * Creation date: (11/17/2001 1:59:15 PM)
    * @author:
    class Combobox extends java.awt.Choice {
         public java.lang.String dado;
    * Combobox constructor comment.
    public Combobox() {
         super();
         initialize();
    * Called whenever the part throws an exception.
    * @param exception java.lang.Throwable
    private void handleException(java.lang.Throwable exception) {
         /* Uncomment the following lines to print uncaught exceptions to stdout */
         // System.out.println("--------- UNCAUGHT EXCEPTION ---------");
         // exception.printStackTrace(System.out);
    * Initialize the class.
    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    private void initialize() {
         try {
              // user code begin {1}
              // user code end
              setName("Combobox");
              setSize(133, 23);
         } catch (java.lang.Throwable ivjExc) {
              handleException(ivjExc);
         // user code begin {2}
         // user code end
    * main entrypoint - starts the part when it is run as an application
    * @param args java.lang.String[]
    public static void main(java.lang.String[] args) {
         try {
              java.awt.Frame frame = new java.awt.Frame();
              Combobox aCombobox;
              aCombobox = new Combobox();
              frame.add("Center", aCombobox);
              frame.setSize(aCombobox.getSize());
              frame.addWindowListener(new java.awt.event.WindowAdapter() {
                   public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
              frame.setVisible(true);
         } catch (Throwable exception) {
              System.err.println("Exception occurred in main() of Combobox");
              exception.printStackTrace(System.out);
    * Insert the type's description here.
    * Creation date: (11/17/2001 2:16:11 PM)
    * @author:
    class Panel extends java.awt.Panel {
    * Panel constructor comment.
    public Panel() {
         super();
         initialize();
    * Panel constructor comment.
    * @param layout java.awt.LayoutManager
    public Panel(java.awt.LayoutManager layout) {
         super(layout);
    * Called whenever the part throws an exception.
    * @param exception java.lang.Throwable
    private void handleException(java.lang.Throwable exception) {
         /* Uncomment the following lines to print uncaught exceptions to stdout */
         // System.out.println("--------- UNCAUGHT EXCEPTION ---------");
         // exception.printStackTrace(System.out);
    * Initialize the class.
    /* WARNING: THIS METHOD WILL BE REGENERATED. */
    private void initialize() {
         try {
              // user code begin {1}
              // user code end
              setName("Panel");
              setLayout(null);
              setSize(260, 127);
         } catch (java.lang.Throwable ivjExc) {
              handleException(ivjExc);
         // user code begin {2}
         // user code end
    * main entrypoint - starts the part when it is run as an application
    * @param args java.lang.String[]
    public static void main(java.lang.String[] args) {
         try {
              java.awt.Frame frame = new java.awt.Frame();
              Panel aPanel;
              aPanel = new Panel();
              frame.add("Center", aPanel);
              frame.setSize(aPanel.getSize());
              frame.addWindowListener(new java.awt.event.WindowAdapter() {
                   public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
              frame.setVisible(true);
         } catch (Throwable exception) {
              System.err.println("Exception occurred in main() of java.awt.Panel");
              exception.printStackTrace(System.out);
    * Insert the method's description here.
    * Creation date: (11/17/2001 2:18:36 PM)
    public void paint(Graphics g) {
    /* Here's the error:
    C:\Test.java:389: non-static method readCombo() cannot be referenced from a static context
         System.out.println(Test.lerCombo());*/
         System.out.println(Test.readCombo());

  • Easy question: Give access to a class in another class.

    Stupid title, but dont know how to express myself :P Sorry for that.
    To the problem. Never had this problem before, and I know its a really easy solution to this.
    I have my Main class, which creates a MyView class. Inside this class, I make to new classes(or instances of classes i've already made), MyPanel and MyToolsPanel. Now I want to add buttons inside the MyToolsPanel class, and add actionlisteners to these buttons inside MyPanel.
    What I'v always done to grant access to MyToolsPanel inside of MyTools, is to simply add a
    //this is the MyPanel class
    MyToolsPanel mtp;
    public void setMtp(MyToolsPanel mtp){
    this.mtp = mtp;
    }and then in the MyView class which create these to classes, I put a command: mp.setMtp(mtp);
    When I run this it doesnt work.. Why? Should be easy to solve, since it obviously is a stupid problem that I just dont see. :P Feeling kind of stupid to ask this question, but this is how it is...
    EDIT: I might have to implement actionListener inside the MyToolsPanel class?
    Edited by: Stianbl on Sep 28, 2008 4:59 PM

    one way:
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    * Subclasses JPanel, can send text out via the getText() method
    * can hook into button press via addActionListener
    * @author Pete
    public class PanelCommSender extends JPanel
      private JTextField sendingField = new JTextField(12);
      private JButton sendButton = new JButton("Send");
      public PanelCommSender()
        add(sendingField);
        add(sendButton);
      public void addActionListener(ActionListener al)
        // attach this listener to the button
        sendButton.addActionListener(al);
       * call this to get the text currently in the textfield
       * @return String text
      public String getText()
        return sendingField.getText();
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    * Subclasses JPanel, receives text from another class
    * @author Pete
    public class PanelCommReceiver extends JPanel
      private JTextField showResultsField = new JTextField(12);
      public PanelCommReceiver()
        showResultsField.setEditable(false);
        add(new JLabel("Results from other panel: "));
        add(showResultsField);
       * call this to set text of textField
       * @param text
      public void setText(String text)
        showResultsField.setText(text);
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JDialog;
    import javax.swing.JFrame;
    public class PanelCommControl
      private static void createAndShowUI()
        // create new instances of the receiving and sending panels:
        final PanelCommReceiver receivePanel = new PanelCommReceiver();
        final PanelCommSender sendPanel = new PanelCommSender();
        // let the communicate w/ each other
        sendPanel.addActionListener(new ActionListener()
          public void actionPerformed(ActionEvent e)
            receivePanel.setText(sendPanel.getText());
        // place the receiving JPanel into a JFrame
        JFrame frame = new JFrame("Receiving Panel");
        frame.getContentPane().add(receivePanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setPreferredSize(new Dimension(300, 300)); // make it bigger so it can be seen
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        // place the sending JPanel into a JDialog
        JDialog dialog = new JDialog(frame, "Sending Panel", false);
        dialog.getContentPane().add(sendPanel);
        dialog.pack();
        dialog.setLocationRelativeTo(null);
        dialog.setVisible(true);
      public static void main(String[] args)
        java.awt.EventQueue.invokeLater(new Runnable()
          public void run()
            // run the whole show in a thread-safe manner
            createAndShowUI();
    }

  • Stop a method from executing until another class does its bit

    Hi all,
    For my app I have a login screen where to get login success the user must first register. I therefore have two class LoginDialog and Register which is a dialog.
    In LoginDialog if the user clicks on Register it brings up a new instance of the Register dialog but continues to process the calling method (which happens to return to another class processing the login). What I require is that when I create a new Register object, the creating method does nothing until the Registration form is completed. I'm not at all au fait with threads so was wondering if there is an easy way to do it.
    I have thought of passing the LoginDialog as an argument in the Register constructor and having an empty while loop running in the invoking method (i.e. while (false) do nothing) and creating public access to that boolean variable so that at completion of the registration it sets the boolean variable to true in LoginDialog so it should break out of the while loop and continue. Is that a satisfactory way of pausing and restarting a method?
    Cheers,
    Chris

    Hi,
    I have a MainFrame class which calls processLogin which creates a new LoginDialog which houses the Register button. When I click on the register button it opens a new Registration screen but LoginDialog returns to MainFrame in the background and says that no user has logged in. What I require is that when the Register object is created after clicking the Register button that LoginDialog waits until the Registration is complete.
    Maybie the code will help (sorry if it is a bit lengthy).
    Snippet of LoginDialog
    public void actionPerformed(ActionEvent event)
            if(event.getSource() == ok) {
                 _username = user.getText();
                   _password = new String(password.getPassword());
                   _server = server.getText();
                   //ensure port number is an integer
                   try{
                        _port = Integer.parseInt(port.getText());
                   catch(NumberFormatException e){
                        JOptionPane.showMessageDialog(this,
                        "Please use an integer value only for the port number","Error",
                        JOptionPane.WARNING_MESSAGE);
                   //checks username and password length
                   if((_username.length()==0) || (_password.length() == 0)){
                        JOptionPane.showMessageDialog(this,
                             "Please enter a valid username and password","Error",
                                  JOptionPane.WARNING_MESSAGE);
                        return;
                   //checks server length
                   if(_server.length()== 0){
                        JOptionPane.showMessageDialog(this,
                             "Invalid server host","Error",
                                  JOptionPane.WARNING_MESSAGE);
                        return;
                   try{
                        db = new DatabaseConnection();
                        boolean exists = db.doesUserExist(_username, _password);
                        db.close();
                        if(exists){
                             //System.out.println("User exists on database");
                             this.dispose(); //get rid of login screen now user is confirmed
                        if(!exists){
                                  _username = null;
                                  _password = null;
                                  this.dispose();
                   catch(java.sql.SQLException e){
                        JOptionPane.showMessageDialog(this,
                             "Unable to connect to database. Please try again.","Error",
                                  JOptionPane.WARNING_MESSAGE);
              else if(event.getSource() == cancel) {
                   //NOTHING
              else if(event.getSource() == register){
                   Register register = new Register();
                   //while (processRegistration){
              this.setVisible(false);
         }and Register
    //import classes
    import java.io.*;
    import java.net.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.*;
    public class Register extends JFrame implements ActionListener {
         //declare components
         JLabel lblHeading;
         JLabel lblUserName;
         JLabel lblUserPwd;
         JLabel lblCnfUserPwd;
         JLabel lblFirstName;
         JLabel lblLastName;
         JLabel lblAge;
         JLabel lblEmpId;
         JLabel lblEmail;
         JLabel lblSex;
         String userName;
         char[] userPwd;
         char[] cnfPwd;
         String strUserPwd;
         String strCnfUserPwd;
         String firstName;
         String lastName;
         String age;
         String empid;
         String email;
         String sexStr;
         Socket toServer;
         ObjectInputStream streamFromServer;
         PrintStream streamToServer;
         JComboBox comboSex;
         JTextField txtUserName;
         JPasswordField txtUserPwd;
         JPasswordField txtCnfUserPwd;
         JTextField txtFirstName;
         JTextField txtLastName;
         JTextField txtAge;
         JTextField txtEmpId;
         JTextField txtEmail;
         Font f;
         Color r;
         JButton btnSubmit;
         JButton btnCancel;
         DatabaseConnection db;
         boolean exists, entrySuccess;
         public Register() {
              this.setTitle("Register");
            JPanel panel=new JPanel();
              //apply the layout
               panel.setLayout(new GridBagLayout());
               GridBagConstraints gbCons=new GridBagConstraints();
              //place the components
              gbCons.gridx=0;
              gbCons.gridy=0;
              lblHeading=new JLabel("Registration Info");
               Font f = new Font("Monospaced" , Font.BOLD , 12);
              lblHeading.setFont(f);
              Color c=new Color(0,200,0);
              lblHeading.setForeground(new Color(131,25,38));
              lblHeading.setVerticalAlignment(SwingConstants.TOP);
              gbCons.anchor=GridBagConstraints.EAST;
              panel.add(lblHeading, gbCons);
              gbCons.gridx = 0;
              gbCons.gridy = 1;
              lblUserName = new JLabel("Enter Username");
              gbCons.anchor=GridBagConstraints.WEST;
              panel.add(lblUserName, gbCons);
              gbCons.gridx=1;
              gbCons.gridy=1;
              txtUserName=new JTextField(15);
              panel.add(txtUserName, gbCons);
              gbCons.gridx=0;
              gbCons.gridy=2;
              lblUserPwd=new JLabel("Enter Password ");
              panel.add(lblUserPwd, gbCons);
              gbCons.gridx = 1;
              gbCons.gridy = 2;
              txtUserPwd = new JPasswordField(15);
              panel.add(txtUserPwd, gbCons);
              gbCons.gridx=0;
              gbCons.gridy=3;
              lblCnfUserPwd=new JLabel("Confirm Password ");
              panel.add(lblCnfUserPwd, gbCons);
              gbCons.gridx=1;
              gbCons.gridy=3;
              txtCnfUserPwd=new JPasswordField(15);
              panel.add(txtCnfUserPwd, gbCons);
              gbCons.gridx=0;
              gbCons.gridy=4;
              lblEmpId=new JLabel("Employee ID");
              panel.add(lblEmpId, gbCons);
              gbCons.gridx=1;
              gbCons.gridy=4;
              txtEmpId=new JTextField(15);
              panel.add(txtEmpId, gbCons);
              gbCons.gridx=0;
              gbCons.gridy=5;
              lblFirstName=new JLabel("First Name");
              panel.add(lblFirstName, gbCons);
              gbCons.gridx=1;
              gbCons.gridy=5;
              txtFirstName=new JTextField(15);
              panel.add(txtFirstName, gbCons);
              gbCons.gridx=0;
              gbCons.gridy=6;
              lblLastName=new JLabel("Last Name");
              panel.add(lblLastName, gbCons);
              gbCons.gridx = 1;
              gbCons.gridy = 6;
              txtLastName=new JTextField(15);
              panel.add(txtLastName, gbCons);
              gbCons.gridx=0;
              gbCons.gridy=7;
              lblAge=new JLabel("Age");
              panel.add(lblAge, gbCons);
              gbCons.gridx=1;
              gbCons.gridy=7;
              txtAge=new JTextField(3);
              panel.add(txtAge, gbCons);
              gbCons.gridx=0;
              gbCons.gridy=8;
              lblEmail=new JLabel("Email");
              panel.add(lblEmail, gbCons);
              gbCons.gridx=1;
              gbCons.gridy=8;
              txtEmail=new JTextField(20);
              panel.add(txtEmail, gbCons);
              gbCons.gridx=0;
              gbCons.gridy=9;
              lblSex=new JLabel("Sex");
              panel.add(lblSex, gbCons);
              gbCons.gridx = 1;
              gbCons.gridy=9;
              String [] sexArr = {"Male", "Female"};
              comboSex = new JComboBox(sexArr);
              comboSex.setSelectedIndex(0);
              panel.add(comboSex, gbCons);
              JPanel btnPanel=new JPanel();
              btnSubmit=new JButton("Submit");
              btnPanel.add(btnSubmit);
              btnSubmit.addActionListener(this); //add listener to the Submit button
              btnCancel=new JButton("Cancel");
              btnPanel.add(btnCancel);
              btnCancel.addActionListener(this); //add listener to the Cancel button
              gbCons.gridx=0;
              gbCons.gridy=10;
              gbCons.anchor=GridBagConstraints.EAST;
              panel.add(btnPanel, gbCons);
              getContentPane().add(panel);
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
              setVisible(true);
              setSize(450,400);
         }//end or Register()
         public void actionPerformed(ActionEvent ae) {
              Object o = ae.getSource(); //get the source of the event
              if(o == btnCancel)
                   this.dispose();
              if(o == btnSubmit){
                   userName = txtUserName.getText();
                   userPwd = txtUserPwd.getPassword();
                   strUserPwd = new String(userPwd);
                   cnfPwd = txtCnfUserPwd.getPassword();
                   strCnfUserPwd = new String(cnfPwd);
                   firstName = txtFirstName.getText();
                   lastName = txtLastName.getText();
                   age = txtAge.getText();
                   empid = txtEmpId.getText();
                   email = txtEmail.getText();
                   sexStr = (String)comboSex.getItemAt(0);
                   db = new DatabaseConnection();
                   //Now check to see if username and password combination have been
                   //taken
                   try{
                        exists = db.doesUserExist(userName.trim(), strUserPwd.trim());
                   catch (java.sql.SQLException e){
                        System.out.println(e);
                   //Checks that each field has been filled in.
                   if(userName.length() == 0 ||  strUserPwd.length() == 0 ||
                   strCnfUserPwd.length() == 0 || firstName.length() == 0 ||
                   lastName.length() == 0 || age.length() == 0 || empid.length() == 0
                   || email.length() == 0){
                        JOptionPane.showMessageDialog(this,
                        "One or more entry has not been filled in. Please go back and try again",
                        "Message", JOptionPane.ERROR_MESSAGE);     
                   //Ensures that passwords match
                   if(!strUserPwd.equals(strCnfUserPwd)){
                        JOptionPane.showMessageDialog(this,
                        "Passwords do not match. Please go back and try again",
                        "Message", JOptionPane.ERROR_MESSAGE);
                   if(exists){
                        JOptionPane.showMessageDialog(this,
                        "Username and password combination already exists. Please go back and try again",
                        "Message", JOptionPane.ERROR_MESSAGE);
                   if(!exists) {
                        String userDetails = (userName.trim() + " " + strUserPwd.trim()
                        + " "  + firstName.trim() + " "
                        + lastName.trim() + " " + age.trim() + " " + empid.trim() + " "
                        + email.trim() + " " + sexStr.trim());
                        //System.out.println(userDetails);
                        //Try to connect to the database and insert the user details.
                        //If successful then user will be alerted and the registration page
                        //should be disposed automatically. If for some reason the insert
                        //was not successful then user is prompted to try again.
                        try{
                             entrySuccess = db.registerUser(userDetails);
                             if(entrySuccess){
                                  JOptionPane.showMessageDialog(this,
                                  "Congratulations, you have successfully registered for the Instant Messenger service!",
                                  "Message", JOptionPane.INFORMATION_MESSAGE);
                                  this.dispose();     
                             if(!entrySuccess){
                                  JOptionPane.showMessageDialog(this,
                                  "There was a problem entering your details. Please try again.",
                                  "Message", JOptionPane.ERROR_MESSAGE);
                        catch(java.sql.SQLException e){
              }//end of else
              db.close();
         }//end of actionPerformed()
    }//end of classCheers,
    Chris

  • Calling a function in another class that is not the App delegate nor a sngl

    Hi all-
    OK- I have searched and read and searched, however I cannot figure out an easy way to call a function in another class if that class is not the app delegate (I have that down) nor a singleton (done that also- but too much code)
    If you use the method Rick posted:
    MainView *myMainView = [[MainView alloc] init];
    [MyMainView goTell];
    That works, however myMainView is a second instance of the class MainView- I want to talk to the instance/Class already instantiated.
    Is there a way to do that without making the class a singleton?
    Thanks!

    I had some trouble wrapping my head around this stuff at first too.
    I've gotten pretty good at letting my objects communicate with one another, however I don't think my method is the most efficient or organized way but I'll try to explain the basic idea.
    When you want a class to be able to talk to another class that's initialized elsewhere, the class your making should just have a pointer in it to the class you want to communicate with. Then at some point (during your init function for example) you should set the pointer to the class you're trying to message.
    for example in the app-delegate assume you have an instance of a MainView class
    and the app-delegate also makes an instance of a class called WorkClass
    If you want WorkClass to know about MainView just give it a pointer of MainView and set it when it's instantiated.
    So WorkClass might be defined something like this
    //WorkClass.h
    @import "MainView.h"
    @interface WorkClass : NSObject
    MainView *myPointerToTheMainView;
    @property (retain) myPointerToTheMainView;
    -(void)tellMainViewHello;
    @end
    //WorkClass.m
    @import "WorkClass.h"
    @implementation WorkClass
    @synthesize myPointerToTheMainView;//this makes getter and setter functions for
    //the pointer and allows us to use the dot
    //syntax to refrence it.
    -(void)tellMainViewHello
    [myPointerToTheMainView hello]; //sends a message to the main view
    //assume the class MainView has defined a
    //method -(void)hello
    @end
    now somewhere in the app delegate you would make the WorkClass instance and pass it a reference to the MainView class so that WorkClass would be able to call it's say hello method, and have the method go where you want (to the single instance of MainView owned by the app-delegate)
    ex:
    //somewhere in app-delegate's initialization
    //assume MainView *theMainView exists and is instantiated.
    WorkClass *myWorkClass = [[WorkClass alloc] init];
    myWorkClass.myPointerToTheMainView = theMainView; //now myWorkClass can speak with
    // the main view through it's
    // reference to it
    I hope that gets the basic idea across.
    I'm pretty new to Obj-c myself so if I made any mistakes or if anyone has a better way to go about this please feel free to add
    Message was edited by: kodafox

  • Passing a selected file in a GUI to another class

    Hi guys. I have a GUI set up so that when a file is selected in a directory and the user presses a play button in the GUI..it plays back the sound. (Java sound used.) However i want whatever file was selected to be passed to another class also.In other words..whatever the JFileChooser selects..i want that file info to be passed to another Java class in the package...can anyone help? cheers.

    No...whatever file is selected i just want that
    instance to be sent to another class.Yes it can be done.
    These are the steps.
    1.) Choose the file you want. Once you have chosen the file retrieve the absolute path of that file.
    2.)Call a method of the other class instance to which you want to send the file passing the file path as an argument.
    3.)In the other class retrieve the String path and then use it to create a file object to access it.
    //User chooses a file from file chooser and retrieves the path of that file and stores it in a variable String file_path;
    //Now let other_class_instance be the reference of the other class to which you want to send the files path and let that other class contain a method retrievePath(String path);
    other_class_instance(file_path);
    //The method definition in the other class
    public void retrievePath(String file_path)
            File file_reference=new File(file_path);
            //Now access the file using this file_reference
    }

  • Subject line 'space' character is lost when sending mail?

    Hi,
    I'm using JavaMail, and when sending a mail with a subject line that is longer than 62 characters, the last space before the 63rd character becomes a linefeed. This means that when the recipient receives the e-mail, the space in the subject line is actually dropped (becomes a linefeed).
    For example. I send an email with the following subject line: "New User Setup [ITNUS-0005] User Setup Progress Report for: Louise Gans".
    The recipient will receive the following subject: "New User Setup [ITNUS-0005] User Setup Progress Report for: LouiseGans".
    Note the missing space between "Louise Gans". Perhaps someone could test sending out that subject line, and see if they get the same problem?
    Looking at the message source on the recipient client, it shows a line feed / new line where that space is supposed to be.
    Using MS Outlook or GroupWise or another mail client, the subject lines gets sent through perfectly using the same mail server (Groupwise Internet Agent 7.0.3), but using JavaMail to send the mail through that mail server gives me the space problem.
    Can anybody shed some light on why this is happening? I would really appreciate the help.
    Here is an example of the code I am testing with:
    public class SendHtml {
         public static void main(String[] argv) {
              new SendHtml();
         public SendHtml() {
              String  to = "[email protected]";
              String subject = "New User Setup [ITNUS-0005] User Setup Progress Report for: Louise Gans";
              String from = "[email protected]";
              String cc = null;
              String bcc = null;
              String url = null;
              String mailhost = "mail.server.co.za";
              String mailer = "sendhtml";
              String protocol = null, host = null, user = null, password = null;
              String record = null;     // name of folder in which to record mail
              boolean debug = false;
              BufferedReader in =
                   new BufferedReader(new InputStreamReader(System.in));
              try {
                   Properties props = System.getProperties();
                   if (mailhost != null) {
                        props.put("mail.smtp.host", mailhost);
                   // Get a Session object
                   Session session = Session.getInstance(props, null);
                   // construct the message
                   Message msg = new MimeMessage(session);
                   if (from != null) {
                        msg.setFrom(new InternetAddress(from));
                   else {
                        msg.setFrom();
                   msg.setRecipients(Message.RecipientType.TO,
                             InternetAddress.parse(to, false));
                   if (cc != null)
                        msg.setRecipients(Message.RecipientType.CC,
                                  InternetAddress.parse(cc, false));
                   if (bcc != null)
                        msg.setRecipients(Message.RecipientType.BCC,
                                  InternetAddress.parse(bcc, false));
                   msg.setSubject(subject);
                   collect(in, msg);
                   msg.setHeader("X-Mailer", mailer);
                   msg.setSentDate(new Date());
                   // send the thing off
                   Transport.send(msg);
                   System.out.println("\nMail was sent successfully.");
                   // Keep a copy, if requested.
                   if (record != null) {
                        // Get a Store object
                        Store store = null;
                        if (url != null) {
                             URLName urln = new URLName(url);
                             store = session.getStore(urln);
                             store.connect();
                        } else {
                             if (protocol != null)          
                                  store = session.getStore(protocol);
                             else
                                  store = session.getStore();
                             // Connect
                             if (host != null || user != null || password != null)
                                  store.connect(host, user, password);
                             else
                                  store.connect();
                        // Get record Folder.  Create if it does not exist.
                        Folder folder = store.getFolder(record);
                        if (folder == null) {
                             System.err.println("Can't get record folder.");
                             System.exit(1);
                        if (!folder.exists())
                             folder.create(Folder.HOLDS_MESSAGES);
                        Message[] msgs = new Message[1];
                        msgs[0] = msg;
                        folder.appendMessages(msgs);
                        System.out.println("Mail was recorded successfully.");
              } catch (Exception e) {
                   e.printStackTrace();
         public void collect(BufferedReader in, Message msg)
         throws MessagingException, IOException {
              String line;
              String subject = msg.getSubject();
              StringBuffer sb = new StringBuffer();
              sb.append("<HTML>\n");
              sb.append("<HEAD>\n");
              sb.append("<TITLE>\n");
              sb.append(subject + "\n");
              sb.append("</TITLE>\n");
              sb.append("</HEAD>\n");
              sb.append("<BODY>\n");
              sb.append("<H1>" + subject + "</H1>" + "\n");
              sb.append("</BODY>\n");
              sb.append("</HTML>\n");
              msg.setDataHandler(new DataHandler(
                        new ByteArrayDataSource(sb.toString(), "text/html")));
    }

    The header is being "folded" as described in RFC 2822 section 2.2.3.
    The folding doesn't lose the space if unfolding is done properly.
    Perhaps the recipient mail program isn't handling unfolding properly?
    If so, please report the bug to the owner of that program.
    If you need to work around such a buggy program, you can set the
    System property "mail.mime.foldtext" to "false" to disable all folding
    in JavaMail.

Maybe you are looking for

  • Mail has died

    I was gone for a couple of days. Opened mail, read all the mail and when I tried to forward something I discover that I could not do anything but read and delete. No forward, reply or anything outgoing. I shut it down a couple of times thinking maybe

  • "Document couldn't be imported" error message trying to open doc from mail

    i can't open doc files neither pages files also it's not possible to open xls files in Numbers if i simply open docs through itunes or idisk then everything is fine but with mail i can't do anything about it (((

  • Bridge: Relevance of keywords for agencies - how can i upload in my relevance not in alphabetic orde

    Hello everybody, i get crazy. How can i maintain my order/relevance of my keywords when i make an upload to agencies? They all arrive in alphabetical order. I don't like that, smile. Hope so that somebody can help ... Thanks a lot!

  • Print head allignment error

    Printer is a 6500 E709N. I have followed all the steps on the troubleshooting webpage. I have installed a new printhead and new ink cartridges and I still get an error on print head allignment. Also Black does not print at all, mostly blue on testpag

  • Accessing iTune Library with Apple TV?

    have been successfully acessing my iTunes library on Apple TV. I recently added music from a recent CD purchase, and it does not show up when I use Apple TV. iTunes Match is on, as well as iTunes Home Sharing. When I update iTune Match I get a messag