speicher allokieren....



  • es gibt ne null pointer exception im teil code ; add();

    kann mir jemand ein bsp. machen wie es aussehen müsste damit es geht???

    thx
    bye donay

    /********/
    
    package adressen;
    
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    
    public class adressbuch {
      public static void main(String[] args) {
      window win = new window();
      win.startmain();
    
      }
    }
    
    class code{
    public int pointer=0;//bei welchem element ist
    public int howmuch;
    public String[] forname;
    public String[] name;
    public String[] street;
    public String[] PLZ;
    public String[] city;
    public String[] phone;
    
    private BufferedReader input = new BufferedReader(new
    InputStreamReader(System.in));
    
    private publicvars p= new publicvars();
    
    public void add()throws Exception{
    
    System.out.println("Einen neuen Eintrag machen:\n");
    System.out.println("Der Vorname:");
    
    forname[howmuch]=p.txt[0].getText();
    System.out.println("Der Name:");
    name[howmuch]=p.txt[1].getText();
    System.out.println("Die Adresse:");
    street[howmuch]=p.txt[2].getText();
    System.out.println("Die PLZ:");
    PLZ[howmuch]=p.txt[3].getText();
    System.out.println("Der Ort:");
    city[howmuch]=p.txt[4].getText();
    System.out.println("Die Telephon-Nummer:");
    phone[howmuch]=p.txt[5].getText();
    
    //eine(oder mehrere;() for schleife die die elements und \n macht
    
    //die strings werden nun mit , getrennt in die dfatei geschriben
    FileWriter filewr = new FileWriter("C://adressen.txt");
    String komma=",";
    for(int counter=0;counter<=howmuch;counter++){
    filewr.write(forname[counter]);
    filewr.write(komma);
    }
    
    for(int counter=0;counter<=howmuch;counter++){
    filewr.write(name[counter]);
    filewr.write(komma);
    }
    
    for(int counter=0;counter<=howmuch;counter++){
    filewr.write(street[counter]);
    filewr.write(komma);
    }
    
    for(int counter=0;counter<=howmuch;counter++){
    filewr.write(PLZ[counter]);
    filewr.write(komma);
    }
    
    for(int counter=0;counter<=howmuch;counter++){
    filewr.write(city[counter]);
    filewr.write(komma);
    }
    
    for(int counter=0;counter<=howmuch;counter++){
    filewr.write(phone[counter]);
    filewr.write(komma);
    }
    
    filewr.close();
    }
    
    public void readnmake()throws Exception{//alle ',' zählen und dann die
    Strings neu machen...
    
    RandomAccessFile filehow = new
    RandomAccessFile("C:\\adressen.txt","rw");//filehow-much ,
    int counter=0;
    filehow.seek(0);
    int read=0;
    for(;filehow.getFilePointer()<filehow.length();){//endoffile
    read=filehow.read();
    
    if(read==10){//10=='enter'
    break;}
    if(read==44){//44=','
    counter+=1;
    }
    }
    this.howmuch=counter;
    
    filehow.close();
    //Strings neu setzen
    
    forname=new String[howmuch+1];
    name=new String[howmuch+1];
    city=new String[howmuch+1];
    phone=new String[howmuch+1];
    PLZ=new String[howmuch+1];
    street=new String[howmuch+1];
    
    }
    
    public void read() throws Exception{//erst alle daten von datei in string
    einlesen
    
    RandomAccessFile file = new RandomAccessFile("C:\\adressen.txt","rw");
    
    file.seek(0);
    String notcompl;//notcompleted
    notcompl="";
    //der wird imemr megr mit chars gefüllt bis ein , und ann wird er übergeben
    int reade;
    int atwhich=0;
    for(int where=-1;file.getFilePointer()<file.length();){
    reade=file.read();
    //System.out.print("Reade ist: "+reade);
    
    if(reade==10){
    atwhich+=1;
    where=-1;
    }
    
    if(reade!=44){//44 = ,
    
    notcompl+=(char)reade;
    
    //reade wird an den notcompl übergeben als char
    
    }
    else{
    where+=1;
    //System.out.print("uebergabe");
    
    switch(atwhich){
    case 0:
    forname[where]=(String)notcompl;
    break;
    case 1:
    name[where]=(String)notcompl;
    break;
    case 2:
    street[where]=(String)notcompl;
    break;
    case 3:
    PLZ[where]=(String)notcompl;
    break;
    case 4:
    city[where]=(String)notcompl;
    break;
    case 5:
    phone[where]=(String)notcompl;
    break;
    }
    notcompl="";
    }
    }
    file.close();
    }
    
    }
    
    class publicvars{
    public TextField[] txt= new TextField[6];
    }
    
    class window
    extends Frame{
    
    Frame main = new Frame();
    
    public void startmain(){
    main.setTitle("Adressbuch");
    main.setSize(500,500);
    main.addWindowListener(new closer());
    dialoge dia = new dialoge();
    //main.setBackground(Color.green);
    main.setVisible(true);
    }
    
    //public window(){}
    
    class closer
    extends WindowAdapter{
    public void windowClosing(WindowEvent event){
    Frame fr = (Frame)event.getSource();
    fr.setVisible(false);
    fr.dispose();
    System.exit(0);
    }
    }
    
    class dialoge
    {
    
    public dialoge(){
    main.setLayout(null);
    button b = new button();
    b.start();
    txts t = new txts();
    t.start();
    label l = new label();
    l.start();
    }
    
    class label{
    Label[] labeltitle=new Label[3];
    Label[] labels = new Label[6];
    String[] labeltxt={"Vorname","Name","Adresse","PLZ","Ort","Telephone"};
    public void start(){
    Font font = new Font("Arial",2,30);
    labeltitle[0]=new Label("Menu");
    labeltitle[0].setFont(font);
    labeltitle[0].setBounds(10,30,100,30);
    main.add(labeltitle[0]);
    
    labeltitle[1]=new Label("Daten");
    labeltitle[1].setFont(font);
    labeltitle[1].setBounds(300,30,100,30);
    main.add(labeltitle[1]);
    
    labeltitle[2]=new Label("Ergebnis");
    labeltitle[2].setFont(font);
    labeltitle[2].setBounds(10,250,150,33);
    main.add(labeltitle[2]);
    
    for(int counter=0,y=75;counter<6;counter+=1,y+=30){
    labels[counter]=new Label();
    labels[counter].setText(labeltxt[counter]);
    labels[counter].setBounds(300,y,100,20);
    main.add(labels[counter]);
    
    }
    
    }
    
    }
    
    class button
    implements ActionListener
    {
    Button but[]= new Button[4];
    public void start(){
    for(int counter =0, y=75;counter<4;counter+=1,y+=35){
    but[counter]=new Button();
    but[counter].addActionListener(this);
    but[counter].setBounds(10,y,110,30);
    main.add(but[counter]);
    }
    but[0].setLabel("Hinzufügen");
    but[1].setLabel("Suchen");
    but[2].setLabel("Bearbeiten");
    but[3].setLabel("Exit");
    }
    
    public void actionPerformed(ActionEvent event){
    for(int counter=0;counter<6;counter+=1){
    //txt[counter].setEnabled(true);
    //txt[counter].setBackground(Color.white);}
    //die txts enablen
    
    String ste = event.getActionCommand();
    
    if(ste.equals("Exit")==true){
    main.setVisible(false);
    main.dispose();
    System.exit(0);
    }
    if(ste.equals("Hinzufügen")==true){
    
    code co = new code();
    try{
    co.readnmake();
    }
    catch(Exception e){
    }
    try{
    co.read();
    }
    catch(Exception e){
    }
    try{
    co.add();
    }
    catch(Exception e){
    e.printStackTrace();
    }
    
    }
    
    }
    }
    }
    
    class txts
    implements ActionListener
    {
    public void start(){
    publicvars pv = new publicvars();
    for(int counter=0,y=75;counter<6;counter+=1,y+=30){
    pv.txt[counter] = new TextField();
    pv.txt[counter].setBounds(375,y,100,20);
    //txt[counter].setEnabled(false);
    //txt[counter].setBackground(Color.lightGray);
    pv.txt[counter].addActionListener(this);
    main.add(pv.txt[counter]);
    }
    }
    
    public void actionPerformed(ActionEvent event){
    
    }
    }
    }
    }
    

  • Mod

    Keine Ahnung, ob es daran liegt, aber du schreibst:

    FileWriter filewr = new FileWriter("C://adressen.txt");

    Der Dateiname sieht nicht so ganz richtig aus, häh?! 🙂 ...aber ich verwechsel bei solchen Dingen auch immer den Slash und den Backslash.



  • dein code ist scheiße.



  • @gregor

    ja,ok,das stimmt auch, aber icmeinre diese nullpointerException hier:

    public void add()throws Exception{ 
    
    System.out.println("Einen neuen Eintrag machen:\n"); 
    System.out.println("Der Vorname:"); 
    
    forname[howmuch]=p.txt[0].getText();  //hier
    System.out.println("Der Name:"); 
    name[howmuch]=p.txt[1].getText();
    

    @asdf

    wenn du die class code meinst geb ich dir recht:
    ich hätte besser einen String[][] genommen, als alle daten in ein eindimensionales String array zu schreiben, hab aber übersichts halber mal so gemacht, wirds später ändern.

    falls du etwas anderes gemint hast, bin ich für kritik offen, du müsstest aber schon sagen WO der code scheisse ist..

    bye donay


  • Mod

    Ich vermute, dass der Fehler an folgender Stelle ist:

    class publicvars{
    public TextField[] txt= new TextField[6];
    }

    Du erzeugst ein Array für TextField-Objekte, auf das du an der gezeigten Stelle zugreifst. Allerdings hast du keine TextField-Objekte erzeugt, die in dem Array liegen. die einzelnen Felder des Arrays sind also mit null initialisiert.

    ...oder du machst das ganz woanders.



  • ja, du hast volkommen recht. ich begreif aber einfach nicht wieso das so ist, also wieso die NULL sind.
    und wie ich das umgehen kann.
    der "trick" ist ja das ich von class code UND class window auf die txtarrays tzugreifen möchte,( respektive bei class code nur auf den inhalt).
    ich raff das jetzt eben nicht wieso das nicht geht, und wäre sehr froh über eine ausfürliche erklärung(oder einfach ein bsp, oder am besten beides;)

    thx bye donay



  • donaypwl schrieb:

    ja, du hast volkommen recht. ich begreif aber einfach nicht wieso das so ist, also wieso die NULL sind.

    weil erstmal alle Objekte von Referenztypen (also Klassen, Strings und Arrays) null sind, bis du sie initialisierst.



  • //

    class txts 
    implements ActionListener 
    { 
    public void start(){ 
    publicvars pv = new publicvars(); 
    for(int counter=0,y=75;counter<6;counter+=1,y+=30){ 
    pv.txt[counter] = new TextField(); ///right here
    pv.txt[counter].setBounds(375,y,100,20); 
    //txt[counter].setEnabled(false); 
    //txt[counter].setBackground(Color.lightGray); 
    pv.txt[counter].addActionListener(this); 
    main.add(pv.txt[counter]); 
    } 
    }
    

    ich kann sie aber nur einmal intialiesieren weil sonst der inhalt gelöscht wird.
    also ich hab sie in txts{}
    intialiesirt, aber in add() sind sie un-intialiesiert.!!

    bye donay



  • 😕
    😞
    😕
    ich raff das jetzt eben nicht wieso das nicht geht, und wäre sehr froh über eine ausfürliche erklärung(oder einfach ein bsp, oder am besten beides;)

    thx bye donay


Anmelden zum Antworten