今天开始准备写一个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小程序