Avatar billede pashmak Nybegynder
12. maj 2009 - 09:38 Der er 7 kommentarer

Parse data fra Class 1 til GUI class

Hej,

Jeg er i gang med et mindre projekt, som virkelig driller mig.

Jeg har en GUI klasse og en SQL klasse.

GUI klassen envoker en metode i SQL klassen, som så sender et sæt af Strings tilbage til GUI klassens JTable metode, der så skal liste de resultater.

Jeg har debugget i SQL ved at lave en System.out.println, og her viser den korrekt de strings inden de bliver sendt til jtable metoden i GUI. Men alligevel får jeg nullpointer fejlen.

Således er min kode:

1)
En knap klikkes på og følgende envokes:

resultsPanel("","","","","");

2)
Følgende metode bliver kaldt:

public void resultsPanel(String username, String firstname, String lastname,String position,String department)
        {
     
        dialog = new JDialog(frame,false);
        dialog.setTitle("Results");
        dialog.setSize(350,320);
        dialog.setResizable(true);
        Container pane = dialog.getContentPane();
   
        pane.setLayout(new BorderLayout());
        pane.add(results(username,firstname,lastname,position,department),BorderLayout.NORTH);
        pane.add(resultsButtons(),BorderLayout.SOUTH);
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.setVisible(true);
   
      }



3)
Dertil er der en knap fra "resultsButtons" som envoker følgende:
(et uddrag)

if (statement.execute("SELECT users.username,firstname,lastname,position,department,phone,profile,competence_type,competence_text,completed_tasks FROM users,competences,tasks WHERE users.username = competences.username AND competences.username = tasks.username;")) {
        rs = statement.getResultSet();

        while(rs.next()){
        String username = rs.getString("username");
        String firstname = rs.getString("firstname");
        String lastname = rs.getString("lastname");
        String position = rs.getString("position");
        String department = rs.getString("department");
        String phone = rs.getString("phone");
        String profile = rs.getString("profile");
        String competence_type = rs.getString("competence_type");
        String competence_text = rs.getString("competence_text");
        String completed_tasks = rs.getString("completed_tasks");
        System.out.println("Username: " + username + "\n Name: " + firstname + " " + lastname +  "\nPosition: \n" + position + "\nDepartment: " + department + "\nPhone: " + phone + "\nProfile :" + profile + "\n \n \nCompetence: "+ competence_type + "\nCompetence Text :" + competence_text + "\nCompleted :" + completed_tasks + "\n");
        gui.results(username,firstname,lastname,position,department);



4) Som kan ses, så envokes results(), som ser således ud:



public JTable results(String username, String firstname,String lastname,String position, String department)
    {
        String idIn = username;
        String firstnameIn = firstname;
        String lastnameIn = lastname;
        String positionIn = position;
        String departmentIn = department;

          String[] columnNames = {"User ID",
                                "Firstname",
                                "Lastname",
                                "Position",
                                "Department"};

        Object[][] data = {
            {idIn, firstnameIn,
            lastnameIn, positionIn,departmentIn},
            {"Alison", "Huml",
            "Rowing", new Integer(3), new Boolean(true)},
            {"Kathy", "Walrath",
            "Knitting", new Integer(2), new Boolean(false)},
            {"Sharon", "Zakhour",
            "Speed reading", new Integer(20), new Boolean(true)},
            {"Philip", "Milne",
            "Pool", new Integer(10), new Boolean(false)}
                          };
final JTable table = new JTable(data, columnNames);
        table.setPreferredScrollableViewportSize(new Dimension(500, 70));
        table.setFillsViewportHeight(true);
    /*    JScrollPane scrollPane = new JScrollPane(table);
          add(scrollPane);*/

    return table;

    }


Så spørgsmålet er..
NU oprettes tabellen jo først, også er det meningen at man ved knappen under tabellen, kan kalde på metoden der skal sende de resultater over til den table, så den tabel kan blive opdateret.

Er det ikke muligt?

Det skal nemlig være således at AL sql foretages i SQL klassen, og al gui-relateret skla foregå i GUI klassen.


En venlig person der vil hjælpe?
Avatar billede pashmak Nybegynder
12. maj 2009 - 09:41 #1
fejlen jeg får er følgende: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
Avatar billede arne_v Ekspert
13. maj 2009 - 02:52 #2
Hvordan ser stacktrace ud ?
Avatar billede pashmak Nybegynder
13. maj 2009 - 09:42 #3
Hvordan tjekker jeg det?

Måske er det dette;

Når jeg kører programmet, så printer den som sagt det ud i system.out.println, dermed at der er data i de variabler INDEN de skal over i GUI, menn det er som om at GUI klassens metode til at tage imod, ikke gør det korrekt, selvom jeg har de rigtige parametre med.

Det kan skyldes at jeg allerede i GUI har instanseret den tabel bare med tomme variabler. Man kan vælg godt indsætte data efter de er oprettet ?



Følgende fejl:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at ksys_v1.Database.showAll(Database.java:223)
        at ksys_v1.GUI$7.actionPerformed(GUI.java:283)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6216)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5981)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4583)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4413)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Avatar billede pashmak Nybegynder
13. maj 2009 - 12:01 #4
har lige debugget en del.

Det ser ud som om jeg ikke kan parse noget som helst over til GUI klassen.

Jeg er
Klasser:
[DATABASE] - [GUI]

GUI opretter en database objekt som felt, og Database opretter en GUI objekt som felt.

GUI kalder metode i DATABASE, og DATABASE kører en SQL statement og sender resultatet over i GUI igen, som modtager og gerne skulle printe resultatet ud, men det gør den ikke.

Den når at printe ud(debug print) i DATABASE klassen, men debug print i GUI vil den ikke. Som om den ikke vil sende noget til GUI.

Kan man ikke ha relation mellem to klasser som går begge veje da?
Avatar billede pashmak Nybegynder
13. maj 2009 - 12:11 #5
Ok fandt ud af at jeg havde ikke instanseret en GUI klasse fra databasen, og defor ikker kunne sende tilbage til GUI. Kan selvfølgelig ikke instanser gui, eftersom GUI oprrtter ny frame hver gang.

Så spørgsmålet er, hvordan henter jeg oplysninger fra en Databaseklasse til GUI? Man kan jo ikke envoke den ene vej, også sende noget tilbage ?
Avatar billede arne_v Ekspert
14. maj 2009 - 01:41 #6
Jeg antager at din GUI klasse instantierer din database klasse. Lad din GUI klasse sende en reference til sig selv (this) med over i constructor kaldet og lad denne gemme referencen i en instans variabel. Så kan den instans variabel bruges i enhver metode i database klassen til at få fat i GUI:
Avatar billede arne_v Ekspert
04. juli 2009 - 04:18 #7
Kommet videre ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester