Eclipse 3.2 里的提示错 急急急急急急急!

csqglf2010 2010-04-27 09:25:11
提示的错误在:(1)、18行
里面提示:serializable 类 WordFrequencyStatFrame 未声明类型为 long 的静态终态
serialVersionUID 字段
(2)、还有187行
没有为类型 WordsTable 定义方法 getWords()


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;

/**
* Sample application using Frame.
*
* @author ZHG工作室 Email:wudazhg@163.com
* @version 1.00 08/03/23
*/
public class WordFrequencyStatFrame extends JFrame {

JToolBar jtb = new JToolBar();
JButton jb1 = new JButton("导入文件");
JButton jb2 = new JButton("统计词频");

JTextArea jTextArea1 = new JTextArea();
JTextArea jTextArea2 = new JTextArea();
JSplitPane jsp = new JSplitPane();
JScrollPane p1 = new JScrollPane();
JScrollPane p2 = new JScrollPane();
JLabel statusBar = new JLabel();

Container cp = getContentPane();

/**
* The constructor.
*/
public WordFrequencyStatFrame() {

MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu();
MenuItem menuFileExit = new MenuItem();

menuFile.setLabel("文件");
menuFileExit.setLabel("退出");

// Add action listener.for the menu button
menuFileExit.addActionListener
(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
WordFrequencyStatFrame.this.windowClosed();
}
}
);
menuFile.add(menuFileExit);



Menu m1 = new Menu("操作");
MenuItem mi1 = new MenuItem("导入文件");
mi1.addActionListener(new ImportFile_Listener(this));

m1.add(mi1);



MenuItem mi2 = new MenuItem("统计词频");
mi2.addActionListener(new StatWordFrequency_Listener(this));

m1.add(mi2);



menuBar.add(menuFile);
menuBar.add(m1);

jb1.addActionListener(new ImportFile_Listener(this));
jb2.addActionListener(new StatWordFrequency_Listener(this));
jtb.add(jb1);
jtb.add(jb2);
cp.add(jtb,BorderLayout.NORTH);
setTitle("词频统计");
setMenuBar(menuBar);
setSize(new Dimension(800, 600));

// Add window listener.
this.addWindowListener
(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
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(new java.awt.Font("Dialog", 0, 11));
statusBar.setForeground(new Color(221, 14, 187));
statusBar.setBorder(BorderFactory.createLoweredBevelBorder());
statusBar.setText(" Copyright (c) ZHG工作室 2008 E-mail:wudazhg@163.com " +
" All Rights Reserved 中国·武汉·珞珈山");

cp.add(statusBar,BorderLayout.SOUTH);

}


/**
* Shutdown procedure when run as an application.
*/
protected void windowClosed() {

System.exit(0);
}


void stat(String text){

char[] w = new char[501];
WordsTable wt = new WordsTable();

try{

StringReader in = new StringReader(text);

while(true)
{
int ch = in.read();
if (Character.isLetter((char) ch))
{
int j = 0;
while(true)
{ ch = Character.toLowerCase((char) ch);
w[j] = (char) ch;
if (j < 500) j++;
ch = in.read();
if (!Character.isLetter((char) ch))
{

String word = new String(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═════════════════\n\n");
Iterator iter = wt.getWords();
while(iter.hasNext()){
Word wor = (Word)iter.next();
jTextArea2.append("\n"+wor.getWord()+" : "+wor.getCount());
}
jTextArea2.append("\n═════════════════");

}catch (Exception e)
{
System.out.println(e);


}

}


}


class ImportFile_Listener implements ActionListener{
WordFrequencyStatFrame adaptee;
public ImportFile_Listener(WordFrequencyStatFrame adaptee){
this.adaptee = adaptee;
}
//文件选择对话框
public void actionPerformed(ActionEvent e) {
JFileChooser jfc = new JFileChooser();
int i = jfc.showOpenDialog(null);
if(i==JFileChooser.APPROVE_OPTION){
try{
String str = "";
File f = jfc.getSelectedFile();
FileInputStream in = new FileInputStream(f);
BufferedReader r = new BufferedReader(new InputStreamReader(in));
adaptee.jTextArea1.setText("");
adaptee.jTextArea2.setText("");
while((str=r.readLine())!=null){
adaptee.jTextArea1.append(str+"\n");//末尾加上java的JTextArea中的行结束符
}

}catch(Exception exc){
exc.printStackTrace();//调试

}
}
}

}

class StatWordFrequency_Listener implements ActionListener{
WordFrequencyStatFrame adaptee;
public StatWordFrequency_Listener(WordFrequencyStatFrame adaptee){
this.adaptee = adaptee;
}

public void actionPerformed(ActionEvent e) {
Date d1 = new Date();
adaptee.stat(adaptee.jTextArea1.getText());
Date d2 = new Date();
Toolkit.getDefaultToolkit().beep();
JOptionPane.showMessageDialog(null,"用时"+(d2.getTime()-d1.getTime())+"毫秒!");

}
}
...全文
92 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
秋9 2010-04-27
(1)、
serialVersionUID 字段,会提示警告,若不进行序列化,则并不影响程序运行。
(2)、还有187行
没有为类型 WordsTable 定义方法 getWords()
一种情况: WordsTable中未定义getWords() 方法
二种情况,没有导入WordsTable类。导入WordsTable类快捷键为:Ctl+Shif+O
回复
mochibing 2010-04-27
[Quote=引用 1 楼 mochibing 的回复:]
第一个问题是因为你写的类继承了JFrame类,而JFrame类的顶层父类是Component类,Component实现了Serializable借口,该接口要求你最好定义一个static final的long类型的serialVersionUID,主要是用于序列化的时候做版本控制。

第二个问题很明显你的类引用了WordsTable和Word类,而这两个类你没有import进来
[/Quote]

补充:第一个问题可以在你的class中加入

private static final long serialVersionUID = 1L;

来解决,其中1L表示你这个类的版本,具体的数字可以自己定义
回复
mochibing 2010-04-27
第一个问题是因为你写的类继承了JFrame类,而JFrame类的顶层父类是Component类,Component实现了Serializable借口,该接口要求你最好定义一个static final的long类型的serialVersionUID,主要是用于序列化的时候做版本控制。

第二个问题很明显你的类引用了WordsTable和Word类,而这两个类你没有import进来
回复
相关推荐
发帖
Java SE
创建于2007-09-28

6.2w+

社区成员

Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2010-04-27 09:25
社区公告
暂无公告