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!
当然也可以写几行脚本来完成这个小小的功能……
Create小程序的更多相关文章
- 微信应用号(小程序)开发IDE配置(第一篇)
2016年9月22日凌晨,微信宣布“小程序”问世,当然只是开始内测了,微信公众平台对200个服务号发送了小程序内测邀请.那么什么是“小程序”呢,来看微信之父怎么说 看完之后,相信大家大概都有些明白了吧 ...
- 【微信小程序开发•系列文章六】生命周期和路由
这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...
- 微信小程序(微信应用号)开发ide安装解决方法
这两天整个技术圈都炸锅了,微信小程序(微信应用号)发布内测,首批200家收到邀请,但是没受邀请的同学,也不用担心,下面介绍一下解决方法. 首先需要下载ide,昨天只需要下载0.9版本的编辑器并替换文件 ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
- hotCity 小程序城市选择器, 城市数据库可自己导出
hotCity 城市选择器, 城市数据库可自己导出 后台数据API 由HotApp小程序统计提供并维护,如果需要导出并部署在公司的生产环境,最后有SQL导出下载地址 开源地址 https://gith ...
- mac版微信web开发者工具(小程序开发工具)无法显示二维码 解决方案
微信小程序概念的提出,绝对可以算得上中国IT界惊天动地的一件大事,这可能意味着一场新的开发热潮即将到来, 我也怀着激动的心情准备全身心投入其中,不过截止目前,在官方网站上下载的最新版本都无法使用,打开 ...
- ADO.NET学习系列(四)---窗体版的登录小程序
1.需求分析:做一个登录的小程序,基于Winform的窗体小程序.基本要求:登录成功:弹框显示登录成功,登录失败就弹框显示失败. 扩展功能:登录次数超过3次,就”锁定“用户,提示登录错误次数过多,不能 ...
- python学习之最简单的用户注册及登录验证小程序
文章都是从我的个人博客上粘贴过来的哦,更多内容请点击 http://www.iwangzheng.com 正如很多同学所知道的,楼主开始学习python了,前进的道路曲曲折折,有荆棘也有陷阱,从最简单 ...
- 微信小程序(原名微信应用号)开发工具0.9版安装教程
微信小程序全称微信公众平台·小程序,原名微信公众平台·应用号(简称微信应用号) 声明 微信小程序开发工具类似于一个轻量级的IDE集成开发环境,目前仅开放给了少部分受微信官方邀请的人士(据说仅200个名 ...
随机推荐
- Android_基础控件
目录 一.文本控件TextView 二.按钮控件Button 三.图片控件ImageView 四.输入控件EditText 一.文本控件TextView 1.布局文件 <TextView and ...
- javascript属性操作
属性的读写 //属性添加 var obj = {x:1,y:2}; obj.z = 3; obj["m"] = 4; //属性的读取 var obj = {x: 1, y: 2, ...
- 2017-06-20 (pwd ls cd)
pwd pwd 显示当前所在的位置 pwd -P 如果是链接文件,显示链接文件所指的位置 ls ls 查询目录中的内容 ls -a 显示所有的文件,包含隐藏的文件 -l 显示详细的信息 ...
- mybatis-自定义typeHandler
场景一:有个java.util.Date在存入数据库的时候自动转换为timestamp时间戳,从数据库取值的时候把时间戳自动转换为java.util.Date 表结构 CREATE TABLE `us ...
- python_如何在循环引用中管理内存?
案例: python中通过引用计数来回收垃圾对象,在某些环形数据结构(树,图--),存在对象间的循环引用,比如树的父节点引用子节点,子节点同时引用父节点,此时通过del掉引用父子节点,两个对象不能被立 ...
- Asp.net Core 入门实战
Asp.Net Core 是开源,跨平台,模块化,快速而简单的Web框架. Asp.net Core官网的一个合集,方便一次性Clone 目录 快速入门 安装 一个最小的应用 项目模板 路由 静态文件 ...
- linkin大话数据结构--泛型
泛型(Generic) 什么是泛型? java5开始出现的一种对Java语言类型的一种拓展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数类型时指定的类型占位符,就好比方法的形式参数 ...
- HashiCorp Vault介绍
HashiCorp Vault是一款企业级私密信息管理工具.说起Vault,不得不提它的创造者HashiCorp公司.HashiCorp是一家专注于DevOps工具链的公司,其旗下明星级产品包括Vag ...
- Struts2实现文件上传和下载,多文件上传,限制文件大小,限制文件类型
文件上传使用的包:commons-upload-xx.jar commons-io-xx.jar 一.实现文件上传: 1.在表单空间中添 ...
- JAVA多线程之先行发生原则
一.引子 如果java内存模型中所有的有序性都仅仅依靠volatile和synchronized来完成,那么有一些操作会变得很繁琐,但我们在编写java并发代码时并未感觉到这一点,这是因为java语言 ...