Create小程序
我有时候喜欢直接用命令行创建、编译、执行java文件, 每次创建一个文件都要新建一个.java文件,然后再编辑.java文件加入类名,主函数……
这些流程我有点厌倦,于是就编写了一个超级简单的自动创建工具。下面贴出代码:
import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import javax.swing.JButton; 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.JTextField; import javax.swing.border.EmptyBorder; public class Create extends JFrame { private String classname; private JPanel contentPane; private JTextField textField; private JLabel lblNewLabel_1; private JButton btnNewButton_1; private JButton btnNewButton_2; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Create frame = new Create(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Create() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JLabel lblNewLabel = new JLabel("Class name:"); lblNewLabel.setBounds(49, 0, 93, 42); contentPane.add(lblNewLabel); textField = new JTextField(); textField.setBounds(170, 7, 212, 26); contentPane.add(textField); textField.setColumns(10); lblNewLabel_1 = new JLabel(""); lblNewLabel_1.setBounds(49, 34, 333, 18); contentPane.add(lblNewLabel_1); JButton btnNewButton = new JButton("create"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { classname = textField.getText(); if(classname.equals("")){ lblNewLabel_1.setText("请输入需要创建的类名!"); }else{ PrintWriter out = new PrintWriter(new File(classname+".java")); String str = "class "+classname+"{\n\tpublic "+classname+"(){}\n\tpublic static void main(String[] args){\n\t// TODO Auto-generated method stub\n\n\t}\n}"; out.print(str); out.close(); textField.setText(""); lblNewLabel_1.setText(classname+".java 创建成功"); } } catch (FileNotFoundException e1) { // TODO Auto-generated catch block JOptionPane.showMessageDialog(getComponent(0), "创建失败"); } } }); btnNewButton.setBounds(275, 62, 107, 23); contentPane.add(btnNewButton); JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(10, 95, 414, 156); contentPane.add(scrollPane); JTextArea textArea = new JTextArea(); scrollPane.setViewportView(textArea); btnNewButton_1 = new JButton("javac编译"); btnNewButton_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(classname.equals("")){ lblNewLabel_1.setText("你还没有创建类文件!"); }else{ final Map<String, String> env = new HashMap<String, String>(System.getenv()); final String[] strings=mapToStringArray(env); BufferedReader reader=null; Process p; String error=""; try { p = Runtime.getRuntime().exec("cmd /c javac "+classname+".java",strings); p.waitFor(); reader=new BufferedReader(new InputStreamReader(p.getErrorStream())); String line; while((line = reader.readLine()) != null) { error+=line+"\n"; } } catch (Exception e1) { // TODO Auto-generated catch block System.out.println("编译程序出错"); } if(error.equals("")){ textArea.setText("编译成功。"); }else{ textArea.setText(error); } } } }); btnNewButton_1.setBounds(38, 62, 93, 23); contentPane.add(btnNewButton_1); btnNewButton_2 = new JButton("java运行"); btnNewButton_2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { final Map<String, String> env = new HashMap<String, String>(System.getenv()); final String[] strings=mapToStringArray(env); BufferedReader reader=null; Process p; String error=""; String success=""; try { p = Runtime.getRuntime().exec("cmd /c java "+classname,strings); p.waitFor(); reader=new BufferedReader(new InputStreamReader(p.getErrorStream())); String line; while((line = reader.readLine()) != null) { error+=line+"\n"; } if(error.equals("")){ reader=new BufferedReader(new InputStreamReader(p.getInputStream())); while((line = reader.readLine()) != null) { success+=line+"\n"; } } } catch (Exception e1) { // TODO Auto-generated catch block System.out.println("运行程序出错"); } if(error.equals("")){ textArea.setText("运行成功.\n"+success); }else{ textArea.setText(error); } } }); btnNewButton_2.setBounds(159, 62, 93, 23); contentPane.add(btnNewButton_2); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); } String[] mapToStringArray(Map<String, String> map) { final String[] strings = new String[map.size()]; int i = 0; for (Map.Entry<String, String> e : map.entrySet()) { strings[i] = e.getKey() + '=' + e.getValue(); i++; } return strings; } }
程序运行图:
我们在Class name栏目输入我们需要创建的类名。
点击create按钮后就会在当前路径下生成Hello.java文件。文件内容是:
class Hello{ public Hello(){} public static void main(String[] args){ // TODO Auto-generated method stub } }
然后我们在源文件中添加一行测试代码:System.out.println("hello");
class Hello{ public Hello(){} public static void main(String[] args){ // TODO Auto-generated method stub System.out.println("hello"); } }
点击编译就能编译成功生成.class文件。
点击运行就能出现运行结果:
虽然很简单,但是还是挺实用的,以后每次就用它来创建我的类文件了,O(∩_∩)O!
当然也可以写几行脚本来完成这个小小的功能……