march alex's blog
hello,I am march alex
posts - 52,comments - 7,trackbacks - 0
今天开始准备写一个Java可以跑得python编译器。
基本假设是这样的:
    有一个JFrame,里面有一框,是输入框也是输出框,一开始如果有需要输入的内容得先写到上面去;
    然后单击菜单栏打开python文件;
    然后得到的结果就会显示出来。
目前知识有了一个框架,当test.py内容为:
print 123456789+123456789000000000
时,运行程序,现实的效果如下:

代码如下:
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.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;


public class CompilerOpener extends JFrame {

    private static final int Width = 1000;
    private static final int Height = 600;
    private static JFrame frame = null;
    private static JTextArea textArea = null;
    
    
    public CompilerOpener() {
        frame = new JFrame("Java的python编译器");
        
        textArea = new JTextArea();
        textArea.setLineWrap(true);// 激活自动换行功能
        frame.add(textArea);
        
        JMenuBar menuBar = new JMenuBar();
        frame.setJMenuBar(menuBar);
        
        JMenu fileMenu = new JMenu("文件");
        JMenuItem openItem = new JMenuItem("打开");
        openItem.addActionListener(new MyAction());
        fileMenu.add(openItem);
        menuBar.add(fileMenu);
        
        frame.setLocationRelativeTo(null);
        frame.setSize(Width, Height);
        frame.setLocation(100, 100);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    
    private class MyAction implements ActionListener {
        public void actionPerformed(ActionEvent evt) {
            //Object s = evt.getSource();
            JFileChooser jfc=new JFileChooser();
            jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
            jfc.showDialog(new JLabel(), "选择");
            File file=jfc.getSelectedFile();
            int file_len = file.toString().length();
            String ans = new String();
            if(!file.isFile() || !file.toString().substring(file_len-3, file_len).equals(".py")) {
                ans = "请确定你选择的文件是一个正确的python文件!";
            } else {
                String content = textArea.getText();
                ans += content;
                ans += "结果:\n";
                try {
                    BufferedReader reader = new BufferedReader(new FileReader(file.toString()));
                    String line = null;
                    try {
                        while((line = reader.readLine()) != null) {
                            StringTokenizer st = new StringTokenizer(line , " +");
                            String s , a , b;
                            s = st.nextToken();
                            a = st.nextToken();
                            b = st.nextToken();
                            char[] ca = a.toCharArray();
                            char[] cb = b.toCharArray();
                            int lena = ca.length, lenb = cb.length;
                            int c = 0,len = lena > lenb ? lena : lenb;
                            int[] aa = new int[len+1];
                            for(int i=0;i<len;i++) {
                                if(lena-1-i >= 0)
                                    c += (ca[lena-1-i] - '0'); 
                                if(lenb-1-i >= 0)
                                    c += (cb[lenb-1-i] - '0');
                                aa[i] = c % 10;
                                c /= 10;
                            }
                            if(c > 0) aa[len++] = 1;
                            for(int i=len-1;i>=0;i--) ans += aa[i];
                            ans += "\n";
                        }
                        textArea.setText(ans);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                
            }
            
        }
    }
    
    public static void main(String[] args) {
        new CompilerOpener();
    }
}
posted on 2015-03-20 14:19 marchalex 阅读(179) 评论(0)  编辑  收藏 所属分类: java小程序

只有注册用户登录后才能发表评论。


网站导航: