总共有四个类
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;
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;
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;
}
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)