Java JFileChooser.showOpenDialog未打开,并且未引发错误?

Java JFileChooser.showOpenDialog未打开,并且未引发错误?,java,swing,hex,jfilechooser,Java,Swing,Hex,Jfilechooser,好的,我正在尝试创建一个十六进制编辑器,我正在尝试创建一个加载JMenuItem,但它不起作用。JFileChooser OpenDialog不会显示,也不会显示任何错误 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import java.util.Vector; import java.io.File; imp

好的,我正在尝试创建一个十六进制编辑器,我正在尝试创建一个加载JMenuItem,但它不起作用。JFileChooser OpenDialog不会显示,也不会显示任何错误

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
import java.util.Vector;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class HexEditor extends JFrame{
    JTextArea textArea;
    JFileChooser chooser;// = new JFileChooser();
    FileInputStream fin;
    JMenuBar menuBar;
    JMenu file;
        JMenuItem load;

    public HexEditor(){
        super("Cypri's java hex editor");

        chooser = new JFileChooser();

        load = new JMenuItem("Load");
            load.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent event) {


                    try{

                        openFile();
                        fin = new FileInputStream(chooser.getSelectedFile());

                        int ch;
                        StringBuffer strContent = new StringBuffer("");

                        for(int i = 0; (ch = fin.read()) != -1; i++){
                            String s = Integer.toHexString(ch);

                            if(s.length() < 2)
                                s = "0" + Integer.toHexString(ch);

                            if(i < 10)
                                strContent.append(" " + s.toUpperCase());

                            else{
                                strContent.append(" " + s.toUpperCase() + "\n");
                                i = 0;
                            }
                        }

                        textArea.setText(strContent.toString());
                        //textArea.setWrapStyleWord(true);
                        //textArea.setColumns(50);
                        //textArea.setRows(50);
                    }

                    catch(Exception e){
                        e.printStackTrace();
                    }
                }
            });

        file = new JMenu("File");
        file.add(new JMenuItem("Load"));

        menuBar = new JMenuBar();
        menuBar.add(file);

        textArea = new JTextArea();
        textArea.setSize(300,300);
        textArea.setText("Hello\n");
        textArea.append(" world!");




        setSize(640, 480);
        //getContentPane().setBackground(Color.);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(BorderLayout.NORTH, menuBar);
        getContentPane().add(BorderLayout.WEST, textArea);
        pack();
        setVisible(true);
    }

    public void openFile(){
        chooser.showOpenDialog(this);
    }

    public static void main(String[] args){
        HexEditor app = new HexEditor();
    }
}
import java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.*;
导入java.util.Vector;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.InputStream;
公共类HexEditor扩展了JFrame{
JTextArea textArea;
JFileChooser chooser;//=new JFileChooser();
文件输入流鳍;
梅努巴;
JMenu文件;
项目负荷;
公共编辑(){
超级(“Cypri的java十六进制编辑器”);
chooser=newjfilechooser();
加载=新项目(“加载”);
load.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件){
试一试{
openFile();
fin=新文件输入流(chooser.getSelectedFile());
int-ch;
StringBuffer strContent=新StringBuffer(“”);
对于(int i=0;(ch=fin.read())!=-1;i++){
字符串s=整数。toHexString(ch);
如果(s.长度()<2)
s=“0”+整数.tohextstring(ch);
如果(i<10)
追加(“+s.toUpperCase());
否则{
strContent.append(“+s.toUpperCase()+”\n”);
i=0;
}
}
textArea.setText(strContent.toString());
//textArea.setWrapStyleWord(true);
//textArea.setColumns(50);
//textArea.setRows(50);
}
捕获(例外e){
e、 printStackTrace();
}
}
});
文件=新JMenu(“文件”);
添加(新的JMenuItem(“加载”);
menuBar=newjmenubar();
menuBar.add(文件);
textArea=新的JTextArea();
textArea.setSize(300300);
textArea.setText(“Hello\n”);
textArea.append(“世界!”);
设置大小(640480);
//getContentPane().setBackground(颜色);
getContentPane().setLayout(新的BorderLayout());
getContentPane().add(BorderLayout.NORTH,菜单栏);
getContentPane().add(BorderLayout.WEST,textArea);
包装();
setVisible(真);
}
公共void openFile(){
chooser.showOpenDialog(此);
}
公共静态void main(字符串[]args){
HexEditor应用程序=新建HexEditor();
}
}

事件调度线程中是否正在执行所有操作?如果不是的话,你会得到像这样的小错误

另外,请查看BSD许可证下的整洁十六进制编辑器组件:)


您从不将JMenuItem添加到侦听器中,而是创建一个新的侦听器

替换:

file.add(new JMenuItem("Load"));


与他的问题无关:)我不会那么说。他直接在主线程中做事情,这绝对是灾难的秘诀。我想说,但你是对的。你真的应该从EDT开始。对不起,你是对的:)这是手头的主要问题。我最初将问题理解为整个表单没有显示。哦,这很有效,我会尽快回答这个问题。谢谢。:)
file.add(new JMenuItem("Load"));
file.add(load);