Hej kära folket!! Ja du, det var ett antal fel där... Skriva från Vector till en .dat file.
har lite problem för att skriva från vektor til filen har lagt två metoder sparaObjekt , och läsInObjekt ... därefter anropar jag dom i en actionPerformed som är kopplat till Interfaces JButton. Problemet är när jag compilerar program då värkar vara ok . Men man får ingen resultat Filen skapas inte som den skulle Göra
sparaObjekt metoden , och inte heller läsa in ... tackar för allt hjälp.
Här är koden
// Hej.java
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedOutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
public class Hej extends JFrame implements ActionListener
{
JTextField svar = new JTextField(10);
JLabel hälsning = new JLabel();
JLabel intext = new JLabel("Skriv in ditt namn", JLabel.RIGHT);
JButton klar = new JButton("klar");
JButton print = new JButton("print"); // *** FIX ***
Color lightBlue = new Color(180,180,255);
Color Brown = new Color(255,150,50);
JButton spara = new JButton("Spara");
JButton lista = new JButton ("Visa high Score");
private String FILNAMN = "Lista.dat" ;
Vector higScore = new Vector();
public Hej(){
//Själva containern
Container c = getContentPane();
c.setLayout(new FlowLayout());
c.setBackground(lightBlue);
c.add(intext);
c.add(svar);
c.add(hälsning);
c.add(klar);
c.add(print);
c.add(spara);
c.add(lista);
// Skapar en ny label
intext.setOpaque (false);
intext.setForeground(Brown);
intext.setFont(new Font("sansSerif", Font.PLAIN, 20));
//Visar vart på fönstret rutan ska vara
hälsning.setHorizontalAlignment(JLabel.RIGHT);
hälsning.setForeground(Brown);
hälsning.setFont(new Font("SansSerif", Font.BOLD, 20));
//anger storlek på fönstret
setSize(640,480);
setVisible(true);
//metod för Knappen klar
print.addActionListener(this);
klar.addActionListener(this);
klar.setHorizontalAlignment(JButton.RIGHT);
klar.setVerticalAlignment(JButton.TOP);
klar.isSelected();
klar.setForeground(Brown);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main (String argv[]){
Hej h = new Hej();
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == klar) {
if (svar.getText().equals("")) { // OM du har inte skrivit någoting i text boxen
JOptionPane.showMessageDialog(null , "Du har inte skrivit något namn");
}
else {
higScore.add(svar.getText()); // Annars läger du in texten i vectorn.
svar.setText("");
}
}
else if (e.getSource() == print) { // print koden
for (int i = 0; i < higScore.size(); i++) { // forloop for vektorn som går genom och kollar efter längden.
String str = (String) higScore.get(i); // därefter skrivs utt värdena.
System.out.println(str);
}
}
if (e.getSource() == spara){
for (int i = 0; i< higScore.size(); i++)
sparaObjekt(higScore, FILNAMN);
JOptionPane.showMessageDialog(null, "Du har sparat");
}
if (e.getSource()==lista){
läsInObjekt (FILNAMN);
// här skrivs värdena
}
}
public static void sparaObjekt(Object higScore, String FILNAMN){
try {
ObjectOutputStream out = new ObjectOutputStream (new FileOutputStream(FILNAMN));
out.writeObject(higScore);
out.close();
out.flush();
}
catch (IOException ie) {
ie.printStackTrace(); System.exit(1);}
}
public static Object läsInObjekt(String FILNAMN){
Object higScore = null;
try {
ObjectInputStream in = new ObjectInputStream (new FileInputStream(FILNAMN));
higScore = in.readObject();
in.close();
}
catch (IOException ie) {
ie.printStackTrace(); System.exit(1);}
catch (ClassNotFoundException ce) {
ce.printStackTrace(); System.exit(2);}
return higScore;
}
}Sv: Skriva från Vector till en .dat file.
1. Du inte lagt till actionslistners på knapparna "Spara" och "Visa high Score".
2. Du har en for sats när användaren klickar på spara (om du har löst det ovanstående problemet), men du sparar hela tiden samma objekt (vectorn), vilket i princip betyder att du sparar om vectorn vector.size() gånger.
3. När du ska hämta in vectorn från filen så har du glömt att tilldela den till vectorn så även om du löser 1 så kommer du inte kunna att se att du har hämtat vectorn från filen.
4. I sparaObject så använder du flush efter att du har stängt filen, gör ingen som helst nytta där. Flush kommer ändå att användas när du stänger filen så du behöver inte sätta den före close heller...
Ett litet tips, när du är osäker om visa delar av koden körs, lägg in lite System.out.println() i koden för att se att dom olika delarna verkligen körs sen ska du givetvis ta bort alla println satser...