Java版python编译器0.1版

Java版python编译器0.1版
今天开始准备写一个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();
    }
}

你可能感兴趣的:(Java版python编译器0.1版)