JFrame öffnet 2tes JFrame, welches Daten vom 1sten braucht.

Status
Nicht offen für weitere Antworten.
L

Louis2

Gast
Hallo,

also ich habe 2 Frames, eins ruft das zweite auf und setzt es auf visible, das zweite Frame ruft aber Variablen vom ersten auf. Beim compilieren kommt dann eine Fehlermeldung weil beide Frames sich gegenseitig aufrufen und das geht wohl nicht. Wie kann ich es lösen?
Hinter dem ganzen steckt, dass ich erst ein Element der ComboBox auswähle und dann soll das zweite Frame erscheinen wo ich Sachen auswählen möchte.

Main Frame (EmailClient):
Code:
public class EmailClient extends JFrame implements WindowListener, ActionListener
{
    private JButton sendButton = new JButton("     Send Messages     ");
    private JButton cancelButton = new JButton("Cancel");
    private JLabel valueLabel = new JLabel("               Number of rows: ");
    private JProgressBar bar = new JProgressBar();
    private JLabel valueProg = new JLabel();
    FieldsSelection main2 = new FieldsSelection();
    .
    .
    try 
    { 
            Class.forName("oracle.jdbc.driver.OracleDriver"); 
            DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
            // OCI8-Treiber funktioniert
            //String url = "jdbc:oracle:oci8:@"+main.DBName;
            // Thin-Treiber funktioniert auch
            String url = "jdbc:oracle:thin:@"+main.DBServer+":1521:"+main.DBName; 
            connection = DriverManager.getConnection(url, main.DBUser, main.DBPassword);
    }
    catch(ClassNotFoundException e1) 
    { 
            JOptionPane.showMessageDialog(null, "The required connection class (Java-DB) was not found"); 
    }
    . 
    main2.setVisible(true);
    .

ruft (FieldsSelection):
Code:
public class FieldsSelection extends JFrame 
{
      EmailClient main3 = new EmailClient();
      JTable table;
      String comboinhalt[];
      boolean isselected;
      
      public FieldsSelection()
      {
          super("Java bulk-email (Fields Selection)");
          
          Container contentPane = this.getContentPane();
          contentPane.setLayout(new BorderLayout());
          
          String[] title = new String[]
          { 
            "Fields", "Selection" 
          }; 
          final DefaultTableModel model = new DefaultTableModel (title,0); 
          table = new JTable(model);
          getContentPane().add(new JScrollPane(table), BorderLayout.SOUTH);
          
          try
          {
            String resultselectedtable=new String();
            String resulttablefields=new String();
            Statement selectedtable = main3.connection.createStatement(); //Variable Connection wird benötigt
            resultselectedtable = "SELECT do.doctable FROM doctable do, description d WHERE do.active='1' and do.doctable=d.code and d.language='de' and d.description='" + main3.selectedChoice.getSelectedItem() + "'";
            ResultSet rs1 = selectedtable.executeQuery(resultselectedtable); 
            Statement tablefields = main3.connection.createStatement(); 
            resulttablefields = "SELECT * FROM resultselectedtable";
            ResultSet rs = tablefields.executeQuery(resulttablefields); 
        
            List fields = new ArrayList(); 
            while (rs.next()) 
            { 
                fields.add(rs.getString(1));
            }
            List listfields = (java.util.List) fields; 
            int fieldslen=listfields.size();
            
            for (int i=0;i<fieldslen;i++) 
            { 
                String outlistfields = (String) listfields.get(i);
                model.addRow(new Object[] {outlistfields, isselected}); 
            }
        }
        catch(Exception e3) 
        {    
            JOptionPane.showMessageDialog(null, "Error: " + "\n" + e3.getMessage()); 
        }
      }
}

Die Fehlermeldung beim compilieren
Code:
Exception in thread "main" java.lang.StackOverflowError
        at java.util.Hashtable.put(Hashtable.java:401)
        at sun.java2d.Disposer.add(Disposer.java:101)
        at sun.java2d.Disposer.addRecord(Disposer.java:69)
        at sun.awt.windows.Win32SurfaceData.initOps(Native Method)
        at sun.awt.windows.Win32SurfaceData.<init>(Win32SurfaceData.java:448)
        at sun.awt.windows.Win32SurfaceData.createData(Win32SurfaceData.java:316)
        at sun.awt.Win32GraphicsConfig.createSurfaceData(Win32GraphicsConfig.java:357)
        at sun.awt.windows.WComponentPeer.replaceSurfaceData(WComponentPeer.java:332)
        at sun.awt.windows.WComponentPeer.replaceSurfaceData(WComponentPeer.java:313)
        at sun.awt.windows.WComponentPeer.setBounds(WComponentPeer.java:124)
        at sun.awt.windows.WComponentPeer.initialize(WComponentPeer.java:573)
        at sun.awt.windows.WCanvasPeer.initialize(WCanvasPeer.java:69)
        at sun.awt.windows.WPanelPeer.initialize(WPanelPeer.java:58)
        at sun.awt.windows.WWindowPeer.initialize(WWindowPeer.java:86)
        at sun.awt.windows.WFramePeer.initialize(WFramePeer.java:168)
        at sun.awt.windows.WComponentPeer.<init>(WComponentPeer.java:534)
        at sun.awt.windows.WCanvasPeer.<init>(WCanvasPeer.java:35)
        at sun.awt.windows.WPanelPeer.<init>(WPanelPeer.java:54)
        at sun.awt.windows.WWindowPeer.<init>(WWindowPeer.java:82)
        at sun.awt.windows.WFramePeer.<init>(WFramePeer.java:152)
        at sun.awt.windows.WToolkit.createFrame(WToolkit.java:360)
        at java.awt.Frame.addNotify(Frame.java:491)
        at java.awt.Window.pack(Window.java:484)
        at emailclient.EmailClient_Mail.<init>(EmailClient_Mail.java:162)
        at emailclient.EmailClient.<init>(EmailClient.java:73)
        at emailclient.FieldsSelection.<init>(FieldsSelection.java:19)
        at emailclient.EmailClient.<init>(EmailClient.java:74) // 74: FieldsSelection main2 = new FieldsSelection();
        at emailclient.FieldsSelection.<init>(FieldsSelection.java:19) // 19: EmailClient main3 = new EmailClient();
 

dotlens

Top Contributor
1. dein fehler hat nichts mit den 2 klassen zu tun. du scheinst in deiner ersten klasse endlos etwas in eine hashtable einzufügen.

2. gib der 2ten klasse eine referenz der ersten klasse mit und du kannst auf alle variablen zugreifen sofern sie nicht als 'private' deklariert sind.
 

Bleiglanz

Gesperrter Benutzer
beim laden (nicht im konstruktor)

FieldsSelection main2 = new FieldsSelection();

erzeugt ein neues fieldsselection, aber dort wird auch beim laden

EmailClient main3 = new EmailClient();

aufgerufen, und so gehts unendlich weiter...


Lösung:

mach im fieldsselection

EmailClient mainVorhanden

und setz diesen im Konstruktor auf den Wert des ersten
 

Nova

Bekanntes Mitglied
Hallo,

StackOverflowError ensteht meistens bei Endlosschleifen (oder bei riesigen Datenmenegen).

Schau die mal diese Zeielen an:
Code:
            while (rs.next())
            {
                fields.add(rs.getString(1));
            }

Ich kenne mich mit Sets nicht genau aus, aber das sieht für mich nach einer Endlosschleife aus. Du rufgst immer rs.next() auf, irgendwenn gibts dann nix mehr und rs.next liefert null. Das fällt dir aber gar nicht auf da du gar nicht auf den mit rs.next() ausgelesenen Wert zurückgreifst.



mfg
Christian
 
L

Louis2

Gast
@Nova: Ne das passt schon, der führt das Statement aus, speichert die Ergebnisse und dann geht er sie durch und packt sie in die ArrayList solange es noch welche gibt... habe ich irgendwo anders ausprobiert, funzt...
@Bleiganz:
Meinst Du sowas ?
Code:
public class FieldsSelection extends JFrame 
{
      EmailClient main3 = new EmailClient();
      EmailClient main4; // NEU
      JTable table;
      String comboinhalt[];
      boolean isselected;
      
      public FieldsSelection()
      {
          super("Java bulk-email (Fields Selection)");
          
          main4 = main3; // NEU
          Container contentPane = this.getContentPane();
          contentPane.setLayout(new BorderLayout());
          
          String[] title = new String[]
          { 
            "Fields", "Selection" 
          }; 
          final DefaultTableModel model = new DefaultTableModel (title,0); 
          table = new JTable(model);
          getContentPane().add(new JScrollPane(table), BorderLayout.SOUTH);
          
          try
          {
            String resultselectedtable=new String();
            String resulttablefields=new String();
            Statement selectedtable = main4.connection.createStatement(); // GEÄNDERT
            resultselectedtable = "SELECT do.doctable FROM doctable do, description d WHERE do.active='1' and do.doctable=d.code and d.language='de' and d.description='" + main4.selectedChoice.getSelectedItem() + "'";
            ResultSet rs1 = selectedtable.executeQuery(resultselectedtable); // GEÄNDERT
            Statement tablefields = main4.connection.createStatement(); // GEÄNDERT
            resulttablefields = "SELECT * FROM resultselectedtable";
            ResultSet rs = tablefields.executeQuery(resulttablefields);
 

Bleiglanz

Gesperrter Benutzer
NEIN

denk mal drüber nach
Code:
class A {
    private B = new B();
}
class B {
     private A = new A();
}
die zeile vor dem NEU muss weg!

und dann im konstruktor
Code:
public FieldsSelection(EmailClient emailClient)
      {
thid.main4 = emailClient
usw. usf
 
L

Louis2

Gast
@Bleiglanz:
Ok, das Problem war, das beide sich gegenseitig im selben Moment aufrufen?

Also ich habe es nun geändert, beim compilieren erscheint:
Code:
Exception in thread "main" java.lang.NoSuchMethodError: emailclient.FieldsSelection: method <init>()V not found
        at emailclient.EmailClient.<init>(EmailClient.java:74)
        at emailclient.EmailClient.main(EmailClient.java:623)

Beide weisen auf die Main Klasse (EmailClient):
74 auf
Code:
FieldsSelection main2 = new FieldsSelection();
623 auf
Code:
public static void main(String[] args) 
    {
        EmailClient frame = new EmailClient(); // 623
        frame.setDefaultCloseOperation(EmailClient.EXIT_ON_CLOSE);
        frame.setDefaultLookAndFeelDecorated(true);
        frame.setVisible(true);
        frame.setResizable(false);
        frame.pack();
        frame.setSize(900,485);
    }
 

Tobias

Top Contributor
Nein, das Problem, das Bleiglanz ansprach ist nicht ein gleichzeitiger Aufruf, sondern eine versteckte Endlosschleife: A kann nur fertig initialisiert werden, wenn B fertig initialisiert wurde, was aber auf die Initialisierung von A angewiesen ist.
 
L

Louis2

Gast
Nun erscheint folgende Meldung:
Code:
symbol  : constructor FieldsSelection()
location: class emailclient.FieldsSelection
FieldsSelection main2 = new FieldsSelection();

Da nun mein Konstruktor der Klasse FieldsSelection so aussieht
Code:
 public FieldsSelection(EmailClient emailclient)
muss ich beim laden aus der main Klasse
Code:
FieldsSelection main2 = new FieldsSelection();
was eingeben?
 

Bleiglanz

Gesperrter Benutzer
du darfst das nicht beim initialisieren machen,

im Konstruktor von EmailClient sollte stehen

main2 = new FieldsSelection(this);
 
L

Louis2

Gast
Ah nun erscheint das Fenster aber das Prog. springt sofort ins Catch. Beim printStackTrace() erscheint
Code:
java.lang.NullPointerException
        at emailclient.FieldsSelection.<init>(FieldsSelection.java:44) // Statement selectedtable = main3.connection.createStatement(); 
        at emailclient.EmailClient.<init>(EmailClient.java:74) // FieldsSelection main2 = new FieldsSelection(this);
        at emailclient.EmailClient.main(EmailClient.java:626) // EmailClient frame = new EmailClient(); static void main in EmailClient
Hat der Probleme auf die Variable zuzugreifen ?

So sieht die FieldsSelection Klasse aus
Code:
public class FieldsSelection extends JFrame 
{
      EmailClient main3;
      JTable table;
      String comboinhalt[];
      boolean isselected;
      
      public FieldsSelection(EmailClient emailclient)
      {
          super("Java bulk-email (Fields Selection)");
          
          this.main3 = emailclient;
          Container contentPane = this.getContentPane();
          contentPane.setLayout(new BorderLayout());
          
          String[] title = new String[]
          { 
            "Fields", "Selection" 
          }; 
          final DefaultTableModel model = new DefaultTableModel (title,0); 
          table = new JTable(model);
          getContentPane().add(new JScrollPane(table), BorderLayout.SOUTH);
          
          try
          {
            String resultselectedtable=new String();
            String resulttablefields=new String();
            Statement selectedtable = main3.connection.createStatement(); 
            resultselectedtable = "SELECT do.doctable FROM doctable do, description d WHERE do.active='1' and do.doctable=d.code and d.language='de' and d.description='" + main3.selectedChoice.getSelectedItem() + "'";
            ResultSet rs1 = selectedtable.executeQuery(resultselectedtable); 
            Statement tablefields = main3.connection.createStatement(); 
            resulttablefields = "SELECT * FROM" + resultselectedtable;
            ResultSet rs = tablefields.executeQuery(resulttablefields); 
        
            List fields = new ArrayList(); 
            while (rs.next()) 
            { 
                fields.add(rs.getString(1));
            }
            List listfields = (java.util.List) fields; 
            int fieldslen=listfields.size();
            
            for (int i=0;i<fieldslen;i++) 
            { 
                String outlistfields = (String) listfields.get(i);
                model.addRow(new Object[] {outlistfields, isselected}); 
            }
        }
        catch(Exception e3) 
        {    
            e3.printStackTrace();
            JOptionPane.showMessageDialog(null, "Error: " + "\n" + e3.getMessage()); 
        }
      }
}
 
L

Louis2

Gast
Sieht jemand den Fehler, kann er nicht von FieldsSelection auf EmailClient zugreifen weil er den Frame nicht findet?
 
L

Louis2

Gast
Hmmm... also wie es in FieldsSelection übergebe ich die Referenz ja bevor das Connection aus der EmailClient Klasse geholt wird, aber wie soll ich es ändern? try{... aus dem Konstruktor raus??

Klasse FieldsSelection
Code:
public class FieldsSelection extends JFrame 
{
      EmailClient emailclient;
      JTable table;
      String comboinhalt[];
      boolean isselected;
      
      public FieldsSelection(EmailClient emailclient)
      {
          super("Java bulk-email (Fields Selection)");
          
          Container contentPane = this.getContentPane();
          contentPane.setLayout(new BorderLayout());
          //this.emailclient = emailclient;
          
          String[] title = new String[]
          { 
            "Fields", "Selection" 
          }; 
          final DefaultTableModel model = new DefaultTableModel (title,0); 
          table = new JTable(model);
          getContentPane().add(new JScrollPane(table), BorderLayout.SOUTH);
          
          try
          {
            String resultselectedtable=new String();
            String resulttablefields=new String();
            Statement selectedtable = emailclient.connection.createStatement(); //Fehlermeldung
            resultselectedtable = "SELECT do.doctable FROM doctable do, description d WHERE do.active='1' and do.doctable=d.code and d.language='de' and d.description='" + emailclient.selectedChoice.getSelectedItem() + "'";
            ResultSet rs1 = selectedtable.executeQuery(resultselectedtable); 
            Statement tablefields = emailclient.connection.createStatement(); 
            resulttablefields = "SELECT * FROM" + resultselectedtable;
            ResultSet rs = tablefields.executeQuery(resulttablefields);
                    
            List fields = new ArrayList(); 
            while (rs.next()) 
            { 
                fields.add(rs.getString(1));
            }
            List listfields = (java.util.List) fields; 
            int fieldslen=listfields.size();
            
            for (int i=0;i<fieldslen;i++) 
            { 
                String outlistfields = (String) listfields.get(i);
                model.addRow(new Object[] {outlistfields, isselected}); 
            }
        }
        catch(Exception e3) 
        {    
            e3.printStackTrace();
            JOptionPane.showMessageDialog(null, "Error: " + "\n" + e3.getMessage()); 
        }
        this.emailclient = emailclient;
      }
}

Main Klasse bei der FieldsSelectionaufgerufen wird
Code:
public class EmailClient extends JFrame implements WindowListener, ActionListener
{
    private JButton sendButton = new JButton("     Send Messages     ");
    private JButton cancelButton = new JButton("Cancel");
    private JLabel valueLabel = new JLabel("               Number of rows: ");
    private JProgressBar bar = new JProgressBar();
    private JLabel valueProg = new JLabel();
    FieldsSelection main2 = new FieldsSelection(this); // Fehlermeldung
    .
    .
    .
    Connection connection;
    .
        
    public EmailClient() 
    {
        super("Java bulk-email");
        
        Container contentPane = this.getContentPane();
        contentPane.setLayout(new BorderLayout());
        .
        .
       
        //Database connection
        try 
        { 
            Class.forName("oracle.jdbc.driver.OracleDriver"); 
            DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
            // OCI8-Treiber funktioniert
            //String url = "jdbc:oracle:oci8:@"+main.DBName;
            // Thin-Treiber funktioniert auch
            String url = "jdbc:oracle:thin:@"+main.DBServer+":1521:"+main.DBName; 
            connection = DriverManager.getConnection(url, main.DBUser, main.DBPassword); // Hier sollte FieldsSelection auf Connection zugreifen. 
        }
        .
        .
        main2.setVisible(true);
        .
        public static void main(String[] args) 
        {
            EmailClient frame = new EmailClient(); // Fehlermeldung
            frame.setDefaultCloseOperation(EmailClient.EXIT_ON_CLOSE);
            frame.setDefaultLookAndFeelDecorated(true);
            frame.setVisible(true);
            frame.setResizable(false);
            frame.pack();
            frame.setSize(900,485);
        }
    }
 
L

Louis2

Gast
Code:
java.lang.NullPointerException 
        at emailclient.FieldsSelection.<init>(FieldsSelection.java:44) // Statement selectedtable = emailclient.connection.createStatement(); 
        at emailclient.EmailClient.<init>(EmailClient.java:74) // FieldsSelection main2 = new FieldsSelection(this); 
        at emailclient.EmailClient.main(EmailClient.java:626) // EmailClient frame = new EmailClient(); static void main in EmailClient

heißt wohl, dass die Variable connection wohl null ist. Die Variable holt er sich aus der main Klasse EmailClient.
Aber irgendwie kann er nicht drauf zu greifen, liegt es daran, dass ich in der FieldsSelection kein Objekt der Art emailclient = new Emailclient(); erzeugt habe ??
 
L

Louis2

Gast
Also ich habe verschiedene Varianten ausprobiert immer die selbe Meldung, zum verrückt werden :x
 

Bleiglanz

Gesperrter Benutzer
hast du eine ide mit debugger?

dann schaus dir einfach schrittweise an!


p.s. du kannst nicht alles im konstruktor machen :)
 
L

Louis2

Gast
Das Programm wird ja nach dem compilieren auch gestartet, nur halt mit der blöden Fehlermeldung... kann es sein, dass er Probleme damit hat beide Klassen gleichzeitig zu kompilieren weil er dann die connection Variable noch nicht aus der anderen Klassen genommen hat??
Mit dem Debugger zeigt er auch, dass er bei
Code:
Statement selectedtable = main3.connection.createStatement();
abbricht, er geht in das try{ und dann weg... hmmm ???:L
 
L

Louis2

Gast
Ich versteh was nicht, vielleicht ist an der Logik auch was faul aber: in der Klasse EmailClient wird versucht eine Verbindung zu der DB herzustellen und erst danach rufe ich die zweite Klasse (FieldsSelection) auf, wo dann auf die Connection Variable zugegriffen wird, die Frage ist nun, wieso bringt er immer noch
Code:
 java.lang.NullPointerException
        at emailclient.FieldsSelection.<init>(FieldsSelection.java:46)
        at emailclient.EmailClient.<init>(EmailClient.java:190)
        at emailclient.EmailClient.main(EmailClient.java:625)
, also er liefert mir für die Variable ein null Wert aus, wenn ich das Objekt (zweite Klasse) erst danach aufrufe und er halt die Variable schon kennen muss??

Code:
public class EmailClient extends JFrame implements WindowListener, ActionListener
{
    private JButton sendButton = new JButton("     Send Messages     ");
    private JButton cancelButton = new JButton("Cancel");
    private JLabel valueLabel = new JLabel("               Number of rows: ");
    private JProgressBar bar = new JProgressBar();
    private JLabel valueProg = new JLabel();
    .                        
    Connection connection;
    .

    public EmailClient() 
    {
        super("Java bulk-email");
        
        Container contentPane = this.getContentPane();
        contentPane.setLayout(new BorderLayout());
        .
         
        //Database connection
        try 
        { 
            Class.forName("oracle.jdbc.driver.OracleDriver"); 
            DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
            String url = "jdbc:oracle:thin:@"+main.DBServer+":1521:"+main.DBName; 
            connection = DriverManager.getConnection(url, main.DBUser, main.DBPassword); // Variable erzeugt
        }
        catch(ClassNotFoundException e1) 
        { 
            JOptionPane.showMessageDialog(null, "The required connection class (Java-DB) was not found"); 
        } 
        catch(Exception e2) 
        {       
            JOptionPane.showMessageDialog(null, "Could not connect to Database:" + "\n" + e2.getMessage()); 
        }
        final FieldsSelection main2 = new FieldsSelection(this); // Nun zweite Klasse aufgerufen

Code:
public class FieldsSelection extends JFrame 
{
      EmailClient main3;
      JTable table;
      String comboinhalt[];
      boolean isselected;
      
      public FieldsSelection(EmailClient emailclient)
      {
          super("Java bulk-email (Fields Selection)");
          
          this.main3 = emailclient;
          Container contentPane = this.getContentPane();
          contentPane.setLayout(new BorderLayout());
          //this.emailclient = emailclient;
          
          String[] title = new String[]
          { 
            "Fields", "Selection" 
          }; 
          final DefaultTableModel model = new DefaultTableModel (title,0); 
          table = new JTable(model);
          getContentPane().add(new JScrollPane(table), BorderLayout.SOUTH);
          
          try
          {
            String resultselectedtable=new String();
            String resulttablefields=new String();
            Statement selectedtable = main3.connection.createStatement(); 
            resultselectedtable = "SELECT do.doctable FROM doctable do, description d WHERE do.active='1' and do.doctable=d.code and d.language='de' and d.description='" + main3.selectedChoice.getSelectedItem() + "'";
            ResultSet rs1 = selectedtable.executeQuery(resultselectedtable); 
            Statement tablefields = main3.connection.createStatement(); 
            resulttablefields = "SELECT * FROM" + resultselectedtable;
            ResultSet rs = tablefields.executeQuery(resulttablefields);
                    
            List fields = new ArrayList(); 
            while (rs.next()) 
            { 
                fields.add(rs.getString(1));
            }
            List listfields = (java.util.List) fields; 
            int fieldslen=listfields.size();
            
            for (int i=0;i<fieldslen;i++) 
            { 
                String outlistfields = (String) listfields.get(i);
                model.addRow(new Object[] {outlistfields, isselected}); 
            }
        }
        catch(Exception e3) 
        {    
            e3.printStackTrace();
            JOptionPane.showMessageDialog(null, "Error: " + "\n" + e3.getMessage()); 
        }
      }
}
 

Bleiglanz

Gesperrter Benutzer
du sollst nicht alles im container machen

=> this ist ja noch gar nicht fertig, wenn du das übergibst

Code:
    public EmailClient()
    {
        super("Java bulk-email");
        final FieldsSelection main2 = new FieldsSelection(this); 
    }

      public FieldsSelection(EmailClient emailclient)
      {
          super("Java bulk-email (Fields Selection)");
          this.main3 = emailclient; 
      }
mach den anderen zeugs in eigenen methoden (schreib dir zum beispiel eine initialize-Methode

problem könnte sein, dass this noch gar nicht fertig ist, wenn du es aus dem Konstruktor von emailClient herausgibst
 
L

Louis2

Gast
Als erster Schritt habe ich in der EmailClient Klasse eine initialize Methode eingebaut die nur die Verbindung zu der DB bereitstellt (und das connection durchführt).
[EDIT] Vermutlich ist jetzt die Meldung für die Zeile drunter
Code:
resultselectedtable = "SELECT do.doctable FROM doctable do, description d WHERE do.active='1' and do.doctable=d.code and d.language='de' and d.description='" + main3.selectedChoice.getSelectedItem() + "'";
da beim Start noch kein Item selektiert wurde und deshalb == null ist ?? Und wie kann ich es ändern?

Sieh mal an, die Fehlermeldung bleibt bestehen aber nun für
Code:
public class FieldsSelection extends JFrame 
{ 
      EmailClient main3; 
      JTable table; 
      String comboinhalt[]; 
      boolean isselected; 
      
      public FieldsSelection(EmailClient emailclient) 
      { 
          super("Java bulk-email (Fields Selection)"); 
          
          this.main3 = emailclient; 
          Container contentPane = this.getContentPane(); 
          contentPane.setLayout(new BorderLayout()); 
          //this.emailclient = emailclient; 
          
          String[] title = new String[] 
          { 
            "Fields", "Selection" 
          }; 
          final DefaultTableModel model = new DefaultTableModel (title,0); 
          table = new JTable(model); 
          getContentPane().add(new JScrollPane(table), BorderLayout.SOUTH); 
          
          try 
          { 
            String resultselectedtable=new String(); 
            String resulttablefields=new String(); 
            Statement selectedtable = main3.connection.createStatement(); 
            resultselectedtable = "SELECT do.doctable FROM doctable do, description d WHERE do.active='1' and do.doctable=d.code and d.language='de' and d.description='" + main3.selectedChoice.getSelectedItem() + "'"; // Nun Meldung für diese Zeile
            ResultSet rs1 = selectedtable.executeQuery(resultselectedtable); 
            Statement tablefields = main3.connection.createStatement(); 
            resulttablefields = "SELECT * FROM" + resultselectedtable; 
            ResultSet rs = tablefields.executeQuery(resulttablefields); 
                    
            List fields = new ArrayList(); 
            while (rs.next()) 
            { 
                fields.add(rs.getString(1)); 
            } 
            List listfields = (java.util.List) fields; 
            int fieldslen=listfields.size(); 
            
            for (int i=0;i<fieldslen;i++) 
            { 
                String outlistfields = (String) listfields.get(i); 
                model.addRow(new Object[] {outlistfields, isselected}); 
            } 
        } 
        catch(Exception e3) 
        {    
            e3.printStackTrace(); 
            JOptionPane.showMessageDialog(null, "Error: " + "\n" + e3.getMessage()); 
        } 
      } 
}

Vermutlich hat er das selbe Problem mit
Code:
main3.selectedChoice.getSelectedItem()
aber wie kann ich das ändern in der EmailClient Klasse, sieht nämlich
Code:
for (int i = 0; i < comboinhalt.length; i++)
            combo.addItem(comboinhalt[i]);
            getContentPane().add(combo, BorderLayout.WEST);
            combo.addItemListener(new ItemListener() 
        {
            //Action when combo value selected
            public void itemStateChanged(ItemEvent e) 
            {
                String resultauftrag=new String();
                selectedChoice = (JComboBox)e.getSource();
                if (selectedChoice.getSelectedItem().equals(comboinhalt[1]))
                {                
                    //Get data from Database and save them in ArrayList    
                    main2.setVisible(true);
                    try
                    {
                        Statement auftrag = connection.createStatement(); 
                        resultauftrag = "SELECT DISTINCT d.customerno, d.companyname, c.contactnumber, a.AUF001, a.AUF012, a.AUF004, a.AUF015, a.AUF016, a.AUF020 FROM customer_data d, Auftrag a, contactnumber c, description de WHERE a.customerid=d.customerid AND d.addressid=c.addressid AND de.description='E-Mail'";
                        //Achtung - von mir geändert! ab
                        //resultauftrag = "SELECT DISTINCT d.customerno, d.companyname, d.contactnumber, d.AUF001, d.AUF012, d.AUF004, d.AUF015, d.AUF016, d.AUF020 FROM customer_data d";
                        ResultSet rs = auftrag.executeQuery(resultauftrag); 
                                        
                        List customerno = new ArrayList(); 
                        List companyname = new ArrayList();
                        List email = new ArrayList();
                        List auf001 = new ArrayList(); 
                        List auf012 = new ArrayList();
                        List auf004 = new ArrayList(); 
                        List auf015 = new ArrayList();
                        List auf016 = new ArrayList(); 
                        List auf020 = new ArrayList();
                                            
                        while (rs.next()) 
                        { 
                            customerno.add(rs.getString(1));
                            companyname.add(rs.getString(2));
                            email.add(rs.getString(3));
                            auf001.add(rs.getString(4)); 
                            auf012.add(rs.getString(5)); 
                            auf004.add(rs.getString(6)); 
                            auf015.add(rs.getString(7));
                            auf016.add(rs.getString(8)); 
                            auf020.add(rs.getString(9));
                        } 
                    
                        listcustomerno = (java.util.List) customerno; 
                        listcompanyname = (java.util.List) companyname; 
                        listemail = (java.util.List) email; 
                        listauf001 = (java.util.List) auf001; 
                        listauf012 = (java.util.List) auf012; 
                        listauf004 = (java.util.List) auf004; 
                        listauf015 = (java.util.List) auf015; 
                        listauf016 = (java.util.List) auf016; 
                        listauf020 = (java.util.List) auf020; 
                    
                        len=listauf001.size();
                        valueLabel.setText("               Number of rows: " + len);
                        valueProg.setText("x  of " + len + " Emails");
                        bar.setVisible(true);
                        bar.setMinimum(0);
                        bar.setMaximum(len);
                        int count=model.getRowCount();
                        for (int o=0;o<count;o++)
                        {
                            model.removeRow(0);
                        }
                    
                        //Insert data in JTable
                        for (int n=0;n<len;n++) 
                        { 
                            outlistcustomerno = (String) listcustomerno.get(n);
                            outlistcompanyname = (String) listcompanyname.get(n);
                            outlistemail = (String) listemail.get(n);
                            outlist001 = (String) listauf001.get(n); 
                            outlist012 = (String) listauf012.get(n); 
                            outlist004 = (String) listauf004.get(n); 
                            outlist015 = (String) listauf015.get(n); 
                            outlist016 = (String) listauf016.get(n); 
                            outlist020 = (String) listauf020.get(n); 
                    
                            model.addRow(new String[] {outlistcustomerno, outlistcompanyname, outlistemail, outlist001, outlist012, outlist004, outlist015, outlist016, outlist020}); 
                        }
                    }
                    catch(Exception e3) 
                    {    
                        JOptionPane.showMessageDialog(null, "Data could not be received:" + "\n" + e3.getMessage()); 
                    }
                }
             }
        });

aus.
 
L

Louis2

Gast
Also, eingrenzen kann ich das ganze.
Die Klasse FieldsSelection wird geladen und ich greife auf eine Variable (main3.selectedChoice.getSelectedItem()) der Klasse EmailClient (ComboBox Auswahl) hiermit
Code:
resultselectedtable = "SELECT do.doctable FROM doctable do, description d WHERE do.active='1' and do.doctable=d.code and d.language='de' and d.description='" + main3.selectedChoice.getSelectedItem() + "'";

So beim landen bzw. compilieren ist ja noch kein Eintrag ausgewählt, deshalb kommt bei der Zeile oben eine NullPointException.

Wie kriege ich das nun gebacken, dass beim Start noch nicht auf die selectedChoice gelesen wird ?


Der ganze Code dazu in der EmailClient sieht wie folgt aus
Code:
for (int i = 0; i < comboinhalt.length; i++)
	combo.addItem(comboinhalt[i]);
        getContentPane().add(combo, BorderLayout.WEST);
        combo.addItemListener(new ItemListener() 
{
	//Action when combo value selected
        public void itemStateChanged(ItemEvent e) 
        {
        	String resultauftrag=new String();
                selectedChoice = (JComboBox)e.getSource();
                if (selectedChoice.getSelectedItem().equals(comboinhalt[1]))
                {                
                    //Get data from Database and save them in ArrayList    
                    main2.setVisible(true);
                    try
                    {
                        Statement auftrag = connection.createStatement(); 
                        resultauftrag = "SELECT DISTINCT d.customerno, d.companyname, c.contactnumber, a.AUF001, a.AUF012, a.AUF004, a.AUF015, a.AUF016, a.AUF020 FROM customer_data d, Auftrag a, contactnumber c, description de WHERE a.customerid=d.customerid AND d.addressid=c.addressid AND de.description='E-Mail'";
                        //Achtung - von mir geändert! ab
                        //resultauftrag = "SELECT DISTINCT d.customerno, d.companyname, d.contactnumber, d.AUF001, d.AUF012, d.AUF004, d.AUF015, d.AUF016, d.AUF020 FROM customer_data d";
                        ResultSet rs = auftrag.executeQuery(resultauftrag); 
			.
			.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
dat_vin JFrame öffnet sich mehrmals Java Basics - Anfänger-Themen 6
J Klick auf Button -> JFrame öffnet sich erneut. & Datei lässt sich nicht löschen Java Basics - Anfänger-Themen 7
K Erste Schritte Ein Button öffnet ein JFrame Java Basics - Anfänger-Themen 16
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
E JFrame + Buffer-strategy Java Basics - Anfänger-Themen 8
I JFrame / Screen auf zweitem (definiertem) Monitor öffnen Java Basics - Anfänger-Themen 3
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
B HSQL mit JFrame steuern Java Basics - Anfänger-Themen 4
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
D Erste Schritte png in JFrame anzeigen? Java Basics - Anfänger-Themen 3
Thomathy Interface Wie schließt man ein anderes JFrame Fenster? Java Basics - Anfänger-Themen 6
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
S Kontrollieren ob jframe disposed ist Java Basics - Anfänger-Themen 3
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 17
M Bild in JFrame Java Basics - Anfänger-Themen 1
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S JFrame mit Hintergrundbild und Button Java Basics - Anfänger-Themen 4
S JFrame Java Basics - Anfänger-Themen 15
I JFrame proportional verkleinerbar machen Java Basics - Anfänger-Themen 3
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
T Auslagern von Methoden bei einem JFrame Java Basics - Anfänger-Themen 6
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
3 JFrame immer im Hintergrund Java Basics - Anfänger-Themen 1
F Interface JFrame mit if-Abfrage automatisch schließen lassen? Java Basics - Anfänger-Themen 3
R JFrame nicht verschiebbar Java Basics - Anfänger-Themen 2
T Wenn JFrame Textfelder Hintergrund Grün dann... (if) Java Basics - Anfänger-Themen 3
K Java JFrame mit Hintergrundbild erstellen Java Basics - Anfänger-Themen 1
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
H Eclipse JFrame Java Basics - Anfänger-Themen 3
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
I JFrame minimieren wenn anderes Programm minimiert wird Java Basics - Anfänger-Themen 1
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
D Erste Schritte JFrame Inhalte werden nicht angezeigt Java Basics - Anfänger-Themen 8
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
B Ist MyFrame oder JFrame besser? Java Basics - Anfänger-Themen 3
Y JFrame sichtbarkeit Java Basics - Anfänger-Themen 4
KeVoZ_ Label auf JFrame willkürlich Positionieren Java Basics - Anfänger-Themen 2
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
P JFrame nur einmal öffnen Java Basics - Anfänger-Themen 4
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
V Tastatur initialisieren JFrame Probleme Java Basics - Anfänger-Themen 6
J JPG in JFrame anzeigen lassen Java Basics - Anfänger-Themen 3
J JFrame ausgabe von Werten Java Basics - Anfänger-Themen 9
F GUI als Klasse oder extend JFrame? Java Basics - Anfänger-Themen 6
F JFrame resize verschiebt JPanel Java Basics - Anfänger-Themen 3
S Wieso wird mein JFrame transparent dargestellt? Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
thomasbomme Grafikfehler JFrame- Cleartype Java Basics - Anfänger-Themen 1
GreyFox Arbeit mit JFrame Java Basics - Anfänger-Themen 8
T Erste Schritte 2 Codes zusammen fügen / Label in JFrame Java Basics - Anfänger-Themen 1
Z Zwei Images auf einem JFrame - Aber nur eins wird angezeigt! Java Basics - Anfänger-Themen 5
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
W 2 JPanels in 2Klasse in einem JFrame zusammenfügen Java Basics - Anfänger-Themen 12
M JFrame Bild einfügen Java Basics - Anfänger-Themen 3
M Rahmen für undekorierten JFrame Java Basics - Anfänger-Themen 6
S JPanel wird versetzt auf JFrame gelegt Java Basics - Anfänger-Themen 2
B Erste Schritte JFrame in Klasse auslagern Java Basics - Anfänger-Themen 4
H JFrame komplett schließen Java Basics - Anfänger-Themen 3
S Brauche hilfe bei Pong (JFrame) Java Basics - Anfänger-Themen 2
M hintergrund in jframe festlegen Java Basics - Anfänger-Themen 4
J JFrame Render Fehler - Warum? Java Basics - Anfänger-Themen 2
I komponenten werden in JFrame nicht richtig angezeigt Java Basics - Anfänger-Themen 1
E 2. JFrame erkennt 1. Frame Java Basics - Anfänger-Themen 6
D Best Practice JFrame im JFrame Java Basics - Anfänger-Themen 2
P Bild in JFrame Titelleiste Java Basics - Anfänger-Themen 7
S Erste Schritte Von JFrame in nächstes JFRame wechseln Java Basics - Anfänger-Themen 0
V JFrame aktualisieren Java Basics - Anfänger-Themen 6
S JFrame ist nicht schwarz Java Basics - Anfänger-Themen 5
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
S JFrame wird nicht "bemalt" Java Basics - Anfänger-Themen 2
M Unsichtbare Objekte in JFrame Java Basics - Anfänger-Themen 2
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
Sogomn JLabel in anderer Klasse zum JFrame hinzufügen Java Basics - Anfänger-Themen 2
B Drawline wird auf JFrame nicht angezeigt Java Basics - Anfänger-Themen 3
N Fokus setzen nachdem JFrame in Vordergrund geholt wurde Java Basics - Anfänger-Themen 7
K Methoden Objekt auf JFrame zeichnen Java Basics - Anfänger-Themen 16
S JFrame leeren Java Basics - Anfänger-Themen 6
X JFrame Fenster einzeln schließen Java Basics - Anfänger-Themen 2
K Erste Schritte Jframe Im Jpanel Java Basics - Anfänger-Themen 4
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
P JFrame Component automatische Größe verhindern Java Basics - Anfänger-Themen 2
D JFrame, Komponenten verschmiert. Java Basics - Anfänger-Themen 15
M Schriftfarbe in JFrame Java Basics - Anfänger-Themen 24
A JFrame läuft ewig? Java Basics - Anfänger-Themen 2
U JFrame durch ActionListener erweitern Java Basics - Anfänger-Themen 4
B Wie kann man auf das JFrame einer anderen Klasse zugreifen, etwas hinzufügen und entfernen?? Java Basics - Anfänger-Themen 3
N JFrame-Objekt in neuer Methode nicht verfügbar? Java Basics - Anfänger-Themen 3
A Frage zu: JFrame setLocationRelativeTo Java Basics - Anfänger-Themen 3
N Erste Schritte Prozessor Kernanzahl in JFrame Java Basics - Anfänger-Themen 3
DStrohma Transparenter JFrame Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben