Erstellung eines Netzwerkfähigen Stundenplans

Status
Nicht offen für weitere Antworten.

Eckbert88

Mitglied
Guten Tag allerseits,

ich bin momentan mit einem Komilitonen daran für die Uni eine Anwendung zu schreiben.

wir sind fast am Ziel denke ich wir haben aber das Problem das wir die GUI nicht zum laufen bekommen.

da ich nicht genau weiss wo das Problem liegt, ist es jetzt schwierig hier expliziten Quellcode zu posten.

Falls sich hier jmd. bereit erklären könnte mir zu Helfen wäre ich und auch mein komiltone sehr dankbar. Kurz melden würde dann euch betreffende Klassen zukommen lassen.
Danke Schonmal

Hier noch ein Ausschnitt aus der Aufgabenbeschreibung, damit kann man sich zumindest einen Überblick schaffen.

Jede Gruppe hat die Aufgabe, ein verteiltes System
zur Verwaltung eines Stundenplans für Lehrver-
anstaltungen in einem Semester zu realisieren. Es
sollen interaktiv Lehrveranstaltungen definiert und
ihnen Zeit und Raum zugewiesen werden können.
Dozenten, Semesterverbände (z.B. 3. Semester
WIB), Lehrveranstaltungen und Räume sollen in
dem Zielsystem jederzeit angelegt, editiert und
gelöscht werden können. Für jedes Element kann
eine Reihe von Attributen und Beziehungen festgelegt
werden. Dies sind mindestens für Räume:
Raumnummer, Kapazität, für Lehrveranstaltungen:
EDV-Nr., Bezeichnung, Studiengang, Semester, für
Semesterverbände: Studiengang, Studiengangsemester,
Anzahl der Studierenden, für Dozenten:
Name, Studiengangzughörigkeit, Lehrveranstaltungen.
Zur Durchführung der Stundenplanerstellung müssen
diese in dem System in geeigneter Weise repräsentiert
werden und abrufbar sein. Beim Erstellen
eines Stundenplans werden den Lehrveranstaltungen
Zeiten und Räume zugewiesen. Dabei ist auf
eine konfliktfreie Zuordnung dieser Ressourcen zu
achten.
Wie zu Beginn dieses Abschnitts erwähnt, soll es
sich bei dem Zielsystem um ein verteiltes System
handeln, auf das von mehreren Benutzern simultan
zugriffen werden kann. Im Zuge dessen soll eine
dreischichtige Architektur2 realisiert werden (vgl.
Abbildung 1). Die unterste Schicht wird die Datenbankschicht
sein. Diese Schicht sorgt für die so
genannte Persistenz3 der mit dem System gehandhabten
Daten. Hier soll mit Hilfe von mySQL eine
relationale Datenbank entworfen und implementiert
werden, die sämtliche Daten des Systems aufnehmen
kann.


MFG Eckbert88
 
GUI nicht zum Laufen bringen... Aha...
Probiers mal mit setVisible(true);
Oder schau ob Exception geschmissen werden.
 
wir haben aber das Problem das wir die GUI nicht zum laufen bekommen.

Aha. Und was hat das nun mit Netzwerkprogrammierung zu tun?
Mal davon abgesehen: Lernt man mittlerweile nicht mehr logisch vor zu gehen? Ihr werdet ja nicht die komplette GUI geschrieben und dann erst festgestellt haben dass nix geht. Checkt eure letzten Aktionen und versucht soweit zurück zu gehen bis es wieder geht. Wenn ihr kein SCM Tool ala SVN benutzt habt wird's halt etwas schwerer...

Aber alles in allem hätte die Frage hier Java Basics - Anfänger Themen - java-forum.org oder hier AWT, Swing & SWT - java-forum.org besser rein gepasst. :autsch:

- Alex
 
Aber alles in allem hätte die Frage hier Java Basics - Anfänger Themen - java-forum.org oder hier AWT, Swing & SWT - java-forum.org besser rein gepasst.
*verschoben*

Da "GUI geht nicht" die einzige "Fehlerbeschreibung" ist, ist es wohl im Anfängerforum am besten aufgehoben.
 
hallo

also jetzt poste ich mal einfach den code der hauptklasse in der gui und die fehler ausgabe die ich bekomme wenn ich run file mache. Hoffe hier kann jmd was damit anfangen.

Danke

Java:
/*
 * Created on 04.12.2005
 *
 */
package de.hdm.iSchedule.gui;

import java.rmi.RemoteException;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;

import javax.swing.JTabbedPane;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSplitPane;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;

import de.hdm.iSchedule.data.*;


/**
 * Hauptklasse des Bank-Interface.
 * @author Christian Rathke
 *
 */
public class StundenplanGUI implements ActionListener, TreeSelectionListener {

    private JFrame frame;
    private JTabbedPane tabbedPane;

    private InterfaceClient ic = new InterfaceClient();
    private Dozentformular df = new Dozentformular();
    private Lehrveranstaltungformular lvf = new Lehrveranstaltungformular();
    private Raumformular rf = new Raumformular();
    private Semesterverbandformular svf = new Semesterverbandformular();
    private Stundenplanformular spf = new Stundenplanformular();
    private StundenplanUndSemesterverband sus = new StundenplanUndSemesterverband();
    
    private Dozent selectedDozent = null;
    private Zeit selectedZeit = null;
    private Wochentag selectedWochentag = null;
    private Lehrveranstaltung selectedLehrveranstaltung = null;
    private Raum selectedRaum = null;
    private Semesterverband selectedSemesterverband = null;
    private Stundenplan selectedStundenplan = null;
    private Studiengang selectedStudiengang = null;


    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    private static void createAndShowGUI() {
        StundenplanGUI spg = new StundenplanGUI();
        spg.generateComponents();
    }



    /**
     * Erzeugen der sichtbaren Komponenten.
     * Das Hauptfenster wird in drei Teile für den Kunden-und-Konten-Baum, die
     * Kundenangaben und die Kontoangaben unterteilt. Zusätzlich wird die Menü-
     * Erzeugung angestoßen.
     *
     */
    void generateComponents() {
        frame = new JFrame ("iSchedule");
        frame.setSize(800, 720);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        /*
         * Für den Kunden-und-Konten-Baum wird zunächst die sichtbare Komponente erzeugt.
         * Danach wird diese mit den Inhalten erzeugt, die vom Applikationsserver geliefert
         * werden.
         */
 
        Container pane = new Container();
        Component treePane = sus.generateComponents(this);


        tabbedPane = new JTabbedPane();
        tabbedPane.addTab( "Stundenplan", spf.generateComponents(this));
        tabbedPane.addTab( "Semesterverband", svf.generateComponents(this));
        tabbedPane.addTab( "Raum", rf.generateComponents(this));
        tabbedPane.addTab( "Dozent", df.generateComponents(this));
        tabbedPane.addTab( "Lehrveranstaltung", lvf.generateComponents(this));

        JSplitPane rightPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, tabbedPane, pane);
        JSplitPane mainPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,treePane,rightPane);

      
        rightPane.setDividerLocation(300);
        mainPane.setDividerLocation(200);
        frame.getContentPane().add(mainPane, BorderLayout.CENTER);

        /*
         * Erzeugen der Menüstrukturen.
         */
        JMenuBar menuBar = new JMenuBar();
        generateMenus(menuBar);

        menuBar.setOpaque(true);
        menuBar.setPreferredSize(new Dimension(200, 20));
        frame.setJMenuBar(menuBar);

        frame.pack();
        frame.setVisible(true);
    }


        protected void generateMenus(JMenuBar menubar) {
        JMenu aktionenMenu = new JMenu("Aktionen");

        JMenuItem tmpMenuItem = new JMenuItem("Aktualisieren");
        tmpMenuItem.setActionCommand("Aktualisieren");
        tmpMenuItem.addActionListener(new ActionListener () {
            public void actionPerformed(ActionEvent e){
                if (e.getActionCommand().equalsIgnoreCase("Aktualisieren")){
                    spf.removeStundenplan();
                    svf.removeSemesterverband();
                    sus.update(ic.getAllStundenplanUndSemesterverband());
    }
            }
        });
        aktionenMenu.add(tmpMenuItem);

        tmpMenuItem = new JMenuItem("Beenden");
        tmpMenuItem.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent e){
                System.exit(0);
            }
        });
        aktionenMenu.add(tmpMenuItem);

        menubar.add(aktionenMenu);



        JMenu dozentMenu = new JMenu("Stundenplan");

        tmpMenuItem = new JMenuItem("Ändern");
        tmpMenuItem.setActionCommand("changeStundenplan");
        tmpMenuItem.addActionListener(this);
        dozentMenu.add(tmpMenuItem);

        tmpMenuItem = new JMenuItem("Neu");
        tmpMenuItem.setActionCommand("createStundenplan");
        tmpMenuItem.addActionListener(this);
        dozentMenu.add(tmpMenuItem);

        tmpMenuItem = new JMenuItem("Löschen");
        tmpMenuItem.setActionCommand("deleteStundenplan");
        tmpMenuItem.addActionListener(this);
        dozentMenu.add(tmpMenuItem);

        tmpMenuItem = new JMenuItem("Suchen");
        tmpMenuItem.setActionCommand("findStundenplan");
        tmpMenuItem.addActionListener(this);
        dozentMenu.add(tmpMenuItem);

        menubar.add(dozentMenu);


        JMenu svMenu = new JMenu("Semesterverband");

        tmpMenuItem = new JMenuItem("Ändern");
        tmpMenuItem.setActionCommand("changeSemesterverband");
        tmpMenuItem.addActionListener(this);
        svMenu.add(tmpMenuItem);

        tmpMenuItem = new JMenuItem("Neu");
        tmpMenuItem.setActionCommand("createSemesterverband");
        tmpMenuItem.addActionListener(this);
        svMenu.add(tmpMenuItem);

        tmpMenuItem = new JMenuItem("Löschen");
        tmpMenuItem.setActionCommand("createSemesterverband");
        tmpMenuItem.addActionListener(this);
        svMenu.add(tmpMenuItem);

        tmpMenuItem = new JMenuItem("Suchen");
        tmpMenuItem.setActionCommand("findSemesterverband");
        tmpMenuItem.addActionListener(this);
        svMenu.add(tmpMenuItem);

        menubar.add(svMenu);



        JMenu lvMenu = new JMenu("Lehrveranstaltung");

        tmpMenuItem = new JMenuItem("Ändern");
        tmpMenuItem.setActionCommand("changeLehrveranstaltung");
        tmpMenuItem.addActionListener(this);
        lvMenu.add(tmpMenuItem);

        tmpMenuItem = new JMenuItem("Neu");
        tmpMenuItem.setActionCommand("createLehrveranstaltung");
        tmpMenuItem.addActionListener(this);
        lvMenu.add(tmpMenuItem);

        tmpMenuItem = new JMenuItem("Löschen");
        tmpMenuItem.setActionCommand("createLehrveranstaltung");
        tmpMenuItem.addActionListener(this);
        lvMenu.add(tmpMenuItem);


        menubar.add(lvMenu);

    }

    /**
     * Das Setzen des ausgewählten Kunden wird an die Unterkomponenten weitergereicht.
     * @param c
     */
    private void setSelectedStundenplan (Stundenplan sp){
        selectedStundenplan = sp;
        spf.setStundenplan(sp);
    }

    /**
     * Das Entfernen des ausgewählten Kunden wird an die Unterkomponenten weitergereicht.
     *
     */
    private void removeSelectedStundenplan () {
        spf.removeStundenplan();
        sus.removeStundenplanTreeNode(selectedStundenplan);
        selectedStundenplan = null;
    }

    /**
     * Das Setzen des ausgewählten Kontos wird an die Unterkomponente weitergereicht.
     * @param a
     */
    private void setSelectedSemesterverband (Semesterverband sv) {
        selectedSemesterverband = sv;
        svf.setSemesterverband(sv);
    }

    /**
     * Das Löschen des ausgewählten Kontos wird an die Unterkomponente weitergereicht.
     *
     */
    private void removeSelectedSemesterverband() {
        svf.removeSemesterverband();
        sus.removeSemesterverbandTreeNode(selectedSemesterverband);
        selectedSemesterverband = null;

    }

    /**
     * Implementierung der vom Interface ActionListener geforderten Methode zur Reaktion
     * auf ActionEvents.
     */
    public void actionPerformed(ActionEvent e){
        if (e.getActionCommand().equals("changeDozent")){
            if (selectedDozent != null) {
            ic.modifyDozent(selectedDozent, df.getName(), selectedStudiengang, selectedLehrveranstaltung);
        }
    }
        if (e.getActionCommand().equals("createDozent")){
            if (selectedDozent != null) {
            ic.createDozent(df.getName(), selectedStudiengang, selectedLehrveranstaltung);
        }
    }
        if (e.getActionCommand().equals("deleteDozent")){
            if (selectedDozent != null) {
            ic.deleteDozent(selectedDozent);
        }
    }
       if (e.getActionCommand().equals("changeLehrveranstaltung")){
            if (selectedLehrveranstaltung != null) {
            ic.modifyLehrveranstaltung(selectedLehrveranstaltung, lvf.getEdvNr(), lvf.getBezeichnung(), selectedStudiengang, selectedSemesterverband);
   }
  }
       if (e.getActionCommand().equals("createLehrveranstaltung")){
            if (selectedLehrveranstaltung != null) {
            ic.createLehrveranstaltung(lvf.getEdvNr(), lvf.getBezeichnung(), selectedStudiengang, selectedSemesterverband);
   }
  }
       if (e.getActionCommand().equals("deleteLehrveranstaltung")){
            if (selectedLehrveranstaltung != null) {
            ic.deleteLehrveranstaltung(selectedLehrveranstaltung);
   }
  }
       if (e.getActionCommand().equals("changeRaum")){
            if (selectedRaum != null) {
            ic.modifyRaum(selectedRaum, rf.getRaumNr(), rf.getKapazitaet());
        }
    }
       if (e.getActionCommand().equals("createRaum")){
            if (selectedRaum != null) {
            ic.createRaum(rf.getRaumNr(), rf.getKapazitaet());
        }
    }
       if (e.getActionCommand().equals("deleteRaum")){
            if (selectedRaum != null) {
            ic.deleteRaum(selectedRaum);
        }
    }

       if (e.getActionCommand().equals("changeStundenplan")){
            if (selectedStundenplan != null) {
                setSelectedStundenplan(ic.modifyStundenplan(selectedStundenplan, selectedLehrveranstaltung, selectedZeit, selectedWochentag, selectedRaum));
                sus.modifyStundenplanTreeNode(selectedStundenplan);
            } else {
                JOptionPane.showMessageDialog(frame, "Kein Stundenplan ausgewählt!");
            }
            return;
        }

       if (e.getActionCommand().equals("createStundenplan")) {
            if (selectedStundenplan != null){
                System.out.println("Creating Stundenplan");
                setSelectedStundenplan(ic.createStundenplan(selectedLehrveranstaltung, selectedZeit, selectedWochentag, selectedRaum));
                sus.addStundenplanTreeNode(new StundenplanInfo(selectedStundenplan));
            }
        } else {
            JOptionPane.showMessageDialog(frame, "Kein Stundenplan ausgewählt!");
        }

       if (e.getActionCommand().equals("deleteStundenplan")) {
            if (selectedStundenplan != null) {
                if (JOptionPane.showConfirmDialog(frame, "Soll Stundenplan "
                        + spf.getId() +
                         " wirklich gelöscht werden?", "Bestätigung",
                        JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                    ic.deleteStundenplan(selectedStundenplan);
                    removeSelectedStundenplan();
                }
            } else {
                JOptionPane.showMessageDialog(frame, "Kein Stundenplan ausgewählt!");
            }
            return;
        }

        if (e.getActionCommand().equals("changeSemesterverband")){
            if (selectedSemesterverband != null) {
                setSelectedSemesterverband(ic.modifySemesterverband(selectedSemesterverband, selectedStudiengang, svf.getStudiengangsem(), svf.getAnzahl()));
                sus.modifySemesterverbandTreeNode(selectedSemesterverband);
            } else {
                JOptionPane.showMessageDialog(frame, "Kein Semesterverband ausgewählt!");
            }
            return;
        }

        if (e.getActionCommand().equals("createSemesterverband")) {
            if (selectedSemesterverband != null){
                System.out.println("Creating Semesterverband");
                setSelectedSemesterverband((ic.createSemesterverband(selectedStudiengang, svf.getStudiengangsem(), svf.getAnzahl())));
                sus.addSemesterverbandTreeNode(new SemesterverbandInfo(selectedSemesterverband));
            }
        } else {
            JOptionPane.showMessageDialog(frame, "Kein Stundenplan ausgewählt!");
        }

        if (e.getActionCommand().equals("deleteSemesterverband")) {
            if (selectedSemesterverband != null) {
                if (JOptionPane.showConfirmDialog(frame, "Soll Semesterverband "
                        + svf.getId() +
                         " wirklich gelöscht werden?", "Bestätigung",
                        JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                    ic.deleteSemesterverband(selectedSemesterverband);
                    removeSelectedSemesterverband();
                }
            } else {
                JOptionPane.showMessageDialog(frame, "Kein Semesterverband ausgewählt!");
            }
            return;
        }
     }


    public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = sus.getLastSelectedPathComponent();
        if (node != null) {
            if (node.getUserObject() instanceof SemesterverbandInfo) {
                setSelectedStundenplan(null);
                sus.setSelectedStundenplanNode(null);

                SemesterverbandInfo svi = (SemesterverbandInfo)node.getUserObject();
                setSelectedSemesterverband(svi.getSemesterverband());
                sus.setSelectedSemesterverbandNode(node);

            } else {
                StundenplanInfo si = (StundenplanInfo)node.getUserObject();
                setSelectedStundenplan(si.getStundenplan());
                sus.setSelectedStundenplanNode(node);

                node = (DefaultMutableTreeNode)node.getParent();
                SemesterverbandInfo svi = (SemesterverbandInfo)node.getUserObject();
                setSelectedSemesterverband(svi.getSemesterverband());
                sus.setSelectedSemesterverbandNode(node);
            }
        }
    }



    }

Fehler Meldung

init:
deps-jar:
compile-single:
run-single:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1014)
at java.awt.Container.add(Container.java:348)
at de.hdm.iSchedule.gui.Semesterverbandformular.generateComponents(Semesterverbandformular.java:86)
at de.hdm.iSchedule.gui.StundenplanGUI.generateComponents(StundenplanGUI.java:99)
at de.hdm.iSchedule.gui.StundenplanGUI.createAndShowGUI(StundenplanGUI.java:69)
at de.hdm.iSchedule.gui.StundenplanGUI.access$000(StundenplanGUI.java:36)
at de.hdm.iSchedule.gui.StundenplanGUI$1.run(StundenplanGUI.java:62)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
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)
BUILD SUCCESSFUL (total time: 2 seconds)
 
Also wenn ich heute Abend nicht total fertig bin und was übersehen habe, versuchste wohl in der Methode: Semesterverbandformular->generateComponents() eine null-Wert dem Container zu übergeben?!? Aber ich hab n paar Bierchen weg und kann mir nicht ganz vorstellen, dass ihr das nicht gefunden hättet 😀
 
Also wenn ich heute Abend nicht total fertig bin und was übersehen habe, versuchste wohl in der Methode: Semesterverbandformular->generateComponents() eine null-Wert dem Container zu übergeben?!? Aber ich hab n paar Bierchen weg und kann mir nicht ganz vorstellen, dass ihr das nicht gefunden hättet 😀

Passt schon so 😉
Hatte nur noch keiner Zeit/Lust was auch immer zu antworten 😉
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben