预期),非法开始表达

时间:2009-11-27 13:47:36

标签: java

我无法编译我的程序!

我想我错过了一个大括号,但不能为我的生活看到哪里!

        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 个答案:

答案 0 :(得分: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();
    }
  }
});

请注意,最后一个花括号blob现在是三行,并且每行的缩进比前一行少?这样就可以立即明白你错过大括号的地方。

答案 1 :(得分:2)

  1. new应全部为小写
  2. ioe应为ex
  3. 删除最底部的花括号
  4. JOptionPane.showMessageDialog(null, ioe.getMessage()); displaycontact();
  5. 之后再添加一个结束花括号
  6. 使用规定的coding conventions,尤其是缩进

答案 2 :(得分:1)

你似乎在public void actionPerformed前面有一个假的开放花括号。

但实际上,你需要能够自己解决这些问题。每次无法编译时都无法将代码发布到SO ...这里可能有用的东西是一个可以进行折叠的编辑器(几乎每个IDE都可以执行此操作),甚至是vi具有的功能在支架/支架/报价等上按%(跳转到结束符号,让你匹配开始和结束)。

另外,无论何时提出问题,始终提供诊断信息 - 在这种情况下将是编译器输出。期望人们在扣留相关信息的同时帮助你是非常粗鲁的。

答案 3 :(得分:1)

你在最后displaycontact();

之后缩短一个大括号

然后你需要删除最后的大括号。

答案 4 :(得分:1)

addiosamigo,我真的建议你能够自己处理这些错误,因为它将来会对你有所帮助。

为了帮助解决这个问题,我将采取以下步骤:

  1. 删除文件中的所有代码,但编译所需的最小除外。看看这是否编译(如果没有,你有一个严重的问题,不是代码的一部分。也许是项目定义的问题或其他)。
  2. 开始以非常小的块添加代码。
  3. 每次添加代码时,请确保编译。
  4. 最后,你会添加一些无法编译的东西,你会知道那里有错误的代码。
  5. 请注意,这样做并不总是那么简单,因为有时您需要按特定顺序添加代码才能进行编译。

    例如,添加调用函数Bar的函数Foo的代码而不添加Bar的代码显然会导致编译错误。在这种情况下,你将不得不做一些聪明的技巧(比如重新添加Bar,没有任何实际的实现等)。

    总而言之,策略与每个bug都是一样的:找到重现它的最小案例,并从那里开始工作。

    希望这有帮助

答案 5 :(得分:0)

if语句

if (ret == JFileChooser.APPROVE_OPTION) 

缺少它的右大括号,你必须在

之后添加它
displaycontact();

在源头的末尾是一个额外的支撑。

在未来帮助自己的一些提示:

  • 确保您的代码缩进正确,修复您的whitespacing并且缩进会导致您成为罪魁祸首
  • 匿名类可以使代码不可读,如果它们包含多行,那么你的动作监听器就是一个很好的例子。如果为它创建一个单独的嵌套类而不是插入大型匿名类,则代码变得更易读。
要开始使用

修改,请查看Sun's Java code conventions之类及其indenting chapter。 IDE就像eclipse supoort格式化和缩进代码一样。