2013-07-23 7 views
0

Im кодирует программу бронирования отеля и im, используя графический интерфейс для ввода информации Гостей в TextFields. У меня есть массив, где эти входные значения должны идти прямо (возможно, это моя проблема, но donno, как это исправить). После этого я хочу, чтобы значения в массиве печатались в текстовый файл, который я создал. Heres мой код:Не могу понять, почему это не печатается в текстовом файле

Guests[] GArr = new Guests[1000]; 
    public static DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm"); 
    public int cnt = 1; 
    int count = 0; 
    String Firstname ; 
    String Lastname; 
    String Country ; 
    String IDtype; 
    String PassportNo ; 
    String IDNo ; 
    String Addr1; 
    String Addr2 ; 
    int AreaCode ; 
    String TelNo ; 
    String CellNo ; 
    String Email ; 

Сначала я объявил эти переменные как глобальные (эти переменные уже в моем классе объектов Guests) я положил их снова в моей JFrame класс под названием Home. После этого я заставил эти переменные принять значение TextFields, которые имеют текстовый ввод в них. Это в методе, который проверяет, чтобы увидеть, если поля не заполнены:

public Collection<String> getNonBlankFields() { 
    this.Firstname = NameF.getText(); 
    this.Lastname = NameL.getText(); 
    this.Country = Countr.getText(); 
    this.IDtype = IDTy.getText(); 
    this.PassportNo = PassNo.getText(); 
    this.IDNo = IDNumber.getText(); 
    this.Addr1 = Add1.getText(); 
    this.Addr2 = Add2.getText(); 
    int AreaCode = Integer.parseInt(Area.getText()); 
    this.TelNo = Tel.getText(); 
    this.CellNo = Cell.getText(); 
    this.Email = Em.getText(); 

    this.nonBlankFields = new ArrayList<String>(); 
    this.nonBlankFields.add(this.Firstname); 
    this.nonBlankFields.add(this.Lastname); 
    this.nonBlankFields.add(this.Country); 
    this.nonBlankFields.add(this.IDtype); 
    this.nonBlankFields.add(this.PassportNo); 
    this.nonBlankFields.add(this.IDNo); 
    this.nonBlankFields.add(this.Addr1); 
    this.nonBlankFields.add(this.Addr2); 
    this.nonBlankFields.add(this.TelNo); 
    this.nonBlankFields.add(this.CellNo); 
    this.nonBlankFields.add(this.Email); 
    System.out.println(this.nonBlankFields); 
    return this.nonBlankFields; 
} 

Последняя вещь является печать в файл (это моя главная проблема) ив пытался так много вещей, чтобы исправить это, но он превосходит этот код и идет прямо к улову:

 File GFile = new File("C:\\Users\\Gordy\\Dropbox\\IT\\Hotel Reservation\\Hotel\\src\\Reservation\\Guests.txt"); 
try { 
      if (!GFile.exists()) { 
       GFile.createNewFile(); 
      } 
       String delim = "#"; 
       String Firstname = NameF.getText(); 
        StringTokenizer stk = new StringTokenizer(delim); 
        Firstname += stk.nextToken(); 
        System.out.print("FName = " + Firstname); 
        Lastname += stk.nextToken(); 
        System.out.print("LastName= " + Lastname); 
        Country += stk.nextToken(); 
        System.out.print("Country= " + Country); 
        IDtype += stk.nextToken(); 
        IDNo += stk.nextToken(); 
        Addr1 += stk.nextToken(); 
        Addr2 += stk.nextToken(); 
        AreaCode += Integer.parseInt(stk.nextToken()); 
        TelNo += stk.nextToken(); 
        CellNo += stk.nextToken(); 
        Email += stk.nextToken(); 
        GArr[count] = new Guests(Firstname, Lastname, Country, IDtype, IDNo,Addr1,Addr2, AreaCode, TelNo, CellNo, Email); 
        PrintWriter pw=new PrintWriter(new FileWriter (GFile,true)); 
        pw.println(GArr[count]); 
        count++; 
        pw.close(); 
        CheckIn.hide(); 
        Home.this.setVisible(true); 
      } 
     catch (Exception e) { 
      System.out.print("This did not work heres the error: " + e); 
     } 

также любит использовать ничего, кроме StringTokenizer для печати с # между данными на 1 линию.

это вся ошибка:

java.util.NoSuchElementException 
at java.util.StringTokenizer.nextToken(StringTokenizer.java:332) 
at Reservation.Home.jButton8ActionPerformed(Home.java:1657) 
at Reservation.Home.access$100(Home.java:29) 
at Reservation.Home$2.actionPerformed(Home.java:269) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
at java.awt.Component.processMouseEvent(Component.java:6263) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
at java.awt.Component.processEvent(Component.java:6028) 
at java.awt.Container.processEvent(Container.java:2041) 
at java.awt.Component.dispatchEventImpl(Component.java:4630) 
at java.awt.Container.dispatchEventImpl(Container.java:2099) 
at java.awt.Component.dispatchEvent(Component.java:4460) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 
at java.awt.Container.dispatchEventImpl(Container.java:2085) 
at java.awt.Window.dispatchEventImpl(Window.java:2478) 
at java.awt.Component.dispatchEvent(Component.java:4460) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
+0

что за исключением? – Ayrad

+1

Вы говорите, что это доходит до 'catch'. Можем ли мы получить трассировку стека ошибок? 'e.printStackTrace()' – SamYonnou

ответ

0

Вы вызываете stk.nextToken() несколько раз, но этот объект имеет только один «#». Это означает, что вы можете только называть его nextToken(). Также Integer.parseInt("#"), вероятно, выдает исключение. Я хотел бы предложить сделать что-то вроде этого:

Не добавить «#» к чему-либо, и вместо того, чтобы для вашего метода toString() в Guests сделать что-то вроде

public String toString() { 
    return Firstname + "#" + Lastname + "#" + ... + "#" + Email; 
} 
+0

Спасибо, что работала отлично, самая маленькая ошибка, сделанная мной, заставило все это не работать (как глупо я получаю). благодаря – Gordy

0
// instantiate array after all vars in it have been instantiated 
String[] guests = {Firstname, Lastname, Country, IDtype, IDNo,Addr1,Addr2, AreaCode, TelNo, CellNo, Email}; 

int ct=0; 
for(StringTokenizer stk; stk.hasMoreElements() ;){ 
guests[ct]+=stk.nextToken(); 
ct+=1; 
} 

StringTokenizer является «перечисление» объект, он должен быть повторен, поэтому для него требуется «логический тест» «hasMoreElements()».

0

Вы используете StringTokenizer неправильно. Вероятно, это исключение, потому что доступных токенов больше нет.

Вы можете использовать Список вместо большого массива.

Вот некоторые из переработан кода для печати в файл, как Firstname # Lastname # Страна # IDtype # Idnó # Addr1 # Addr2 # AreaCode # тельно # CellNo # Email

Первая часть кода: Guests[] GArr = new Guests[1000];

Я Изменен: List<Guests> guestList = new ArrayList<>();

Третья часть кода:

File GFile = new File("C:\\Users\\Gordy\\Dropbox\\IT\\HotelReservation\\Hotel\\src\\Reservation\\Guests.txt"); 
try { 
    if (!GFile.exists()) { 
     GFile.createNewFile(); 
    } 
    StringBuilder sb = new StringBuilder; 
    appendData(sb,Firstname); 
    appendData(sb,Lastname); 
    appendData(sb,Country); 
    appendData(sb,IDtype); 
    appendData(sb,PassportNo); 
    appendData(sb,IDNo); 
    appendData(sb,Addr1); 
    appendData(sb,Addr2); 
    appendData(sb,AreaCode); 
    appendData(sb,TelNo); 
    appendData(sb,Email,false); 

    guestList.add(new Guests(Firstname, Lastname, Country, IDtype, IDNo,Addr1,Addr2, AreaCode, TelNo, CellNo, Email)); 

    PrintWriter pw=new PrintWriter(new FileWriter (GFile,true)); 
    pw.println(sb.toString()); 

    pw.close(); 
    CheckIn.hide(); 
    Home.this.setVisible(true); 
}catch (Exception e) { 
    System.out.print("This did not work heres the error: " + e); 
} 

Здесь appendData часть

private void appendData(StringBuilder sb,String data){ 
    appendData(sb,data,true); 
} 

private void appendData(StringBuilder sb,String data,boolean delim){ 
    sb.append(data); 
    if(delim){ 
     sb.append(delim); 
    } 
} 
private void appendDelim(StringBuilder sb){ 
    sb.append("#"); 
} 

Я не уверен, почему вы держите структуру данных гостей, если вы просто вывести его в текстовый файл.