2014-05-10 27 views
0

所以,當我運行這個,我沒有得到任何例外,但執行暫停。我輸入了幾行代碼來查看hault的來源。在初始執行時,它會根據Customer類中給出的路徑創建一個文件。一旦我執行了其中一個操作,它就不會讓我走過第一條調試線。想法?可能已經打開的文件錯誤;暫停

繼承人申請: package javaapplication18.pkg3;

import java.util.ArrayList; 
import java.util.Scanner; 
public class JavaApplication183 { 

/** 
* @param args the command line arguments 
*/ 
static boolean keepGoing = true; 
public static void main(String[] args) { 
    System.out.println("Welcome to the Customer Maintenance application"); 
    //keepGoing = true; 
    Scanner sc = new Scanner(System.in); 
    while (keepGoing){ 
     displayMenu(); 
     String userChoice = getRequiredString("Enter a command: ", sc); 
     System.out.println("DEBUG LINE 1"); 


     CustomerTextFile textFile = new CustomerTextFile(); 
     System.out.println("DEBUG LINE 2"); 
     performAction(userChoice, textFile); 
     System.out.println("DEBUG LINE 3"); 

    } 
    // TODO code application logic here 
} 

public static void displayMenu() { 
    System.out.println(); 
    System.out.println("COMMAND MENU"); 
    System.out.println("list - List all customers"); 
    System.out.println("add  - Add a customer"); 
    System.out.println("del  - Delete a customer"); 
    System.out.println("help - Show this menu"); 
    System.out.println("exit - Exit this application"); 
    System.out.println(); 
} 



public static void performAction(String choice, CustomerTextFile textFile){ 
    Scanner sc = new Scanner(System.in); 
    switch (choice.toLowerCase()) { 
     case "list":  
      //action 
      ArrayList<Customer> currentList = textFile.getCustomers(); 
      for (Customer c : currentList) { 
       System.out.print(c.getEmail() + "\t"); 
       System.out.print(c.getFirstName() + "\t"); 
       System.out.println(c.getLastName()); 
       } 
      break; 
     case "add": 
      String email = getRequiredString("Enter customer email address:", sc); 
      String firstName = getRequiredString("Enter first name:", sc); 
      String lastName = getRequiredString("Enter last name:", sc); 
      Customer c = new Customer(email, firstName, lastName); 
      textFile.addCustomer(c); 
      System.out.println(firstName + lastName + " was added to the database."); 
      break; 
     case "del": 

      String deleteUserByEmail = getRequiredString("Enter customer email to delete:", sc); 
      Customer delCustomer = textFile.getCustomer(deleteUserByEmail); 
      textFile.deleteCustomer(delCustomer); 
      break; 
     case "help": 
      //displayMenu(); 
      break; 
     case "exit": 
      keepGoing = false;//exit(); 
      break; 
     default: 
      System.out.println("You entereed something not in the list. Please try again."); 
      System.out.println(); 
    } 
} 


public static boolean exit(){ 
    System.out.println("Exit"); 
    return false; 
    } 

public static String getRequiredString(String prompt, Scanner sc) { 
String s = ""; 
boolean isValid = false; 
while (isValid == false) { 
    System.out.print(prompt); 
    s = sc.nextLine(); 
      if (s.equals("")) 
       System.out.println("Error! This entry is required. Try again."); 
      else 
       isValid = true; 
      } 
    return s; 
} 

} 

這裏是CustomerTextFile類:

package javaapplication18.pkg3; 

import java.io.*; 
import java.nio.file.*; 
import java.util.ArrayList; 

public class CustomerTextFile implements CustomerDAO{ 
    private ArrayList<Customer> customers = null; 
    private Path customersPath = null; 
    private File customersFile = null; 

public CustomerTextFile(){ 

    customersPath = Paths.get("customers.txt"); 
    customersFile = customersPath.toFile(); 
    customers = this.getCustomers(); 

} 
@Override 
public Customer getCustomer(String emailAddress) { 
    for (Customer c : customers) { 
     if (c.getEmail().equals(emailAddress)) 
       return c; 
    } 
    return null; 

    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
} 

@Override 
public ArrayList<Customer> getCustomers() { 
    if (customers != null) 
     return customers; 

    customers = new ArrayList<>(); 

    if (!Files.exists(customersPath)) { 
     try { 
      Files.createFile(customersPath); 
     } 
     catch (IOException e) { 
      return null; 
     } 
    } 

    if (Files.exists(customersPath)) { 
     try (BufferedReader in = new BufferedReader(new FileReader(customersFile))){ 
      String line = in.readLine(); 
      while(line != null) { 
       String[] columns = line.split("\t"); 
       String email = columns[0]; 
       String firstName = columns[1]; 
       String lastName = columns[2]; 

       Customer c = new Customer(email, firstName, lastName); 
       customers.add(c); 

      } 

     } 
     catch (IOException e) { 
      System.out.println(e); 
      return null; 
     } 
    } 
    return customers; 
} 

@Override 
public boolean addCustomer(Customer c) { 
    customers.add(c); 
    return this.saveCustomers(); 
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
} 

@Override 
public boolean updateCustomer(Customer c) { 
    Customer oldCustomer = this.getCustomer(c.getEmail()); 
    int i = customers.indexOf(oldCustomer); 
    customers.remove(i); 

    customers.add(i, c); 

    return this.saveCustomers(); 
    //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
} 

@Override 
public boolean deleteCustomer(Customer c) { 
    customers.remove(c); 
    return this.saveCustomers(); 
} 

private boolean saveCustomers() { 
    try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(customersFile)))){ 

     for (Customer customer : customers) { 
      out.print(customer.getEmail() + "\t"); 
      out.print(customer.getFirstName() + "\t"); 
      out.println(customer.getLastName()); 

     } 
     out.close(); 
     return true; 

    } 
    catch (IOException e) { 
     return false; 
    } 



} 

}

我不是肯定,如果這個問題是在應用程序,或者如果它是文本文件類

運行: 歡迎來到客戶維護應用程序

命令菜單 列表 - 列出所有客戶 添加 - 添加一個客戶 德爾 - 刪除客戶 幫助 - 顯示這個菜單 退出 - 退出該應用

列表 調試行1

上面是控制檯輸出的一個例子。

+0

是它的每一個使程序停止動作?它是否真的停止,如終止,還是活着?後者意味着某處有一個無限循環。 –

回答

0

你爲什麼要在循環中聲明一個字符串?

試試這個:

Scanner sc = new Scanner(System.in); 
String userChoice; 
do { 
    displayMenu(); 
    userChoice = sc.nextLine(); //takes in the entire lien you type in 
    System.out.println("DEBUG LINE 1"); 


    CustomerTextFile textFile = new CustomerTextFile(); 
    System.out.println("DEBUG LINE 2"); 
    performAction(userChoice, textFile); 
    System.out.println("DEBUG LINE 3"); 
} while(keepGoing); 

希望這有助於

+0

在這種情況下,字符串聲明位置應該不重要,因爲這更多的是Java中的範圍問題。 –

+0

是的。無論如何,我試過它的效率,但問題仍然exixts – user2962806