小妹学j2se 考核项目是做一个Java编辑器。
就是有一个菜单项叫“编译”,有一个叫“运行”。
一个编辑区域,一个输出区域。点击“编译”就用jvm编译我们在编辑区写的代码。如果编译出错,就将错误输出到编辑区下方的一个输出区域中。
有哪位大哥哥大姐姐帮帮我嘛。
小妹不甚感激。

解决方案 »

  1.   

    先存为一个文件,Process pro=Runtime.getRuntime().exec(...),用xxxInputStream x=pro.getErrorStream()获取错误信息
      

  2.   

    [code=Java]
    package compile;import java.awt.BorderLayout;import java.awt.Rectangle;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileReader;import java.io.FileWriter;
    import java.io.IOException;import java.util.StringTokenizer;import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.JToolBar;
    import javax.swing.filechooser.FileFilter;public class CompileFrame extends JFrame {
        private BorderLayout layoutMain = new BorderLayout();
        private JPanel panelCenter = new JPanel();
        private JToolBar toolBar = new JToolBar();
        private JButton buttonOpen = new JButton();
        private JButton buttonClose = new JButton();
        private JButton buttonHelp = new JButton();
        private ImageIcon imageOpen = new ImageIcon(CompileFrame.class.getResource("openfile.gif"));
        private ImageIcon imageClose = new ImageIcon(CompileFrame.class.getResource("closefile.gif"));
        private ImageIcon imageHelp = new ImageIcon(CompileFrame.class.getResource("help.gif"));
        private JTextArea sourceArea = new JTextArea();
        private JTextArea outputArea = new JTextArea();
        private JScrollPane sourcePane = new JScrollPane(sourceArea);
        private JScrollPane outputPane = new JScrollPane(outputArea);
        private JLabel sepLabel = new JLabel();
        private JButton compileButton = new JButton();
        private JButton runButton = new JButton();
        private String name;
        private String state;    public CompileFrame() {
            try {
                jbInit();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }    private void jbInit() throws Exception {
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.getContentPane().setLayout( layoutMain );
            panelCenter.setLayout( null );
            toolBar.setToolTipText("null");
            this.setSize( 600, 500 );
            this.setTitle( "Java Compile" );
            buttonOpen.setToolTipText( "Open File" );
            buttonOpen.setIcon( imageOpen );
            buttonOpen.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            buttonOpen_actionPerformed(e);
                        }
                    });
            buttonClose.setToolTipText( "Close File" );
            buttonClose.setIcon( imageClose );
            buttonClose.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            buttonClose_actionPerformed(e);
                        }
                    });
            buttonHelp.setToolTipText( "About" );
            buttonHelp.setIcon( imageHelp );
            buttonHelp.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            buttonHelp_actionPerformed(e);
                        }
                    });
            sourceArea.setTabSize(3);
            sourcePane.setBounds(new Rectangle(10, 10, 570, 240));
            outputPane.setBounds(new Rectangle(10, 265, 570, 155));
            sepLabel.setText("|");
            compileButton.setText("编译");
            compileButton.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            compileButton_actionPerformed(e);
                        }
                    });
            runButton.setText("运行");
            runButton.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
                            runButton_actionPerformed(e);
                        }
                    });
            toolBar.add( buttonOpen );
            toolBar.add( buttonClose );
            toolBar.add( buttonHelp );
            toolBar.add(sepLabel);
            toolBar.add(compileButton, null);
            toolBar.add(runButton, null);
            this.getContentPane().add(toolBar, BorderLayout.NORTH);
            panelCenter.add(outputPane, null);
            panelCenter.add(sourcePane, null);
            this.getContentPane().add(panelCenter, BorderLayout.CENTER);
        }    private void buttonOpen_actionPerformed(ActionEvent e) {
            JFileChooser ch=new JFileChooser(".");
            ch.setFileFilter(new FileFilter(){
                        public boolean accept(File f) {
                            String name=f.getAbsolutePath();
                            String suffix=".java";
                            return name.endsWith(suffix)||f.isDirectory();
                        }                    public String getDescription() {
                            return ".java";
                        }
                    });
            ch.setFileSelectionMode(JFileChooser.FILES_ONLY);
            File file=null;
            if(ch.showOpenDialog(this)==JFileChooser.APPROVE_OPTION){
                file=ch.getSelectedFile();
                if(!file.exists()||!file.getName().endsWith(".java"))
                    return;
                else{
                    BufferedReader buffer;
                    sourceArea.setText("");
                    try {
                        buffer = new BufferedReader(new FileReader(file));
                        while(buffer.ready()){
                            sourceArea.append(buffer.readLine()+"\n");
                        }
                    } catch (FileNotFoundException f) {
                    } catch (IOException f) {
                    }
                }
            }
        }    private void buttonHelp_actionPerformed(ActionEvent e) {
            JOptionPane.showMessageDialog(this,"Made in China!");
        }    private void buttonClose_actionPerformed(ActionEvent e) {
            String text=sourceArea.getText();
            boolean isPub=true;
            int start=text.indexOf("public class ");
            if(start<0){
                isPub=false;
                start=text.indexOf("class ");
            }
            if(start<0){
                JOptionPane.showMessageDialog(this,"找不到类");
                return;
            }
            
            int end=text.indexOf("{",start);
            if(end<0){
                JOptionPane.showMessageDialog(this,"找不到类?");
                return;
            }
            if(isPub)
                name=text.substring(start+13,end);
            else
                name=text.substring(start+6,end);
            StringTokenizer token=new StringTokenizer(name);
            name=token.nextToken();
            saveAsJavaFile(name,text);
        }
        
        private void runButton_actionPerformed(ActionEvent e) {
            buttonClose_actionPerformed(e);
            state="run";
            runCommand("java "+name);
        }
        
        private void compileButton_actionPerformed(ActionEvent e) {
            buttonClose_actionPerformed(e);
            state="compile";
            runCommand("javac "+name+".java");
        }
        
       
      

  3.   

     public int saveAsJavaFile(String fileName,String text){
            if(fileName==null&&fileName.equals(""))
                return 1;
            File file=new File(fileName+".java");
            
            BufferedWriter writer;
            try {
                writer = new BufferedWriter(new FileWriter(file));
                writer.write(text);
                writer.flush();
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
                return 2;
            }
            return 0;
        }
        
        public void runCommand(String cmd){
            Process pro;
            try {
                pro = Runtime.getRuntime().exec(cmd);
                pro.waitFor();
                FileInputStream errorIn=(FileInputStream)pro.getErrorStream();
                if(errorIn.available()>0){
                    byte[] error=new byte[errorIn.available()];
                    errorIn.read(error);
                    outputArea.append("\n#Error:\n"+new String(error)+"\n######\n");
                }else{
                    if(state.equals("compile"))
                        outputArea.append("********Compile complete*******");
                }
                BufferedInputStream inData=(BufferedInputStream)pro.getInputStream();
                if(inData.available()>0){
                    byte[] in=new byte[inData.available()];
                    inData.read(in);
                    outputArea.append("\n-Output:\n"+new String(in)+"\n------\n");
                }
                outputArea.setCaretPosition(outputArea.getText().length());
            } catch (IOException e) {
            } catch (InterruptedException e) {
            }
        }
    }[/code]
    提供个思路而已,怎么处理package什么的还得自己考虑-_-,等等等等问题,是否能给点分?