大三java课需要写个编译器前端,现在编辑器都写好了,到运行那一步的时候出问题了。代码如下:
runbutton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
try {
String str = chooser.getSelectedFile().getPath();
String path = str.substring(0,str.length()-5); 
  Runtime rt = Runtime.getRuntime();
rt.exec("cmd /k start java " + path);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

});      执行到这的时候,弹出的cmd窗口一闪而过。但还是能看到里面的提示信息是:错误:找不到或无法加载主类。
      用同样的方法能够调用javac编译当前打开的文件,为什么调用java命令的时候就不行了。还有cmd窗口为什么还是一闪而过,没有停留。不是用/k 就不会立即关闭么? 对java完全是个新手,求大神指导,谢谢~~~~

解决方案 »

  1.   

    应该是当前目录不正确导致的。不过既然是java去调用的,何必要重新开启进程去做呢,直接在当前虚拟机中以线程的方式来调用一下不是也可以啊,自己定义一个类加载器不就行了。
      

  2.   


    我随便打开了一个文件(test2.java)然后输出了一下path 是  E:\java\test2 而且也能在这个目录下找到test2.class文件,但还是错的,直接在cmd里输入java E:\java\test2 也错了。是classpath路径没设置好么?  后面你说方法还不是特别理解......
      

  3.   

    自己写一个类加载器加载你选择的那个文件,然后直接调用这个类的main方法不就行了,根本不用这么麻烦的啊。直接在当前虚拟机里面运行。
      

  4.   


    还是不会啊,能不能帮忙看一下代码
    public void actionPerformed(ActionEvent arg0) {
    String path = chooser.getSelectedFile().getPath();
    String name = chooser.getSelectedFile().getName();
    path = path.substring(0,path.length()-name.length()-1);
    name = name.substring(0,name.length()-5);
    FileSystemClassLoader c = new FileSystemClassLoader(path); 
    try {
    Class<?> clas = c.findClass(name);
    Object run = clas.newInstance();
    //clas.
    } catch (ClassNotFoundException e) {
    这样子能实例化加载的类,但也无法执行里面的main方法啊?
          我是刚看类加载器的,一开始看你说感觉很容易。但看了一点才发现不会啊!您能不能帮忙简单写个调用main方法的例子啊......感激不尽!