package src;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
@SuppressWarnings("serial")
public class TestFrame extends JFrame {
JToolBar toolBar = new JToolBar();//创建一个工具栏
JButton bNew = new JButton();//创建没有标签和图标的按钮
JButton bOpen = new JButton();
JButton bSave = new JButton();
JButton bbSave=new JButton();
JButton bComp = new JButton();
JButton bRun = new JButton();
JTextArea content = new JTextArea();
JScrollPane jsp = new JScrollPane(content);//创建一个显示指定组件内容的 JScrollPane,只要组件的内容超过视图大小就会自动显示水平和垂直滚动条。
File curFile = null;
public TestFrame() {
bNew.setToolTipText("新建");
bNew.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/new.gif")));
bOpen.setToolTipText("打开");
bOpen.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/open.gif")));
bSave.setToolTipText("保存");
bSave.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/save.gif")));
bbSave.setToolTipText("另存为");
bbSave.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/bbsave.gif")));
bComp.setToolTipText("编译");
bComp.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/comp.gif")));
bRun.setToolTipText("运行");
bRun.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/run.gif")));
toolBar.add(bNew);
toolBar.add(bOpen);
toolBar.add(bSave);
toolBar.add(bbSave);
toolBar.add(bComp);
toolBar.add(bRun);
//打开
bOpen.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser("."); //创建一个给定目录的对话框
if(chooser.showOpenDialog(TestFrame.this) == JFileChooser.CANCEL_OPTION) {
return ;//showOpenDialog(Component)显示文件打开对话框,参数为父组件对象
}
curFile = chooser.getSelectedFile();
content.setText("");
try {
BufferedReader br = new BufferedReader(new FileReader(curFile));
String msg = br.readLine();
while(msg != null) {
content.append(msg+"\n");
msg = br.readLine();
}
} catch (IOException e1) {
JOptionPane.showMessageDialog(TestFrame.this, "打开文件失败!");
}
}
});
//编译
bComp.addActionListener(new ActionListener(){ @Override
public void actionPerformed(ActionEvent e) {
if(curFile == null) {
JOptionPane.showMessageDialog(TestFrame.this, "没有要解析的文件");
return;
}
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec("javac -d " + curFile.getAbsoluteFile().getParent() + " " + curFile.getAbsolutePath());
InputStream error = p.getErrorStream();
boolean success = true;
StringBuilder errorMsg = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(error));
String msg;
while((msg = br.readLine()) != null) {
success = false;
errorMsg.append(msg+"\n");
}
br.close();
if(success) {
JOptionPane.showMessageDialog(TestFrame.this, "编译成功.");
} else {
JOptionPane.showMessageDialog(TestFrame.this, "编译失败,原因:\n" + errorMsg.toString());
}
} catch (Exception ee) {
JOptionPane.showMessageDialog(TestFrame.this, "编译失败,原因:" + ee.getMessage());
}
}
});
//运行
bRun.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec("java -cp" +" "+ curFile.getAbsoluteFile().getParent() + " " + curFile.getAbsolutePath());//我想是这句话的问题
InputStream error = p.getErrorStream();
boolean success = true;
StringBuilder errorMsg = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(error));
String msg;
while((msg = br.readLine()) != null) {
success = false;
errorMsg.append(msg+"\n");
}
br.close();
if(success) {
JOptionPane.showMessageDialog(TestFrame.this, "运行成功.");
} else {
JOptionPane.showMessageDialog(TestFrame.this, "运行失败,原因:\n" + errorMsg.toString());
}
} catch (Exception ee) {
JOptionPane.showMessageDialog(TestFrame.this, "运行失败,原因:" + ee.getMessage());
}
}
});
add(toolBar,BorderLayout.NORTH);
add(jsp);
setTitle("我的单元测试工具");
setBounds(400,400,600,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new TestFrame();
}
}
我想是这句话的问题Process p = r.exec("java -cp" +" "+ curFile.getAbsoluteFile().getParent() + " " + curFile.getAbsolutePath());运行这个程序后,打开自己写的另一个Java程序,按编译键,显示编译成功,但是按运行键就有问题,好像就是找不到的那个意思,改来改去弄不好,就只能请教了!!!
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
@SuppressWarnings("serial")
public class TestFrame extends JFrame {
JToolBar toolBar = new JToolBar();//创建一个工具栏
JButton bNew = new JButton();//创建没有标签和图标的按钮
JButton bOpen = new JButton();
JButton bSave = new JButton();
JButton bbSave=new JButton();
JButton bComp = new JButton();
JButton bRun = new JButton();
JTextArea content = new JTextArea();
JScrollPane jsp = new JScrollPane(content);//创建一个显示指定组件内容的 JScrollPane,只要组件的内容超过视图大小就会自动显示水平和垂直滚动条。
File curFile = null;
public TestFrame() {
bNew.setToolTipText("新建");
bNew.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/new.gif")));
bOpen.setToolTipText("打开");
bOpen.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/open.gif")));
bSave.setToolTipText("保存");
bSave.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/save.gif")));
bbSave.setToolTipText("另存为");
bbSave.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/bbsave.gif")));
bComp.setToolTipText("编译");
bComp.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/comp.gif")));
bRun.setToolTipText("运行");
bRun.setIcon(new ImageIcon(TestFrame.class.getResource("/com/xyd/java/lesson12/pic/run.gif")));
toolBar.add(bNew);
toolBar.add(bOpen);
toolBar.add(bSave);
toolBar.add(bbSave);
toolBar.add(bComp);
toolBar.add(bRun);
//打开
bOpen.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser("."); //创建一个给定目录的对话框
if(chooser.showOpenDialog(TestFrame.this) == JFileChooser.CANCEL_OPTION) {
return ;//showOpenDialog(Component)显示文件打开对话框,参数为父组件对象
}
curFile = chooser.getSelectedFile();
content.setText("");
try {
BufferedReader br = new BufferedReader(new FileReader(curFile));
String msg = br.readLine();
while(msg != null) {
content.append(msg+"\n");
msg = br.readLine();
}
} catch (IOException e1) {
JOptionPane.showMessageDialog(TestFrame.this, "打开文件失败!");
}
}
});
//编译
bComp.addActionListener(new ActionListener(){ @Override
public void actionPerformed(ActionEvent e) {
if(curFile == null) {
JOptionPane.showMessageDialog(TestFrame.this, "没有要解析的文件");
return;
}
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec("javac -d " + curFile.getAbsoluteFile().getParent() + " " + curFile.getAbsolutePath());
InputStream error = p.getErrorStream();
boolean success = true;
StringBuilder errorMsg = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(error));
String msg;
while((msg = br.readLine()) != null) {
success = false;
errorMsg.append(msg+"\n");
}
br.close();
if(success) {
JOptionPane.showMessageDialog(TestFrame.this, "编译成功.");
} else {
JOptionPane.showMessageDialog(TestFrame.this, "编译失败,原因:\n" + errorMsg.toString());
}
} catch (Exception ee) {
JOptionPane.showMessageDialog(TestFrame.this, "编译失败,原因:" + ee.getMessage());
}
}
});
//运行
bRun.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec("java -cp" +" "+ curFile.getAbsoluteFile().getParent() + " " + curFile.getAbsolutePath());//我想是这句话的问题
InputStream error = p.getErrorStream();
boolean success = true;
StringBuilder errorMsg = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(error));
String msg;
while((msg = br.readLine()) != null) {
success = false;
errorMsg.append(msg+"\n");
}
br.close();
if(success) {
JOptionPane.showMessageDialog(TestFrame.this, "运行成功.");
} else {
JOptionPane.showMessageDialog(TestFrame.this, "运行失败,原因:\n" + errorMsg.toString());
}
} catch (Exception ee) {
JOptionPane.showMessageDialog(TestFrame.this, "运行失败,原因:" + ee.getMessage());
}
}
});
add(toolBar,BorderLayout.NORTH);
add(jsp);
setTitle("我的单元测试工具");
setBounds(400,400,600,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new TestFrame();
}
}
我想是这句话的问题Process p = r.exec("java -cp" +" "+ curFile.getAbsoluteFile().getParent() + " " + curFile.getAbsolutePath());运行这个程序后,打开自己写的另一个Java程序,按编译键,显示编译成功,但是按运行键就有问题,好像就是找不到的那个意思,改来改去弄不好,就只能请教了!!!
生成的.class文件在curFile.getAbsoluteFile().getParent()+"\\src 的目录下呀,curFile.getName().substring(0, curFile.getName().length()-5这句话得到文件名(不带后缀名)
因为运行用Java -cp +.class的路径+文件名(不带.java)
但还是不对,呵呵!帮帮忙!