2009-11-27 11 views
0

Я не могу получить мою программу для компиляции!ожидается), незаконный старт выражения

Я думаю, что им не хватает фигурной скобки, но не может для жизни меня видеть, где!

 import javax.swing.*; 
     import java.awt.*; 
     import java.awt.event.*; 
     import java.util.*; 
     import java.io.*; 
     import java.lang.*; 
     import java.text.*; 
     import java.net.*; 
     import java.util.Scanner; 

    public class AddressBook extends JFrame 
    { 

FlowLayout leftLayout; 

    JFrame frame; 
    JPanel panel; 
    JTextField txtname,txtsurname, txtphone, txtmobile, txtaddress, txtpostcode; 
    JButton btnadd, btnnext, btnprevious, btnsave, btndelete; 
    JLabel jlbname, jlbsurname, jlbphone, jlbmobile, jlbaddress, jlbpostcode; 


    String fileInput,readline; 
    ArrayList<String> arrayOfFile = new ArrayList<String>(); 
    ArrayList<Contact> records = new ArrayList<Contact>(); 



    int index = 0; 


    public static void main(String[] args) throws IOException 
    { 
    new AddressBook(); 
    } 

    public AddressBook() 
    { 

    //sets window 
    frame = new JFrame(); 
    frame.setTitle("Bournemouth University Address Book"); 
    frame.setSize(760, 500); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    //sets up panel 
    panel = new JPanel(); 
    panel.setLayout(null); 
    frame.getContentPane().add(panel); 



    //Labels 
    jlbname = new JLabel("Name:"); 
    jlbname.setBounds(10, 50, 100, 20); 
    panel.add(jlbname); 

    jlbsurname = new JLabel("Surname:"); 
    jlbsurname.setBounds(350, 50, 100, 20); 
    panel.add(jlbsurname); 

    jlbphone = new JLabel("Home Number:"); 
    jlbphone.setBounds(10, 90, 150, 20); 
    panel.add(jlbphone); 

    jlbmobile = new JLabel("Mobile:"); 
    jlbmobile.setBounds(350, 90, 150, 20); 
    panel.add(jlbmobile); 

    jlbaddress = new JLabel("Address:"); 
    jlbaddress.setBounds(10, 130, 200, 20); 
    panel.add(jlbaddress); 

    jlbpostcode = new JLabel("PostCode:"); 
    jlbpostcode.setBounds(10, 170, 250, 20); 
    panel.add(jlbpostcode); 

    //Text Fields 
    txtname = new JTextField(""); 
    txtname.setBounds(120, 50, 200, 20); 
    panel.add(txtname); 

    txtsurname = new JTextField(""); 
    txtsurname.setBounds(440, 50, 200, 20); 
    panel.add(txtsurname); 

    txtphone = new JTextField(""); 
    txtphone.setBounds(120, 90, 200, 20); 
    panel.add(txtphone); 

    txtmobile = new JTextField(""); 
    txtmobile.setBounds(440, 90, 200, 20); 
    panel.add(txtmobile); 

    txtaddress = new JTextField(""); 
    txtaddress.setBounds(120, 130, 520, 20); 
    panel.add(txtaddress); 

    txtpostcode = new JTextField(""); 
    txtpostcode.setBounds(120, 170, 250, 20); 
    panel.add(txtpostcode); 




    //Buttons 
    btnadd = new JButton("Add", new ImageIcon("../files/add.png")); 
    btnadd.setBounds(330, 320, 100, 50); 
    btnadd.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); 
    btnadd.addActionListener(new ActionListener() 
        { 
         public void actionPerformed(ActionEvent event) 
         { 
          txtname.setText("Add new details here"); 
      txtsurname.setText(""); 
      txtphone.setText(""); 
      txtmobile.setText(""); 
      txtaddress.setText(""); 
      txtpostcode.setText(""); 
         } 
        }); 
    panel.add(btnadd); 

    btndelete = new JButton("Delete", new ImageIcon("../files/delete2.png")); 
    btndelete.setBounds(390, 250, 100, 50); 
    btndelete.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); 
btndelete.setForeground(Color.red); 
     //  btndelete.addActionListener(this); 
    panel.add(btndelete); 

    btnsave = new JButton("Save", new ImageIcon("../files/save.png")); 
    btnsave.setBounds(490, 250, 100, 50); 
    btnsave.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); 
    btnsave.addActionListener(new ActionListener() 
        { 
         public void actionPerformed(ActionEvent event) 
         { 
          try 
     { 
     BufferedWriter fileOut = new BufferedWriter(new FileWriter("../files/contacts.buab", true)); 
     fileOut.append(txtname.getText()); 
     fileOut.append("\n");  
     fileOut.append(txtsurname.getText()); 
     fileOut.append("\n"); 
     fileOut.append(txtphone.getText()); 
     fileOut.append("\n");  
     fileOut.append(txtmobile.getText()); 
     fileOut.append("\n"); 
     fileOut.append(txtaddress.getText()); 
     fileOut.append("\n"); 
     fileOut.append(txtpostcode.getText() + "\r"); 



     fileOut.close(); 
        } 
     catch (IOException ioe) 
     { 
     JOptionPane.showMessageDialog(null, ioe.getMessage()); 
       } 

         } 
        }); 
    panel.add(btnsave); 

    btnprevious = new JButton("Prev", new ImageIcon("../files/left.png")); 
    btnprevious.setBounds(280, 250, 100, 50); 
    btnprevious.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); 
    btnprevious.addActionListener(new ActionListener() 
        {public void actionPerformed(ActionEvent event) 
         { 
          index--; 
         displaycontact(); 
         } 

        }); 
    panel.add(btnprevious); 

    btnnext = new JButton("Next", new ImageIcon("../files/right.png")); 
    btnnext.setBounds(180, 250, 100, 50); 
    btnnext.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); 
    btnnext.addActionListener(new ActionListener() 
        { 
         public void actionPerformed(ActionEvent event) 
         { 
         index ++; 
         displaycontact(); 
         } 


        }); 
    panel.add(btnnext); 

    frame.setVisible(true); 
    panel.setVisible(true); 




    JMenuBar mb = new JMenuBar(); 
      frame.setJMenuBar(mb); 

      JMenu insert = new JMenu("Import"); 
      mb.add(insert); 
      JMenuItem imp = new JMenuItem("Add New Contacts"); 
      insert.add(imp); 
      imp.addActionListener(new ActionListener() 

      {public void actionPerformed(ActionEvent event) 
    { 
     JFileChooser fileopen = new JFileChooser(); 

     int ret = fileopen.showDialog(null, "Open file"); 

     if (ret == JFileChooser.APPROVE_OPTION) 
     { 
      try { 
      BufferedReader fileStream = new BufferedReader(new FileReader("src/contacts.buab")); 
      while (true) 
      { 
      String fileInput = fileStream.readLine(); 
      if(fileInput==null) 
       break; 

     Contact a = new Contact(); 
      a.setname(fileInput); 
      a.setsurname(fileStream.readline()); 
      a.setphone(fileStream.readLine()); 
      a.setmobile(fileStream.readLine()); 
      a.setaddress(fileStream.readLine()); 
      a.setpostcode(fileStream.readline()); 
      Contacts.add(a); 
     System.out.println(a.getname()); 

      } 

      fileStream.close(); 
        } 
        catch (Exception ex) 
        { 
        JOptionPane.showMessageDialog(null, ioe.getMessage()); 
       } 
      displaycontact(); 
        }}); 






     } 

      public void displaycontact() 
      { 
       txtname.setText(contacts.get(index).name); 
       txtsurname.SetText(contacts.get(index).surname); 
       txtphone.setText(contacts.get(index).phone); 
       txtmobile.setText(contacts.get(index).mobile); 
       txtAddress.setText(contacts.get(index).address); 
      } 


    } 


    }  

, пожалуйста, помогите, я был здесь в течение 3 часов!

+4

Номер строки из ошибки компиляции поможет –

+0

Возможно, вы можете указать номер строки? –

+3

Является ли форматирование вашего кода в этом вопросе чем-то вроде форматирования в вашем файле? Если это так, вы можете попробовать очистить его, чтобы отступы были согласованными, что может помочь вам обнаружить ошибки. –

ответ

6

Вы пропускаете фигурную скобку здесь:

  displaycontact(); 
     }}}); // <- HERE 

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

Советуем вам переформатировать код так, чтобы был правильный отступ. У вас довольно много отступов, поэтому вы можете захотеть использовать два пробела или размер табуляции с шириной закладки, равной двум. Правильный отступ позволяет проверять код по-разному, чтобы увидеть, где фигурные скобки закрываются.

Я переформатировать ваш код в Eclipse, и ActionListener, которая вызывает у вас проблемы теперь выглядит следующим образом:

imp.addActionListener(new ActionListener() { 

    public void actionPerformed(ActionEvent event) { 
    JFileChooser fileopen = new JFileChooser(); 

    int ret = fileopen.showDialog(null, "Open file"); 

    if (ret == JFileChooser.APPROVE_OPTION) { 
     try { 
     BufferedReader fileStream = new BufferedReader(new FileReader("src/contacts.buab")); 
     while (true) { 
      String fileInput = fileStream.readLine(); 
      if (fileInput == null) 
      break; 

      Contact a = new Contact(); 
      a.setname(fileInput); 
      a.setsurname(fileStream.readline()); 
      a.setphone(fileStream.readLine()); 
      a.setmobile(fileStream.readLine()); 
      a.setaddress(fileStream.readLine()); 
      a.setpostcode(fileStream.readline()); 
      Contacts.add(a); 
      System.out.println(a.getname()); 

     } 

     fileStream.close(); 
     } catch (Exception ex) { 
     JOptionPane.showMessageDialog(null, ioe.getMessage()); 
     } 
     displaycontact(); 
    } 
    } 
}); 

Обратите внимание, что последняя фигурная скобка блобо теперь в три линии, и что каждая строка менее изрезана, чем предыдущий? Это сразу же станет очевидным, когда вам не хватает фигурной скобки.

+0

спасибо! Спасибо Спасибо! – addiosamigo

+0

Хорошая работа, проходя через этот код, был беспорядок. –

+0

ТАК лучшая IDE !!! –

2
  1. new должны быть в нижнем регистре
  2. ioe должен быть ex
  3. Снимите самый нижний фигурная скобка
  4. Добавить еще одну закрывающую фигурную скобку после JOptionPane.showMessageDialog(null, ioe.getMessage()); displaycontact();
  5. использования предписанной coding conventions, особенно отступов
1

Вы, кажется, ve ложная открытая фигурная скобка перед public void actionPerformed.

Но на самом деле, вы должны уметь сортировать их самостоятельно. Вы не можете публиковать свой код в SO каждый раз, когда он не компилируется ... Что-то, что может помочь здесь, - это редактор, который может делать фальцовку (примерно каждая среда IDE будет делать это) или даже функциональность, которая существует, когда вы нажмите % на фигурной скобке/скобке/цитате и т. д. (которая переходит к закрывающему символу, позволяя вам совместить начало и конец).

Плюс, всякий раз, когда вы задаете вопрос, всегда предоставляет диагностическую информацию - которая в этом случае будет выходом компилятора. Это в основном грубо ожидать от людей, чтобы помочь вам, удерживая соответствующую информацию.

+0

Я был здесь в течение 3 часов! его не так, как будто это произошло – addiosamigo

+1

Это не уменьшает мою точку зрения. Почему вы не смогли решить это самостоятельно?Это недостаток понимания синтаксиса Java, вводящий в заблуждение сообщение компилятора, просто скопируйте и вставив код без его понимания и т. Д.? –

+1

@dtsazza: Я второй раз хочу рассказать об этих ошибках. Однако я хотел указать, что фигурная скобка перед «public void actionPerformed» необходима, потому что это объявление функции. addiosamigo фактически не хватало закрывающей скобки для этого открытия. –

1

Вы короткий закрывающая фигурная скобка после последнего displaycontact();

Затем нужно удалить окончательный фигурную скобку.

1

addiosamigo, я бы порекомендовал вам иметь возможность справиться с такими ошибками, потому что это поможет вам гораздо больше в будущем.

Чтобы помочь в этом, вот шаги, которые я хотел бы сделать, чтобы решить такую ​​вещь:

  1. Удалить все символы из файла, за исключением минимум необходимо компилировать. Посмотрите, компилируется ли это (если нет, у вас есть серьезная проблема, которая не является частью кода. Возможно, проблема с определением проекта или чем-то еще).
  2. Начать добавление кода обратно в очень маленькие куски.
  3. Каждый раз, когда вы добавляете код обратно, убедитесь, что он скомпилирован.
  4. В конце концов вы добавите что-то, что не скомпилируется, и вы узнаете, что есть плохой код.

Обратите внимание: выполнение этого не всегда так просто, поскольку иногда вам необходимо добавить код в определенном порядке для его компиляции.

Например, добавление кода функции Foo, вызывающего панель функций, без добавления кода для Bar, будет, очевидно, причиной ошибки компиляции.В этом случае вам придется делать умные трюки (например, добавлять Bar обратно, без какой-либо реальной реализации и т. Д.).

В целом, стратегия такая же, как и для каждой ошибки: найдите наименьший случай, который воспроизводит его, и работайте оттуда.

Надеется, что это помогает

+0

спасибо за это, я сделаю это, если у меня снова возникнут проблемы – addiosamigo

+0

Рад, что я мог помочь. –

0

Условный оператор

if (ret == JFileChooser.APPROVE_OPTION) 

отсутствует это закрывающей скобки, вы должны добавить его только после того, как

displaycontact(); 

в конце источника является дополнительным скобка.

Несколько советов, чтобы помочь себе в будущем:

  • убедитесь, что ваш код отступы правильно, фиксируя свой whitespacing и отступов бы привести вас к преступнику
  • анонимные классы могут сделать код нечитаемым, если они состоят из нескольких строк, ваш слушатель действия - прекрасный пример этого. код становится намного читабельнее, если вы создадите для него отдельный вложенный класс вместо того, чтобы вставлять большие анонимные классы.

Edit: начать взглянуть на Sun's Java code conventions, как и его indenting chapter. IDE, например, форматирование верхнего плана eclipse и отступы вашего кода.

+0

Есть ли хорошие сайты, которые помогут вам с отступом? Я никогда не узнал об этом. – addiosamigo

Смежные вопросы