问题描述
提示的错误在:(1)、18行里面提示:serializable类WordFrequencyStatFrame未声明类型为long的静态终态serialVersionUID字段(2)、还有187行没有为类型WordsTable定义方法getWords()importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.io.*;importjava.util.*;/***SampleapplicationusingFrame.**@authorZHG工作室Email:wudazhg@163.com*@version1.0008/03/23*/publicclassWordFrequencyStatFrameextendsJFrame{JToolBarjtb=newJToolBar();JButtonjb1=newJButton("导入文件");JButtonjb2=newJButton("统计词频");JTextAreajTextArea1=newJTextArea();JTextAreajTextArea2=newJTextArea();JSplitPanejsp=newJSplitPane();JScrollPanep1=newJScrollPane();JScrollPanep2=newJScrollPane();JLabelstatusBar=newJLabel();Containercp=getContentPane();/***Theconstructor.*/publicWordFrequencyStatFrame(){MenuBarmenuBar=newMenuBar();MenumenuFile=newMenu();MenuItemmenuFileExit=newMenuItem();menuFile.setLabel("文件");menuFileExit.setLabel("退出");//Addactionlistener.forthemenubuttonmenuFileExit.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){WordFrequencyStatFrame.this.windowClosed();}});menuFile.add(menuFileExit);Menum1=newMenu("操作");MenuItemmi1=newMenuItem("导入文件");mi1.addActionListener(newImportFile_Listener(this));m1.add(mi1);MenuItemmi2=newMenuItem("统计词频");mi2.addActionListener(newStatWordFrequency_Listener(this));m1.add(mi2);menuBar.add(menuFile);menuBar.add(m1);jb1.addActionListener(newImportFile_Listener(this));jb2.addActionListener(newStatWordFrequency_Listener(this));jtb.add(jb1);jtb.add(jb2);cp.add(jtb,BorderLayout.NORTH);setTitle("词频统计");setMenuBar(menuBar);setSize(newDimension(800,600));//Addwindowlistener.this.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){WordFrequencyStatFrame.this.windowClosed();}});jsp.setDividerLocation(500);jTextArea2.setEditable(false);p1.getViewport().add(jTextArea1);p2.getViewport().add(jTextArea2);jsp.setLeftComponent(p1);jsp.setRightComponent(p2);cp.add(jsp);statusBar.setFont(newjava.awt.Font("Dialog",0,11));statusBar.setForeground(newColor(221,14,187));statusBar.setBorder(BorderFactory.createLoweredBevelBorder());statusBar.setText("Copyright(c)ZHG工作室2008E-mail:wudazhg@163.com"+"AllRightsReserved中国·武汉·珞珈山");cp.add(statusBar,BorderLayout.SOUTH);}/***Shutdownprocedurewhenrunasanapplication.*/protectedvoidwindowClosed(){System.exit(0);}voidstat(Stringtext){char[]w=newchar[501];WordsTablewt=newWordsTable();try{StringReaderin=newStringReader(text);while(true){intch=in.read();if(Character.isLetter((char)ch)){intj=0;while(true){ch=Character.toLowerCase((char)ch);w[j]=(char)ch;if(j<500)j++;ch=in.read();if(!Character.isLetter((char)ch)){Stringword=newString(w,0,j);if(!wt.isStopWord(word)){//如果不是停用词,则进行统计word=wt.getStem(word);//提取词干wt.stat(word);}break;}}}if(ch<0)break;}in.close();jTextArea2.setText("═════════════════");jTextArea2.append("n下面结果中单词(这里未计停用词表中同形的单词)的总个数为:"+wt.getCount());jTextArea2.append("n词频(这里仅计每个单词词根在文中出现的次数)列表如下:");jTextArea2.append("n═════════════════nn");Iteratoriter=wt.getWords();while(iter.hasNext()){Wordwor=(Word)iter.next();jTextArea2.append("n"+wor.getWord()+":"+wor.getCount());}jTextArea2.append("n═════════════════");}catch(Exceptione){System.out.println(e);}}}classImportFile_ListenerimplementsActionListener{WordFrequencyStatFrameadaptee;publicImportFile_Listener(WordFrequencyStatFrameadaptee){this.adaptee=adaptee;}//文件选择对话框publicvoidactionPerformed(ActionEvente){JFileChooserjfc=newJFileChooser();inti=jfc.showOpenDialog(null);if(i==JFileChooser.APPROVE_OPTION){try{Stringstr="";Filef=jfc.getSelectedFile();FileInputStreamin=newFileInputStream(f);BufferedReaderr=newBufferedReader(newInputStreamReader(in));adaptee.jTextArea1.setText("");adaptee.jTextArea2.setText("");while((str=r.readLine())!=null){adaptee.jTextArea1.append(str+"n");//末尾加上java的JTextArea中的行结束符}}catch(Exceptionexc){exc.printStackTrace();//调试}}}}classStatWordFrequency_ListenerimplementsActionListener{WordFrequencyStatFrameadaptee;publicStatWordFrequency_Listener(WordFrequencyStatFrameadaptee){this.adaptee=adaptee;}publicvoidactionPerformed(ActionEvente){Dated1=newDate();adaptee.stat(adaptee.jTextArea1.getText());Dated2=newDate();Toolkit.getDefaultToolkit().beep();JOptionPane.showMessageDialog(null,"用时"+(d2.getTime()-d1.getTime())+"毫秒!");}}
解决方案
解决方案二:
第一个问题是因为你写的类继承了JFrame类,而JFrame类的顶层父类是Component类,Component实现了Serializable借口,该接口要求你最好定义一个staticfinal的long类型的serialVersionUID,主要是用于序列化的时候做版本控制。第二个问题很明显你的类引用了WordsTable和Word类,而这两个类你没有import进来
解决方案三:
引用1楼mochibing的回复:
第一个问题是因为你写的类继承了JFrame类,而JFrame类的顶层父类是Component类,Component实现了Serializable借口,该接口要求你最好定义一个staticfinal的long类型的serialVersionUID,主要是用于序列化的时候做版本控制。第二个问题很明显你的类引用了WordsTable和Word类,而这两个类你没有import进来
补充:第一个问题可以在你的class中加入privatestaticfinallongserialVersionUID=1L;来解决,其中1L表示你这个类的版本,具体的数字可以自己定义
解决方案四:
(1)、serialVersionUID字段,会提示警告,若不进行序列化,则并不影响程序运行。(2)、还有187行没有为类型WordsTable定义方法getWords()一种情况:WordsTable中未定义getWords()方法二种情况,没有导入WordsTable类。导入WordsTable类快捷键为:Ctl+Shif+O