#java #swing #switch-statement #jtextfield #joptionpane
Вопрос:
Я пытаюсь создать телефонный справочник, в котором пользователь должен вводить несколько входных данных с помощью поля JTextField. У меня также есть опция поиска, которая будет искать введенное имя из каталога в пишущей машинке, и я просто не могу сохранить свои данные в пишущей машинке. Это мой первоначальный код
public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in); int menu = 0; boolean quit = false; do{ String input = JOptionPane.showInputDialog(null,"Telephone Directory Management System" "n1. Add a Student" "n2. Search" "n3. Sort Data" "n4. List of all data" "n5. Exit" "nnPlease enter your choice:","Main Menu",JOptionPane.QUESTION_MESSAGE); menu = Integer.parseInt(input); switch (menu) { case 1: JTextField student = new JTextField(); JTextField name = new JTextField(); JTextField address = new JTextField(); JTextField phone = new JTextField(); Object[] fields = { "Enter Student ID:",student, "Enter Name:",name, "Enter Address:",address, "Enter Phone No.:",phone}; int add = JOptionPane.showConfirmDialog(null,fields,"Add a Student",JOptionPane.OK_CANCEL_OPTION); if (add == JOptionPane.OK_OPTION) { String student1 = student.getText(); String name1 = name.getText(); String address1 = address.getText(); String phone1 = phone.getText(); FileWriter fw = new FileWriter(new File("directory.txt"), true); BufferedWriter out = new BufferedWriter(fw); out.write(student1 " " name1 " " address1 " " phone1); out.newLine(); } break; case 2: input = JOptionPane.showInputDialog(null,"Enter name to search information:","Search",JOptionPane.OK_CANCEL_OPTION); File f = new File("directory.txt"); try { BufferedReader freader = new BufferedReader(new FileReader(f)); String s; while ((s = freader.readLine()) != null) { String[] st = s.split(" "); String id = st[0]; String nm = st[1]; String add1 = st[2]; String phoneNo = st[3]; if (input.equals(nm)) { JOptionPane.showMessageDialog(null,"Student ID: " id "nName: " nm "nAddress: " add1 "nPhone No.: " phoneNo "","Information",JOptionPane.QUESTION_MESSAGE); } } freader.close(); } catch (Exception e) { } break;
Я пробовал использовать сканер раньше, и он хранит мои входные данные, но в этом случае мне нужно использовать JOptionPane. Большое спасибо всем, кто может мне в этом помочь.
Ответ №1:
Вы должны закрыть BufferedWriter после записи в него, вот так
out.close()
Если вы этого не сделаете, BufferedWriter не будет сбрасывать то, что вы в него записали, в базовый поток.
Комментарии:
1. Привет!. Я явно забыл об этом, и после того, как он у меня появился, он все равно не будет храниться в каталоге. Я также попытался использовать сканер вдоль поля JText, но он просто продолжает работать, в то время как окна JOption нигде не видно.
2. Вы уверены, что добавили out.close() после out.newLine() в случае 1 и перекомпилировали? Я попробовал программу на своем компьютере и вижу строку в directory.txt файл после добавления студента.
3. Я попробовал закодировать его снова, а также удалить каталог, чтобы убедиться, что теперь он работает!! Большое тебе спасибо, братан. Это действительно много значит для меня
4. Нет проблем! Если возможно, можете ли вы отметить ответ как полезный стрелкой вверх? Я не уверен, что вы видите в качестве владельца Вопроса. Спасибо вам и хорошего дня.