Desperation! Hvor er fejlen i min kode?
Hold godt fast for her poster jeg kode! Jeg har et problem med at få mit program til at køre ordentligt. Min mail ligger i JournalGUI, som åbner med en fejl i konsollen der hedder java.io.StreamCorruptedException: unexpected EOF in middle of data block. Dog åbner den og man kan benytte søgefeltet. Men normalt (og det HAR virket, jeg ved bare ikke hvad jeg ændrede) skal JournalGUI så åbne næste GUI, der hedder KlientJournalGUI, men der kommer der en fejl i linie 68 i Controller-klassen (Iterator it = jl.iterator();)og i linie 36 i JournalGUI(Vector v = cont.soegEfter(soegeFelt.getText());). Jeg er bare en ÅND til det her og jeg har revet mig i hårrødderne hele dagen. Er der ikek nok en god sjæl der kan kigge det igennem? Måske er problemet noget med min liste, som jeg opretter gennem min testklasse. Jeg har prøvet at gemme to forskellige personer så der ligger mere end eet objekt i den serialiserede fil på disken. Måske er det noget med at jeg opretter en instans af Controller for meget? Jeg ved det ikke...MVH Elisabeth
CONTROLLER-KLASSEN:
import java.io.*;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;
/**
* @author ehdaniel
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class Controller {
private JournalObjekt journal;
private JournalListe jl, hentListe;
private ObjectInputStream in;
private ObjectOutputStream out;
private FileInputStream ois;
public Controller(){
journal = new JournalObjekt();
jl = hentJournalListe();
}
public void opretNyJournal(String navn, String adr, String tlf, String cpr, Konsultationer kons){
journal = new JournalObjekt(navn, adr, tlf, cpr, kons);
}
private JournalListe hentJournalListe(){
try {
ois = new FileInputStream("filnavn.ser");
} catch (FileNotFoundException e) {
System.out.println("Filen kunne ikke findes" + e);
//derefter laver vi en ny fil og gemmer den (foregår i JournalListe-klassen):
jl = new JournalListe();
try {
jl.gemJournalListe();
} catch (IOException b) {
//Hvis ikke filen kan gemmes, så fang fejlen og skriv den ud:
System.out.println("filen kunne ikke gemmes" + b);
}
}
try {
in = new ObjectInputStream(ois);
} catch (IOException e) {
}
try {
hentListe = (JournalListe) in.readObject();
} catch (IOException e) {
System.out.println(e);
} catch (ClassNotFoundException e) {
}
try {
in.close();
} catch (IOException e) {
}
System.out.println(hentListe);
return hentListe;
}
public Vector soegEfter(String navn){
Iterator it = jl.iterator();
Vector returVector = new Vector();
JournalObjekt currentJournal;
int i = 1;
while(it.hasNext()){
currentJournal = (JournalObjekt)it.next();
if(currentJournal.getNavn().equalsIgnoreCase(navn) ){
returVector.add(currentJournal);
}
// System.out.println(i);
// i = i++;
}
System.out.println(returVector);
return returVector;
}
/**
* Method gemJournalListe.
* Beder JournalListe-objektet jl om at gemme sig selv.
*/
public void gemJournalListe() throws IOException
{try {
jl.gemJournalListe();
} catch (IOException e) {
System.out.println(e);//skriver fejlen ud i konsollen.
}
}
public void tilfoejJournalObjekt(JournalObjekt j){
jl.add(j);
//System.out.println(jl);
}
public void gemJournalObjekt(JournalObjekt j){
if(jl.contains(j)){
System.out.println("objektet eksisterer i listen");
int i =jl.indexOf(j);
System.out.println("gemmer objektet på plads" + i);
jl.set(i, j);
try {
gemJournalListe();
} catch (IOException e) {
System.out.println(e);
} //så gemmer vi også lige hele listen..
}
//objelktet eksisterer ikke..
System.out.println("Objektet eksisterer ikke, og gemmes i Listen..");
gemJournalObjekt(j);
}
}
JOURNALGUI:import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
/**
* @author ehdaniel
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class JournalGUI extends Forside implements ActionListener{
private JLabel label = new JLabel("Søg efter journal:");
public JTextField soegeFelt = new JTextField(20);
private JButton soeg, nyKlient;
Container container = getContentPane();
private Controller cont;
public JournalGUI(){
cont = new Controller();
JPanel journalPanel = new JPanel();
// journalPanel.setLayout(new FlowLayout());
soeg = new JButton("Søg!");
nyKlient = new JButton("Opret ny klient:");
journalPanel.add(label, BorderLayout.SOUTH);
journalPanel.add(soegeFelt, BorderLayout.SOUTH);
journalPanel.add(soeg, BorderLayout.SOUTH);
journalPanel.add(nyKlient, BorderLayout.SOUTH);
container.add(journalPanel, BorderLayout.SOUTH);
tabJournal.add(journalPanel);
soeg.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == soeg){
Vector v = cont.soegEfter(soegeFelt.getText());
System.out.println("Der blev trykket på søg!");
System.out.println(v);
if(v.isEmpty()){
System.out.println("der findes ingen med navnet:" + soegeFelt.getText());
}
if (v.size()>1){
System.out.println("Der findes flere med navnet.. vi kan pt. ikke håndtere dette..");
}
if (v.size() ==1){
System.out.println("Der blev fundet 1 resultat, og det er her: ");
JournalObjekt jo = (JournalObjekt) v.get(0);
System.out.println(jo.getAdresse());
KlientJournalGUI kjg = new KlientJournalGUI(jo,cont);
//String navn = jo.getNavn();
// String n= jo.getNavn();
// navn.setText(n);
}
}
}
public static void main(String[] args) {
JournalGUI jg = new JournalGUI();
jg.setVisible(true);
//Forside f = new Forside();
//f.setVisible(true);
}
}
KLIENTJOURNALGUI:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
/**
* @author ehdaniel
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class KlientJournalGUI extends Forside implements ActionListener{
private JButton gem, kontrakt, diagnoseskema;
private JTextField navn = new JTextField();
private JTextField adresse = new JTextField();
private JTextField tlfnr = new JTextField();
private JTextField cprnr = new JTextField();
private JTextField dato = new JTextField();
private JournalObjekt jo;
private JTextField konsultationsnr = new JTextField();
private JTextArea journal = new JTextArea(" Journal:",15,60);
// HUSK AT DER IKKE KAN GEMMES SÆRLIG MEGET TEKST!!!
private JLabel tomKnap1, tomKnap2,tomKnap3, tomKnap4, tomKnap5,
tomKnap6, tomKnap7, tomKnap8, tomKnap9, tomKnap10, tomKnap11, tomKnap12,
tomKnap13, tomKnap14, tomKnap15, tomKnap16;
private String n = new String();
private Controller cont;
public KlientJournalGUI(JournalObjekt initJo, Controller c){
jo= initJo;
cont = c;
JPanel north = new JPanel();
JPanel center = new JPanel();
JPanel south = new JPanel();
north.setLayout(new GridLayout(6,2));
center.setLayout(new GridLayout(1,1));
south.setLayout(new GridLayout(1,1));
JLabel label = new JLabel("Navn:", JLabel.LEFT);
north.add(label);
north.add(navn);
tomKnap1 = new JLabel ("");// vær lige obs om det skal være med JLabel først
north.add(tomKnap1);
tomKnap2 = new JLabel ("");
north.add(tomKnap2);
kontrakt = new JButton("Kontrakt");
kontrakt.addActionListener(this);
north.add(kontrakt);
label = new JLabel("Adresse:", JLabel.LEFT);
north.add(label);
north.add(adresse);
tomKnap3 = new JLabel ("");
north.add(tomKnap3);
tomKnap4 = new JLabel ("");
north.add(tomKnap4);
tomKnap5 = new JLabel ("");
north.add(tomKnap5);
label = new JLabel("Tlf.nr:", JLabel.LEFT);
north.add(label);
north.add(tlfnr);
tomKnap6 = new JLabel ("");
north.add(tomKnap6);
tomKnap7 = new JLabel ("");
north.add(tomKnap7);
diagnoseskema = new JButton("Diagnoseskema");
diagnoseskema.addActionListener(this);
north.add(diagnoseskema);
label = new JLabel("Cpr.nr:", JLabel.LEFT);
north.add(label);
north.add(cprnr);
tomKnap8 = new JLabel ("");
north.add(tomKnap8);
tomKnap9 = new JLabel ("");
north.add(tomKnap9);
tomKnap10 = new JLabel ("");
north.add(tomKnap10);
tomKnap11 = new JLabel ("");
north.add(tomKnap11);
tomKnap12 = new JLabel ("");
north.add(tomKnap12);
tomKnap13 = new JLabel ("");
north.add(tomKnap13);
tomKnap14 = new JLabel ("");
north.add(tomKnap14);
tomKnap15 = new JLabel ("");
north.add(tomKnap15);
label = new JLabel("Dato:", JLabel.LEFT);
north.add(label);
north.add(dato);
tomKnap16 = new JLabel ("");
north.add(tomKnap16);
label = new JLabel("Konsultationsnr:", JLabel.RIGHT);
north.add(label);
north.add(konsultationsnr);
center.add(journal);
gem = new JButton("Gem");
// HUSK AT RETURNERE TIL JournalGUI!!!
gem.addActionListener(this);
south.add(gem);
tabJournal.add(north,BorderLayout.NORTH);
tabJournal.add(center, BorderLayout.CENTER);
tabJournal.add(south, BorderLayout.SOUTH);
this.setVisible(true);
// Her sætter vi tekst:
navn.setText(jo.getNavn());
adresse.setText(jo.getAdresse());
tlfnr.setText(jo.getTlfnr());
cprnr.setText(jo.getCprnr());
//System.out.println(adresse);
}
public void actionPerformed(ActionEvent event){
if (event.getSource() == gem){
// Herfra henter vi de opdaterede input:
jo.setNavn(navn.getText());
jo.setAdresse(adresse.getText());
jo.setTlfnr(navn.getText());
jo.setCprnr(navn.getText());
System.out.println("Gemmer");
//Controller controller = new Controller();
cont.gemJournalObjekt(jo);
System.out.println("Virker jeg mon?");
}else if (event.getSource()==kontrakt){
System.out.println("Kontrakt");
}else if (event.getSource()==diagnoseskema){
System.out.println("Diagnoseskema");
}
}
//public void setText()
//{
// navn.setText(jo.getNavn());
//
//}
//public static void main(String[] args){
//KlientJournalGUI k = new KlientJournalGUI();
//k.setVisible(true);
//}
}
TEST-KLASSE:
import java.io.IOException;
import java.util.Vector;
/**
* @author ehdaniel
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class TestJournal {
private JournalObjekt minJournal, minJournal2, minJournal3;
private String minStreng;
private JournalListe jl;
public TestJournal(){
Konsultationer konsultationer = new Konsultationer(1, "blabla");
minJournal = new JournalObjekt("Per Nielsen", "Grønnegade", "86254565", "280260-5725", konsultationer);
Controller nyCont = new Controller();
nyCont.tilfoejJournalObjekt(minJournal);
nyCont.soegEfter("Per Nielsen");
try {
nyCont.gemJournalListe();
} catch (IOException e) {
}
}
public static void main(String[] args) {
TestJournal minTest = new TestJournal();
}
}
