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){ } } } }
-
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.
-
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();
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
-
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