Je suis en train de créer un programme d'interface graphique, en utilisant netbeans, qui est censé être une interface pour gérer les enregistrements dans un magasin vidéo.Comment charger des enregistrements dans une jTable à partir d'un fichier?
Ceci est l'interface. Il s'agit de deux onglets, et un côté permet à une personne d'ajouter des enregistrements, tandis que l'autre onglet les affiche. Lorsqu'une personne ajoute des enregistrements, ils sont ajoutés à un fichier .dat nommé output. Je voudrais utiliser le fichier .dat comme une zone de stockage permanente pour les enregistrements vidéo, et fondamentalement ce que je veux arriver est que quand on charge la classe GUI, le programme charge tous les enregistrements du fichier .dat. J'ai déjà créé mon code, mais j'obtiens l'erreur suivante:
run:
java.io.EOFException
at java.io.RandomAccessFile.readChar(RandomAccessFile.java:773)
at videostore.BinaryFile.getString(BinaryFile.java:82)
at videostore.BinaryFile.load(BinaryFile.java:116)
at videostore.VideoStore.main(VideoStore.java:409)
Exception in thread "main" java.lang.NullPointerException
at videostore.VideoStore.main(VideoStore.java:420)
/Users/(my Name)/Library/Caches/NetBeans/8.1/executor-snippets/run.xml:53: Java returned: 1
BUILD FAILED (total time: 2 seconds)
Ensuite, je vais coller tout le code pertinent ci-dessous.
Dans la principale méthode de la classe GUI, nommée VideoStore .java:
file = new BinaryFile("/Users/hanaezz/Desktop/output.dat");
int length = file.length();
int ID = 1;
for (int xx = 0; xx < length; xx += file.getRecordLength()) {
Video load = file.load(xx);
String tempName = load.getVideoName();
String tempProd = load.getProducer();
String tempRat = load.getRating();
String tempGenre = load.getGenre();
short tempNum = load.getVidNum();
float tempPrice = load.getvideoPrice();
Object[] row = {ID, tempName, tempProd, tempGenre, tempRat, tempNum, tempPrice};
model.addRow(row);
ID++;
}
dans le VideoStore classe constructeur:
public VideoStore() {
initComponents();
model = (DefaultTableModel) displayVideos.getModel();
}
Et dans la classe BinaryFile:
private static final int RecordLength = 112;
public static Video load(int place){
String name = "", prod="", rat="", genre="";
float price = 1;
short number = 1;
try {
raf.seek(place);
name = getString(20);
prod = getString(15);
rat = getString(20);
genre = getString(10);
price = Float.parseFloat(getString(4));
number = Short.parseShort(getString(4));
writeString(20, name);
writeString(15, prod);
writeString(10, genre);
writeString(4, VideoStore.vPrice.getText());
writeString(4, VideoStore.vNumber.getText());
writeString(4, rat);
} catch (Exception e) {
e.printStackTrace();
}
Video r = new Video(name, prod, genre, rat, number, price);
return r;
}
public static int getRecordLength() throws IOException{
return RecordLength;
}
public static int length() throws IOException {
return (int)raf.length();
}
Et enfin, mon Video Classe:
private static String videoName;
private static String producer;
private static String rating;
private static String genre;
private static short videoNumber;
private static float videoPrice;
public Video(String a, String b, String c, String d, short e, float f){
videoName = a;
producer = b;
rating = c;
genre = d;
videoNumber = e;
videoPrice = f;
}
... Puis méthodes mutator et accesseurs pour chaque variable dans la classe ...
@Override
public String toString(){
return videoName + "\t" + producer +
"\t" + rating + "\t" + genre +
"\t" + videoNumber + "\t" + videoPrice;
}
Alors oui, mon problème est que Je n'arrive pas à comprendre comment charger les enregistrements du fichier dans la table. Dans mon code, j'ai essayé d'utiliser une boucle qui parcourrait chaque enregistrement du fichier en fonction de la taille de l'enregistrement. Cependant, cela ne semble pas avoir fonctionné. Si quelqu'un souhaite voir mon code complet ou a besoin de plus d'informations, n'hésitez pas à me contacter :)
nous montrent le numéro de la ligne 82 dans BinaryFile.java – SpringLearner
concat + = raf.readChar(); @SpringLearner –
Pour une meilleure aide plus rapidement, postez un [MCVE] ou [Short, Self Contained, Example correct] (http://www.sscce.org/). –