ожидается), незаконное начало выражения - PullRequest
0 голосов
/ 27 ноября 2009

Я не могу заставить мою программу компилироваться!

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

        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 часа !!

Ответы [ 6 ]

6 голосов
/ 27 ноября 2009

Вам не хватает фигурной скобки:

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

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

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

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

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

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

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

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

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

Надеюсь, это поможет

1 голос
/ 27 ноября 2009

У вас короткая фигурная скобка после последней displaycontact();

Затем необходимо удалить последнюю фигурную скобку.

1 голос
/ 27 ноября 2009

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

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

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

0 голосов
/ 27 ноября 2009

Оператор if

if (ret == JFileChooser.APPROVE_OPTION) 

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

displaycontact();

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

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

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

Редактировать: Для начала взгляните на Соглашения Java-кода Sun like и главу с отступом . IDE, как eclipse supoort, форматирует и делает отступ в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...