Lua语言简易集成开发环境--二、主界面及代码运行的实现

主界面

主界面

  1. 菜单栏及文件功能实现

使用的Windowbuilder插件进行的布局,首先是菜单栏。
菜单栏,设置的有文件级联菜单项(包括新建、打开、保存、另存为等)。
新建的思路也就是更改窗口名字,然后清空文本框。
打开文件代码如下:

FileDialog fs=new FileDialog(shell,SWT.OPEN);
				fs.setFilterExtensions(new String[] {".lua"});
				String s=fs.open();
				try {
					File ss=new File(s);
					styledText.setText("");//清空文本框
					//System.out.println(ss.getParent());
					file_path=ss.getPath();
					parent_path=ss.getParent();
					file_name=ss.getName();
					BufferedReader br=new BufferedReader(new FileReader(ss));
					String line = null;  //变量字符串初始化为空  
                	while((line = br.readLine()) != null){
                		shell.setText(file_name);
                		styledText.append(line + "\r\n");  //显示每行内容
                		new KeywordsHighlighting(shell,keywords,styledText);
                	}
                	br.close();   //关闭文本
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

保存文件代码:

if(file_path!=null)//保存的文件有目录时,直接保存不需要弹窗
				{
					try {
						//System.out.println(file_path);
						@SuppressWarnings("resource")
						BufferedWriter br=new BufferedWriter(new FileWriter(file_path));
						String values=styledText.getText();
						br.write(values);
						br.flush();
						JOptionPane.showMessageDialog(null, "保存成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
				else {
						FileDialog fs=new FileDialog(shell,SWT.SAVE);
						fs.setFilterPath(System.getProperty("C:\\Users\\ZYF\\Desktop"));//设置打开默认的路径
						fs.setFilterExtensions(new String[] {"*.lua", "*.*"}); //设置所打开文件的扩展名;
						fs.setFilterNames( new String[]{"Text Files (*.lua)", "All Files (*.*)"}); //设置显示到下拉框中的扩展
						String s=fs.open();
						//file_path=fs.getFilterPath();
						
						try {
							File ss=new File(s);
							@SuppressWarnings("resource")
							BufferedWriter br=new BufferedWriter(new FileWriter(ss));
							String values=styledText.getText();
						
							br.write(values);
							br.flush();
							JOptionPane.showMessageDialog(null, "保存成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
						}
					}

另存为和保存代码的唯一区别就是不用判断文件是否已保存。直接进行保存操作。

  1. 文本框及代码运行。

文本框使用的是StyledText文本框为了方便后续的代码高亮。
代码运行思路:
先把文本框里的代码保存成.lua后缀的文件,然后调用cmd,执行lua xxx.lua指令进行执行。再把获取到的运行结果返回到运行结果返回窗口。
如图:
在这里插入图片描述
代码如下:

st_1.setFont(SWTResourceManager.getFont("微软雅黑", 12, SWT.NORMAL));
		st_1.setWordWrap(true);//自动换行
		st_1.setText("");//每次运行先清空
		st_1.setText("运行结果展示----------------"+"\r\n");//每次运行先清空
		try {
			
			Process exec = Runtime.getRuntime().exec("cmd /c cd "+UI.parent_path+"&&lua "+UI.file_name); 
			exec.waitFor();
	        final int exitValue = exec.waitFor();
	        if(exitValue==0) {
	        	InputStream input = exec.getInputStream(); //获取cmd段的返回结果
	        	//OutputStream output=exec.getOutputStream();
	        	BufferedReader reader = new BufferedReader(new InputStreamReader(input));
	        	String szline=null;
				while((szline= reader.readLine()) != null) {
					szline=st_1.getText()+szline+"\n";
					st_1.setText(szline);
				}
				reader.close(); 
	        }
	        else {
	        	InputStream errinput=exec.getErrorStream();//获取错误消息
	        	BufferedReader errinreader = new BufferedReader(new InputStreamReader(errinput));
	        	String szline=null;
	        	st_1.setText("error-----> ");
				while((szline= errinreader.readLine()) != null) {
					szline=st_1.getText()+szline+"\n";
					st_1.setText(szline);
				}
				errinreader.close(); 
	        } 
	        exec.waitFor();
			exec.destroy(); 
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-gene rated catch block
			e.printStackTrace();
		} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值