Java编写的Java编辑器_JavaIDE

一、JavaIDE效果图

  原理:调用系统cmd的javac和java命令

  

  

  

二、java源码

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class JavaIDE {
    public static void main(String[] args) {
        FileWindow win = new FileWindow();
        win.pack();
        win.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        win.setBounds(200, 180, 550, 360);
        win.setVisible(true);
    }
}

@SuppressWarnings("serial")
class FileWindow extends JFrame implements ActionListener, Runnable {
    Thread compiler = null;
    Thread run_prom = null;
    boolean bn = true;
    CardLayout mycard;
    File file_saved = null;
    JButton button_input_text,
            button_compiler_text, button_compiler, button_run_prom, button_see_doswin;

    JPanel p = new JPanel();
    JTextArea input_text = new JTextArea();
    JTextArea compiler_text = new JTextArea();
    JTextArea dos_out_text = new JTextArea();
    JTextField input_file_name_text = new JTextField();
    JTextField run_file_name_text = new JTextField();

    public FileWindow() {
        super("JavaIDE");
        mycard = new CardLayout();
        compiler = new Thread(this);
        run_prom = new Thread(this);
        button_input_text = new JButton("ProgramInput(white)");
        button_compiler_text = new JButton("Compiler(pick)");
        button_see_doswin = new JButton("Run(blue)");
        button_compiler = new JButton("compiler");
        button_run_prom = new JButton("run");

        p.setLayout(mycard);
        p.add("input", input_text);
        p.add("compiler", compiler_text);
        p.add("dos", dos_out_text);
        add(p, "Center");

        compiler_text.setBackground(Color.pink);
        dos_out_text.setBackground(Color.cyan);
        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(3, 3));

        p1.add(button_input_text);
        p1.add(button_compiler_text);
        p1.add(button_see_doswin);
        p1.add(new JLabel("Input File Name(.java):"));
        p1.add(input_file_name_text);
        p1.add(button_compiler);
        p1.add(new JLabel("Input Class Name"));
        p1.add(run_file_name_text);
        p1.add(button_run_prom);
        add(p1, "North");

        button_input_text.addActionListener(this);
        button_compiler_text.addActionListener(this);
        button_compiler.addActionListener(this);
        button_run_prom.addActionListener(this);
        button_see_doswin.addActionListener(this);

    }

    public void run() {
        if (Thread.currentThread() == compiler) {
            compiler_text.setText(null);
            String temp = input_text.getText().trim();
            byte[] buffer = temp.getBytes();
            int b = buffer.length;
            String file_name = null;
            file_name = input_file_name_text.getText().trim();

            try {
                file_saved = new File(file_name);
                FileOutputStream writefile = null;
                writefile = new FileOutputStream(file_saved);
                writefile.write(buffer, 0, b);
                writefile.close();
            } catch (Exception e) {
                System.out.println("ERROR");
            }
            try {

                Runtime rt = Runtime.getRuntime();
                InputStream in = rt.exec("javac " + file_name).getErrorStream();
                BufferedInputStream bufIn = new BufferedInputStream(in);
                byte[] shuzu = new byte[100];
                int n = 0;
                boolean flag = true;
                while ((n = bufIn.read(shuzu, 0, shuzu.length)) != -1) {
                    String s = null;
                    s = new String(shuzu, 0, n);
                    compiler_text.append(s);
                    if (s != null) {
                        flag = false;
                    }
                }
                if (flag) {
                    compiler_text.append("Compiler Succeed!");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        else if (Thread.currentThread() == run_prom) {
            dos_out_text.setText(null);
            try {
                Runtime rt = Runtime.getRuntime();
                String path = run_file_name_text.getText().trim();
                Process stream = rt.exec("java " + path);
                InputStream in = stream.getInputStream();
                BufferedInputStream bisErr = new BufferedInputStream(stream.getErrorStream());
                BufferedInputStream bisIn = new BufferedInputStream(in);

                byte[] buf = new byte[150];
                byte[] err_buf = new byte[150];

                @SuppressWarnings("unused")
                int m = 0;
                @SuppressWarnings("unused")
                int i = 0;
                String s = null;
                String err = null;
                while ((m = bisIn.read(buf, 0, 150)) != -1) {
                    s = new String(buf, 0, 150);
                    dos_out_text.append(s);
                }
                while ((i = bisErr.read(err_buf)) != -1) {
                    err = new String(err_buf, 0, 150);
                    dos_out_text.append(err);
                }
            } catch (Exception e) {

            }
        }
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == button_input_text) {
            mycard.show(p, "input");
        } else if (e.getSource() == button_compiler_text) {
            mycard.show(p, "compiler");
        } else if (e.getSource() == button_see_doswin) {
            mycard.show(p, "dos");
        } else if (e.getSource() == button_compiler) {
            if (!(compiler.isAlive())) {
                compiler = new Thread(this);
            }
            try {
                compiler.start();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
            mycard.show(p, "compiler");
        } else if (e.getSource() == button_run_prom) {
            if (!(run_prom.isAlive())) {
                run_prom = new Thread(this);
            }
            try {
                run_prom.start();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
            mycard.show(p, "dos");
        }
    }

}

三、注意事项

  1、原理是调用系统jdk的javac(编译)和java(运行)命令

    所以在程序中尽量不要出现中文汉字的GBK编码

  2、由于java(运行)的命令的找寻原理,在CLASSPATH中有寻找路径,所以运行时可能会出现找不到主类的error

    2.1、如果希望它查询当前目录,需要在CLASSPATH中加入“.;”,代表当前目录。

      在CLASSPATH中添加:,;C:\Program Files (x86)\Java\jdk1.8.0_131\lib;;%JAVA_HOME%\lib\tools.jar

    2.2、删除包名package

  3、程序运行成功会在同目录下创建文件和相应的编译后.class文件

原文地址:https://www.cnblogs.com/null-/p/10037174.html

时间: 2024-11-10 01:13:20

Java编写的Java编辑器_JavaIDE的相关文章

07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao

 1  创建day14数据库,创建user.sql表: A 创建数据库 day14 B 创建数据表 users create table users ( id int primary keyauto_increment, username varchar(20), password varchar(20) ); 2  添加依赖的jar包 c3p0-0.9.1.2.jar mysql-connection-java-5.0.8-bin.jar commons-beanutils-1.8.0.j

JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。

1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package Test03; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOExceptio

Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,

36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,该抽象类中有个“安 全生产”的抽象方法:abstract void safetyInProduction() (

java基础,继承类题目:编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类 E

21.编写一个Java应用程序,该程序包括3个类:Monkey类.People类和主类 E.要求: (1) Monkey类中有个构造方法:Monkey (String s),并且有个public void speak() 方法,在speak方法中输出“咿咿呀呀......”的信息. (2)People类是Monkey类的子类,在People类中重写方法speak(),在speak方法 中输出“小样的,不错嘛!会说话了!”的信息. (3)在People类中新增方法void think(),在thi

java编写Base64密码器

Base64加密算法,应用广泛,尤其是在电子邮件传输上,有很大的用途 用JAVA编写的程序代码如下 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.JFrame; import javax.s

编写无Java脚本的JSP页面

在上一章中总结了Web开发中应用MVC架构模式,将Servlet 用做控制器,JSP作为视图,JavaBean作为模型,实现业务流程控制,页面逻辑和业务逻辑的分离.然而,使用前面的技术实现MVC,并不是最完美的. 在当代的一个最佳的JavaWeb开发实践就是在MVC架构模式中,中和使用JavaBean,EL(expression language),JSP自定义标记库以及JSP标准标记库JSTL,编写无java脚本的JSP页面. 一 JSP表达式语言EL 在使用基于MVC架构模式的Web应用开发

用Eclipse编写运行Java程序

1.选择一个空的文件夹,作为workspace工作空间,用来存放你以后用eclipse写的Java程序. 2.新建java项目:File->new->java project 3.完成创建后,在src上单击鼠标右键 new->class 4.这时候就可以在主窗体编写代码了 5.按run  as   java  application,即可运行. 用Eclipse编写运行Java程序,布布扣,bubuko.com

Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt

2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt package Test03; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import jav

Java基础-输入输出-3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。

3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc. try { FileInputStream in = new FileInputStream("e:/TextRw.txt"); FileOutputStream out = new FileOutputStream("e:/2012412440张伟.txt"); int i =0; byte[] b1 = new by