Aufruf einer andere Classe funktioniert nicht ?

Code46

Erfahrenes Mitglied
hi leute ,

Ich habe eine kleines problem. Ich bin bischen verwirrt. Ich versuche eine andere classe aufzrufen jedoch gibt er mir eine fehlermeldung.

btnView funktioniert nicht, jedoch funktioniert btnReport ?
Habe für beide auch ein ActionListener.
Java:
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
 
public class Lecturer extends JFrame implements ActionListener
{
    public static final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
 
    final JButton btnView = new JButton("View Attendence");
    final JButton btnReport = new JButton("Create Report");
    
    public Lecturer() throws Exception {
        super("Lecturer"); //Window name
        setDefaultCloseOperation(EXIT_ON_CLOSE); // Pressing X will close the Window
 
        final JPanel north = new JPanel();
        final JPanel south = new JPanel();
        final JPanel east = new JPanel();
        final JPanel west = new JPanel();
        final JPanel center = new JPanel();
        
        add("North", north);
        add("South", south);
        add("East", east);
        add("West", west);
        add("Center", center);
        
        
        north.setBorder(BorderFactory.createTitledBorder("Date&Time Display"));
        final BoxLayout layout = new BoxLayout(north, BoxLayout.X_AXIS);
        final JLabel datetime = new JLabel("");
        datetime.setFont(new Font("Verdana", Font.PLAIN, 50));
        north.add(datetime);
        
        center.setBorder(BorderFactory.createTitledBorder("Select one of the items"));
        center.setLayout(new GridLayout(1, 2));
        center.add(btnView);
        center.add(btnReport);
        btnView.addActionListener(this);
        btnReport.addActionListener(this);
        
        new Timer().scheduleAtFixedRate(new TimerTask()
        {
            @Override
            public void run() {
                datetime.setText(dateFormat.format(new Date()));
            } 
        }, 0, 100);
    }

    public void actionPerformed(final ActionEvent sc) {
        if(sc.getSource()== btnView){

                new Project(); // Hier ist der Fehler :
//Unreported Exception java.lang.Exception must be caught or declared to be thrown. New //instance ignored.

        }
        
        if(sc.getSource()==btnReport){
            new Create_Report();
        
        }

    }
    
        public static void main(final String[] args) throws Exception {
        final Lecturer me = new Lecturer();
        me.pack();
        me.setVisible(true);
    }
    

}
Wisst ihr was das problem sein könnte ?

Danke
 
Zuletzt bearbeitet:

sheel

I love Asm
Die Meldung sagt ja schon ziemlich eindeutig, was los ist.
Der Konstruktor von Project könnte eventuell eine Exception machen,
die muss behandelt werden.
Java:
try {
    new Project();
} catch (Exception e) {
    //Irgendeine Fehlermeldung oder so
}
 

Akeshihiro

Erfahrenes Mitglied
Was funktioniert denn nicht? Meine Glaskugel ist leider in der Reparatur ... Wir wissen nicht, was wann wo und wieso passieren soll und was davon eben nicht geht. Hast du mal dein Programm durchdebuged?
 

Code46

Erfahrenes Mitglied
Ich drücke auf den button und da kommt nichts. Keine Fehlermeldung gar nichts. Ich habe dort ein System.out.println eingebaut um zu testen ob der Button funktionsfehig ist, dies klapt jedoch.

Ich weis nicht wo der Fehler liegen könnte
 

sheel

I love Asm
:confused:
Was soll denn auch passieren?
Du legst ein Project an und machst nichts mehr damit.

(Theoretisch könnte sich ein Konstruktor schon bemerkbar machen,
aber dann hat er wahrscheinlich seinen Sinn verfehlt.
Wie schaut die Projectklasse aus?).
 

Code46

Erfahrenes Mitglied
Das ist die Project Klasse

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package StudentRegisterSystem;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;
 
import javax.swing.*;
 
public class Project extends JFrame implements ActionListener
{
    public static final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    public final JButton btnclose = new JButton("Close");
    public final JButton btnSearch = new JButton("Search");
   
    
    public Project() throws Exception {
        super("Project"); 
        setDefaultCloseOperation(EXIT_ON_CLOSE); 
 
        final JPanel north = new JPanel();
        final JPanel south = new JPanel();
        final JPanel east = new JPanel();
        final JPanel west = new JPanel();
        final JPanel center = new JPanel();
        
        add("North", north);
        add("South", south);
        add("East", east);
        add("West", west);
        add("Center", center);
        
        final DBEngine dbengine = new DBEngine();
        final Vector<Vector<String>> data = dbengine.getStudentRecord();
        // create header for the table
        final Vector<String> header = new Vector<String>();
        header.add("StudentID"); 
        header.add("Student Name"); 
        header.add("Student Lastname"); 
        header.add("Student Email"); 
        header.add("StudentsRFID"); 
 
        final JTable table = new JTable(data, header);
        
        north.setBorder(BorderFactory.createTitledBorder("Date&Time Display"));
        final BoxLayout layout = new BoxLayout(north, BoxLayout.X_AXIS);
        final JLabel datetime = new JLabel("");
        datetime.setFont(new Font("Verdana", Font.PLAIN, 50));
        north.add(datetime);
        
        center.setBorder(BorderFactory.createTitledBorder("Attendence Record"));
        center.setLayout(new BorderLayout());
        center.add(table);
        center.add(table.getTableHeader(), BorderLayout.PAGE_START);
        center.add(table, BorderLayout.CENTER);
        center.add(table.getTableHeader(), BorderLayout.PAGE_START);
        
        south.setBorder(BorderFactory.createTitledBorder("Selection"));
        south.add(btnclose);
        final BoxLayout la = new BoxLayout(south, BoxLayout.X_AXIS);
        
        btnclose.addActionListener(this);
        btnSearch.addActionListener(this);
        
        new Timer().scheduleAtFixedRate(new TimerTask()
        {
            @Override
            public void run() {
                datetime.setText(dateFormat.format(new Date()));
            } 
        }, 0, 100);
    }
    
    public void actionPerformed(final ActionEvent sc) {
        if (sc.getSource() == btnclose) {
            System.exit(0);
        }
    }
    
    public static void main(final String[] args) throws Exception {
        final Project me = new Project();
        me.pack();
        me.setVisible(true);
    }
}
 

Akeshihiro

Erfahrenes Mitglied
Na also, das ist doch schonmal was anderes ... Du willst wahrscheinlich, dass da ein neues Fenster auftaucht. Aber in dem Konstruktor von Project wird das Frame nicht sichtbar und gar nix, daher passiert auch nix, jedenfalls optisch nicht.

Die Aufrufe von pack() und setVisible() müssten aus der main-Methode raus und ganz ans Ende vom Konstruktor.

Die main-Methode brauchst du übrigens pro Anwendung nur ein mal, nicht in jeder Klasse, außer du willst verschiedene Starter für eine Anwendung. Aber das ist eher unüblich.
 

Neue Beiträge