小妹学j2se 考核项目是做一个Java编辑器。
就是有一个菜单项叫“编译”,有一个叫“运行”。
一个编辑区域,一个输出区域。点击“编译”就用jvm编译我们在编辑区写的代码。如果编译出错,就将错误输出到编辑区下方的一个输出区域中。
有哪位大哥哥大姐姐帮帮我嘛。
小妹不甚感激。
就是有一个菜单项叫“编译”,有一个叫“运行”。
一个编辑区域,一个输出区域。点击“编译”就用jvm编译我们在编辑区写的代码。如果编译出错,就将错误输出到编辑区下方的一个输出区域中。
有哪位大哥哥大姐姐帮帮我嘛。
小妹不甚感激。
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");
}
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什么的还得自己考虑-_-,等等等等问题,是否能给点分?