在BookSalesFrame类的button1.addActionListener方法中创建Sale类的对象salebook并调用其方法getInfo(),但报错找不到getInfo(), 我在类TestProg(main的入口)使用Sale类创建对象salebook并调用其方法getInfo()又没问题。。是因为在那个函数中不能创建对象还是我的类代码有问题。。其它文件都编译通过了。。纠结。。大侠们赐教啊。。book.txt中内容:
0001 语文 25.0 
0002 数学 32.5   
0003 英语 28.5
0004 政治 21.8 package BookSales;public class Book
{
    String name;
    String code;
    String price;
    String quantity;
    public Book(){};
    public Book(String code,String name,String price,String quantity)
    {
        this.code=code;
        this.name=name;
        this.price=price;
        this.quantity=quantity;        
    }
    
    public Book(String code)    //根据code创建book对象
    {
        BookList bl=new BookList();
        bl.readText();
        for(int i=0;i<bl.getVector().size();i++)
        {
            Book book=bl.getVector().elementAt(i);
            if(code==book.getCode())
            {                
                this.code=book.getCode();
                this.quantity=book.getQuantity();
                this.name=book.getName();
                this.price=book.getPrice();                
            }
            return;
            
        }
    
        
    }
    
    public void setName(String name)         //设置成员变量
    {
        this.name = name;
    }
    public void setCode(String code) 
    {
        this.code =code;    //数据类型转换
    }
    public void setPrice(String price) 
    {
        this.price = price;
    }
    public void setQuantity(String quantity) 
    {
        this.quantity = quantity;//数据类型转换
    }
    
    public String getCode() //访问成员变量
    {
        return code;
    }
    public String getName() 
    {
        return name;
    }
    public String getPrice() 
    {
        return price;
    }
    public String getQuantity() 
    {
        return quantity;
    }    
    public void show()
    {
        System.out.print(name+"\t"+price+"\t"+code+"\n");
    }}package BookSales;
import java.util.List;
import java.util.*;
import java.io.*;
import java.util.ArrayList;    public class BookList
{
    private Vector<Book> bookList=new Vector();            //使用List类数据结构储存书的列表
    int amount=100;    public Vector<Book> getVector()
    {
        return this.bookList;
    }
    
/**
 *读取文件
 *创建Book类vector,将文件信息赋给vector的元素
 **/
    public void readText() 
    {
        File f = new File("book.txt");
        if(!f.exists())                    //判断文件是否可读存在
        {                        
        System.out.println("文件不存在");            
            return;
        }        
        try {
            FileReader fr = new FileReader(f);
            BufferedReader b = new BufferedReader(fr);
            String line = b.readLine();                    //按行读取
            while (line != null) 
            {
                bookList.add(splitString(line));
                line = b.readLine();
                
            }
            System.out.print(bookList.size());
        } 
        catch (FileNotFoundException e) 
        {
            System.out.println("文件不存在");
        } catch (IOException e) 
        {
        System.out.println("输入流异常!");
        }
    }        private Book splitString(String s) 
    {        
        Book book = new Book();
        StringTokenizer t=new StringTokenizer(s);    //字符串分析    
        int m=t.countTokens();
        for(int i=0;i<m;i++)
        {
            switch(i)
            {    
            case 0:    book.setCode(t.nextToken());break;
            case 1: book.setName(t.nextToken());break;
            case 2: book.setPrice(t.nextToken());break;
            }    
        }
        return book;
     }
          
}
package BookSales;
import java.lang.*;
public class Sale
{
public    Book sbook;            //要卖出的书
public BookList bl;        //库存列表
    String stuff;
    int quantity;        //整型!!
    int total;        //每种书总收入
    
    public Sale(){};    public Sale(String code,String stuff,String quantity)    //记录的每一笔交易
    {
        sbook=new Book();//!!!
        sbook.code=code;
        this.stuff=stuff;
        this.quantity=Integer.parseInt(quantity);
        total=Integer.parseInt(sbook.price)*this.quantity;//总收入
    }    
    
    public Book getSalebook()
    {
        return sbook;
    }
    public int getQuantity()
    {
        return quantity;
    }
    
    public void getInfo()//获取总库存信息
    {
        bl=new BookList();//!!!
        sbook=new Book();
        bl.readText();
        for(int i=0;i<bl.getVector().size();i++)
        {        
                sbook.setCode(bl.getVector().get(i).getCode());
                sbook.setName(bl.getVector().get(i).getName());
                sbook.setPrice(bl.getVector().get(i).getPrice());
                sbook.setQuantity(bl.getVector().get(i).getQuantity());
                        
         }
    }
        
        
    public void saleBook(String code)//根据code来设置销售信息
     {
         
         BookList bl=new BookList();//!!!
         sbook=new Book();//!!!
        bl.readText();
        for(int i=0;i<bl.getVector().size();i++)
        {
            if(bl.getVector().get(i).getCode()==code)
            {
                sbook.setCode(bl.getVector().get(i).getCode());
                sbook.setName(bl.getVector().get(i).getName());
                sbook.setPrice(bl.getVector().get(i).getPrice());
                sbook.setQuantity(""+(quantity+=Integer.parseInt(bl.getVector().get(i).getPrice())));
            }                    
         }
    }
}

解决方案 »

  1.   

    补充:
    package BookSales;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import java.util.*;public class BookSalesFrame extends java.awt.Frame 
    {
        private Frame frame;
        private TextField bookcode,stuff,bookquantity;
        private Panel panel1;
        private Button button1,button2,button3,button4,button5;
        private Label label1,label2,label3;
        private TextArea textArea1;
        public BookList bookList;///////
        
                    public BookSalesFrame() //默认构造函数
        {
            initComponents();    
            addListenner();
        }   
        
        private void initComponents() //各组件初始化
        {
            
            panel1 = new Panel();
            button1 = new Button("Process Sales");
            button2 = new Button("Clear");
            label1 = new Label("Staff");
            label2 = new Label("Book Code");
            label3 = new Label("Quantity");
            bookcode = new TextField();
            stuff = new TextField();
            bookquantity = new TextField();
            textArea1 = new TextArea();
            button3 = new Button("Show Book");
            button4 = new Button("Show Chart");
            button5 = new Button("Save and Exit");
                
            
            panel1.setLayout(null);        //布局为null   
            add(panel1, java.awt.BorderLayout.CENTER);     
           
            panel1.add(button1);
            button1.setBounds(70, 330, 110, 40);   
               
            panel1.add(button2);
            button2.setBounds(70, 280, 110, 40);        panel1.add(label1);                                //label
            label1.setBounds(300, 280, 70, 30);
            panel1.add(label2);
            label2.setBounds(300, 310, 70, 30);
            panel1.add(label3);
            label3.setBounds(300, 340, 70, 30);        panel1.add(bookcode);                            //bookcode
            stuff.setBounds(370, 340, 110, 30);
            panel1.add(stuff);
            bookcode.setBounds(370, 280, 110, 30);
            panel1.add(bookquantity);
            bookquantity.setBounds(370, 310, 110, 30);
            panel1.add(textArea1);
            textArea1.setBounds(0, 60, 540, 220);        panel1.add(button3);                            //button3-5
            button3.setBounds(360, 30, 100, 30);
            panel1.add(button4);
            button4.setBounds(60, 30, 100, 30);
            panel1.add(button5);
            button5.setBounds(210, 30, 100, 30); 
                 
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent evt) {
                    exitForm(evt);
                }
            });
            pack();
        }   
        private void exitForm(WindowEvent evt)
         {
            System.exit(0);
        }
        
        private boolean isNumber(String s)            //判断字符串内容是不是整数
        {
            try{
                      int c=Integer.parseInt(stuff.getText());
                  
                }
                   catch(NumberFormatException ne)
                {                
                    return false;                            
                   }
                   return true;
        }
        
        private void addListenner()                 //各组件事件
        {
            button2.addActionListener(new ActionListener() 
            {
                public void actionPerformed(ActionEvent e) 
                {
                    bookcode.setText("");
                    stuff.setText("");
                    bookquantity.setText("");
                }
            });
            
            button1.addActionListener(new ActionListener()
             {    public Sale salebook=new Sale();         //这里的对象不能创建吗?    
        public sa.getInfo();                    //为什么这个方法没有用?
        
        for(int i=0;i<bl.getVector().size();i++)
            {        
                    sbook.setCode(bl.getVector().get(i).getCode());
                    sbook.setName(bl.getVector().get(i).getName());
                    sbook.setPrice(bl.getVector().get(i).getPrice());
                    sbook.setQuantity(bl.getVector().get(i).getQuantity());
                            
             }        public void actionPerformed(ActionEvent e) 
                    {
                        if (bookcode.getText().equals("") || stuff.getText().equals("")||bookquantity.getText().equals(""))     //判断是否输入完整
                        {
                            JOptionPane.showMessageDialog(panel1,"输入不完整!","ERROR", JOptionPane.ERROR_MESSAGE);
                        }
                    else{
                        if(isNumber(bookcode.getText())&&isNumber(bookquantity.getText()))                                            //判断code、quantity是否是数字
                          {                                                
                              if(salebook.getSalebook().getCode()==bookcode.getText())
                              {
                                  if(100-salebook.getQuantity()>0)                                          
                            textArea1.append( stuff.getText()+ "\t\t" + bookcode.getText() + " \t\t" + bookquantity.getText()+"\n");//输出
                                else  JOptionPane.showMessageDialog(panel1,"库存不足!","ERROR", JOptionPane.ERROR_MESSAGE);
                            }
                            else    JOptionPane.showMessageDialog(panel1,"无库存!","ERROR", JOptionPane.ERROR_MESSAGE);
                              }
                    else
                            JOptionPane.showMessageDialog(panel1,"输入格式有误!","ERROR", JOptionPane.ERROR_MESSAGE);
                        }        
                        
                    }
            });    
            
            button3.addActionListener(new ActionListener()
             {
                public void actionPerformed(ActionEvent e) 
                    {
                        BookFrame bf=new BookFrame();
                        //bf.setVisible(true);
                        BookList bl=new BookList();
                        bl.readText();
                        
                        bf.getTextArea().setText(bl.getVector().get(1).getCode());
                        bf.show(bl.getVector().get(1).getCode());
                        System.out.print(bl.getVector().get(1).getCode()+"\t"+bl.getVector().get(1).getName());
                    }
            });    
     }
     }
                
    package BookSales;
    import java.io.*;
    import java.util.*;
    public class TestProg
    {
        public static void main(String args[])
        {
            BookSalesFrame bsf=new BookSalesFrame();
            bsf.setSize(550,430);
            bsf.setLocation(100,100);
               bsf.show();
               
               System.out.print("清单:");
            BookList boo=new BookList();
            boo.readText();        
            for(int i=0;i<boo.getVector().size();i++)
            {
                boo.getVector().elementAt(i).show();
            }
            
            Sale sa=new Sale();                    //在这里都可以创建对象和使用方法getInfo()
            sa.getInfo();                        //
            for(int i=0;i<sa.bl.getVector().size();i++)
            {
            System.out.println(sa.bl.getVector().get(i).getName());
            }    }
    }
     
      

  2.   

    补充:
    package BookSales;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.table.*;
    import java.util.*;public class BookSalesFrame extends java.awt.Frame 
    {
        private Frame frame;
        private TextField bookcode,stuff,bookquantity;
        private Panel panel1;
        private Button button1,button2,button3,button4,button5;
        private Label label1,label2,label3;
        private TextArea textArea1;
        public BookList bookList;///////
        
                    public BookSalesFrame() //默认构造函数
        {
            initComponents();    
            addListenner();
        }   
        
        private void initComponents() //各组件初始化
        {
            
            panel1 = new Panel();
            button1 = new Button("Process Sales");
            button2 = new Button("Clear");
            label1 = new Label("Staff");
            label2 = new Label("Book Code");
            label3 = new Label("Quantity");
            bookcode = new TextField();
            stuff = new TextField();
            bookquantity = new TextField();
            textArea1 = new TextArea();
            button3 = new Button("Show Book");
            button4 = new Button("Show Chart");
            button5 = new Button("Save and Exit");
                
            
            panel1.setLayout(null);        //布局为null   
            add(panel1, java.awt.BorderLayout.CENTER);     
           
            panel1.add(button1);
            button1.setBounds(70, 330, 110, 40);   
               
            panel1.add(button2);
            button2.setBounds(70, 280, 110, 40);        panel1.add(label1);                                //label
            label1.setBounds(300, 280, 70, 30);
            panel1.add(label2);
            label2.setBounds(300, 310, 70, 30);
            panel1.add(label3);
            label3.setBounds(300, 340, 70, 30);        panel1.add(bookcode);                            //bookcode
            stuff.setBounds(370, 340, 110, 30);
            panel1.add(stuff);
            bookcode.setBounds(370, 280, 110, 30);
            panel1.add(bookquantity);
            bookquantity.setBounds(370, 310, 110, 30);
            panel1.add(textArea1);
            textArea1.setBounds(0, 60, 540, 220);        panel1.add(button3);                            //button3-5
            button3.setBounds(360, 30, 100, 30);
            panel1.add(button4);
            button4.setBounds(60, 30, 100, 30);
            panel1.add(button5);
            button5.setBounds(210, 30, 100, 30); 
                 
            addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent evt) {
                    exitForm(evt);
                }
            });
            pack();
        }   
        private void exitForm(WindowEvent evt)
         {
            System.exit(0);
        }
        
        private boolean isNumber(String s)            //判断字符串内容是不是整数
        {
            try{
                      int c=Integer.parseInt(stuff.getText());
                  
                }
                   catch(NumberFormatException ne)
                {                
                    return false;                            
                   }
                   return true;
        }
        
        private void addListenner()                 //各组件事件
        {
            button2.addActionListener(new ActionListener() 
            {
                public void actionPerformed(ActionEvent e) 
                {
                    bookcode.setText("");
                    stuff.setText("");
                    bookquantity.setText("");
                }
            });
            
            button1.addActionListener(new ActionListener()
             {    public Sale salebook=new Sale();         //这里的对象不能创建吗?    
        public sa.getInfo();                    //为什么这个方法没有用?
        
        for(int i=0;i<bl.getVector().size();i++)
            {        
                    sbook.setCode(bl.getVector().get(i).getCode());
                    sbook.setName(bl.getVector().get(i).getName());
                    sbook.setPrice(bl.getVector().get(i).getPrice());
                    sbook.setQuantity(bl.getVector().get(i).getQuantity());
                            
             }        public void actionPerformed(ActionEvent e) 
                    {
                        if (bookcode.getText().equals("") || stuff.getText().equals("")||bookquantity.getText().equals(""))     //判断是否输入完整
                        {
                            JOptionPane.showMessageDialog(panel1,"输入不完整!","ERROR", JOptionPane.ERROR_MESSAGE);
                        }
                    else{
                        if(isNumber(bookcode.getText())&&isNumber(bookquantity.getText()))                                            //判断code、quantity是否是数字
                          {                                                
                              if(salebook.getSalebook().getCode()==bookcode.getText())
                              {
                                  if(100-salebook.getQuantity()>0)                                          
                            textArea1.append( stuff.getText()+ "\t\t" + bookcode.getText() + " \t\t" + bookquantity.getText()+"\n");//输出
                                else  JOptionPane.showMessageDialog(panel1,"库存不足!","ERROR", JOptionPane.ERROR_MESSAGE);
                            }
                            else    JOptionPane.showMessageDialog(panel1,"无库存!","ERROR", JOptionPane.ERROR_MESSAGE);
                              }
                    else
                            JOptionPane.showMessageDialog(panel1,"输入格式有误!","ERROR", JOptionPane.ERROR_MESSAGE);
                        }        
                        
                    }
            });    
            
            button3.addActionListener(new ActionListener()
             {
                public void actionPerformed(ActionEvent e) 
                    {
                        BookFrame bf=new BookFrame();
                        //bf.setVisible(true);
                        BookList bl=new BookList();
                        bl.readText();
                        
                        bf.getTextArea().setText(bl.getVector().get(1).getCode());
                        bf.show(bl.getVector().get(1).getCode());
                        System.out.print(bl.getVector().get(1).getCode()+"\t"+bl.getVector().get(1).getName());
                    }
            });    
     }
     }
                
    package BookSales;
    import java.io.*;
    import java.util.*;
    public class TestProg
    {
        public static void main(String args[])
        {
            BookSalesFrame bsf=new BookSalesFrame();
            bsf.setSize(550,430);
            bsf.setLocation(100,100);
               bsf.show();
               
               System.out.print("清单:");
            BookList boo=new BookList();
            boo.readText();        
            for(int i=0;i<boo.getVector().size();i++)
            {
                boo.getVector().elementAt(i).show();
            }
            
            Sale sa=new Sale();                    //在这里都可以创建对象和使用方法getInfo()
            sa.getInfo();                        //
            for(int i=0;i<sa.bl.getVector().size();i++)
            {
            System.out.println(sa.bl.getVector().get(i).getName());
            }    }
    }