总共有四个类
ZipTestZipFrame frame=new ZipFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
ZipFrmae public class ZipFrame extends JFrame {
public ZipFrame(){
setTitle("ZipTest");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
JMenuBar menuBar=new JMenuBar();

JMenu menu=new JMenu("打开");
menuBar.add(menu);
openItem=new JMenuItem("打开");
openItem.addActionListener(new FileAction());    //这里报错
menu.add(openItem);

JMenuItem exitItem=new JMenuItem("退出");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e){
System.exit(0);
} }
);
setJMenuBar(menuBar);
fileText=new JTextArea();

fileCombo=new JComboBox();
fileCombo.addActionListener(new FileAction());  //这里报错

add(fileCombo,BorderLayout.SOUTH);
add(new JScrollPane(fileText),BorderLayout.CENTER);
}
public JComboBox getFileCombo() {
return fileCombo;
}
public void setFileCombo(JComboBox fileCombo) {
this.fileCombo = fileCombo;
}
public JMenuItem getOpenItem() {
return openItem;
}
public void setOpenItem(JMenuItem openItem) {
this.openItem = openItem;
}
public JTextArea getFileText() {
return fileText;
}

public static final int DEFAULT_WIDTH=400;
public static final int DEFAULT_HEIGHT=300;
private JTextArea fileText;
private JComboBox fileCombo;
private JMenuItem openItem;
还有个事情类...    private ZipFrame frame=new ZipFrame();   //这里报错
private String zipname;

解决方案 »

  1.   

    下面是源码:package com.io.Zip;
    import javax.swing.*;
    public class ZipTest { /**
     * @param args
     */
    public static void main(String[] args) {

    ZipFrame frame=new ZipFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    }
        
    }package com.io.Zip;import javax.swing.*;import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;public class ZipFrame extends JFrame {
    public ZipFrame(){
    setTitle("ZipTest");
    setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
    JMenuBar menuBar=new JMenuBar();

    JMenu menu=new JMenu("打开");
    menuBar.add(menu);
    openItem=new JMenuItem("打开");
    openItem.addActionListener(new FileAction());
    menu.add(openItem);

    JMenuItem exitItem=new JMenuItem("退出");
    menu.add(exitItem);
    exitItem.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent e){
    System.exit(0);
    } }
    );
    setJMenuBar(menuBar);
    fileText=new JTextArea();

    fileCombo=new JComboBox();
    fileCombo.addActionListener(new FileAction());

    add(fileCombo,BorderLayout.SOUTH);
    add(new JScrollPane(fileText),BorderLayout.CENTER);
    }
    public JComboBox getFileCombo() {
    return fileCombo;
    }
    public void setFileCombo(JComboBox fileCombo) {
    this.fileCombo = fileCombo;
    }
    public JMenuItem getOpenItem() {
    return openItem;
    }
    public void setOpenItem(JMenuItem openItem) {
    this.openItem = openItem;
    }
    public JTextArea getFileText() {
    return fileText;
    }

    public static final int DEFAULT_WIDTH=400;
    public static final int DEFAULT_HEIGHT=300;
    private JTextArea fileText;
    private JComboBox fileCombo;
    private JMenuItem openItem;



    }package com.io.Zip;import java.io.File;
    import java.util.ArrayList;import javax.swing.filechooser.FileFilter;public class ExtensionFileFilter extends FileFilter { public void addExtension(String extension){
    if(!extension.startsWith("."))
    extension="."+extension;
    extension.toLowerCase();
    }
    public void setDescription(String description) {
    this.description = description;
    }
    public String getDescription(){
    return description;
    }
    @Override
    public boolean accept(File f) {
    if(f.isDirectory()) return true;
    String name=f.getName().toLowerCase();
    for(String e :extensions){
    if(name.endsWith(e))
    return true;
    }
    return false;
    }
    private String description="";
    private ArrayList<String> extensions=new ArrayList<String>();}package com.io.Zip;import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.*;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;import javax.swing.*;
    public class FileAction implements ActionListener { @Override
    public void actionPerformed(ActionEvent e) {
    if(frame.getOpenItem()==e.getSource()){
    openFile();
    }
    if(frame.getFileCombo()==e.getSource()){
    loadFile((String)frame.getFileCombo().getSelectedItem());
    } }
    private void loadFile(String name) {
    try {
    ZipInputStream zin=new ZipInputStream(new FileInputStream(zipname));
    ZipEntry entry;
    frame.getFileText().setText("");
    while((entry=zin.getNextEntry())!=null){
    if(entry.getName().equals(name)){
    BufferedReader in=new BufferedReader(new InputStreamReader(zin));
    String line ;
    while((line=in.readLine())!=null){
    frame.getFileText().append(line);
    frame.getFileText().append("/n");
    }
    }
    }

    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }
    private void openFile(){
    JFileChooser chooser=new JFileChooser();
    chooser.setCurrentDirectory(new File("."));
    ExtensionFileFilter filter=new ExtensionFileFilter();
    filter.addExtension(".zip");
    filter.addExtension(".jar");
    filter.setDescription("ZIP 文件");
    chooser.setFileFilter(filter);
    int r=chooser.showOpenDialog(frame);
    if(r==JFileChooser.APPROVE_OPTION){
    zipname=chooser.getSelectedFile().getPath();
    scanFile();
    }

    }
    private void scanFile(){
    frame.getFileCombo().removeAllItems();
    try {
    ZipInputStream zin=new ZipInputStream(new FileInputStream(zipname));
    ZipEntry entry;
    while((entry=zin.getNextEntry())!=null){
    frame.getFileCombo().addItem(entry.getName());
    zin.closeEntry();
    }
    zin.close();
    } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

        private ZipFrame frame=new ZipFrame();
    private String zipname;
    }
      

  2.   

    下面是一部分:
    Exception in thread "main" java.lang.StackOverflowError
    at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
    at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)
    at java.awt.Window.init(Unknown Source)
    at java.awt.Window.<init>(Unknown Source)
    at java.awt.Frame.<init>(Unknown Source)
    at java.awt.Frame.<init>(Unknown Source)
    at javax.swing.JFrame.<init>(Unknown Source)