关于命令行上执行java命令的错误分析 - Could not find or load main class

成功的安装了JDK和Eclipse后,在开发测试Java工程中,很少会遇到开发环境问题。

这都归功于Eclise通过工程(project)和包(package)把这些管理好。


但偶尔在命令行下编译和运行Java文件时,还会遇到如下错误:
(以下示例都是在Win7上进行)
D:\jtest> java J_Hello


调试此类问题可遵循如下步骤:
1. 检查环境变量PATH和CLASSPATH是否正确设置
2. 检查java源文件中的包名(package)是否正确


下面一些有关环境变量常用命令和注意事项。
1. 在Windows的控制台命令窗口中,通过echo和set命令查看、设置和修改和删除环境变量 (仅对命令窗口有效)
2. 通过Windows的图形界面,查看、设置和修改和删除环境变量(全局有效)
详细内容,请参考 博文:


注意事项:

1. Windows对变量的大小写不区分。path,PATH和Path表示同一个变量。
2. PATH和CLASSPATH变量可包含一个列表,相邻的表项用分号(;)隔开。
    PATH=.;D:\j2sdk\bin
    CLASSPATH=.;D:\j2sdk\lib


有时java源程序中package设置不当也会导致上述错误。
1. 在java源文件开头没有包声明语句 package your_package; 
D:\jtest> javac J_Hello.java

D:\jtest> java J_Hello
Hello, the Java world!

2. 在java源文件开头有包声明语句 package your_package; 
D:\jtest>javac J_Hello1.java

D:\jtest>java J_Hello1
Error: Could not find or load main class J_Hello1

错误原因:
编译含有包声明语句的java源程序文件的格式是:
    javac -d your_path your_class.java
此命令能在 your_path/your_package/ 下生成 your_class.class。

上面的命令中没有-d选项,javac会在当前目录下生成J_Hello1.class(没有报错)。
但是执行java命令,会因为找不到class而出错。

解决方法:
1. 在当前目录下手工创建com/mypkg/test目录,将移动J_Hello1.class到该目录下。
2. 用 javac -d . J_Hello1.java 编译,将直接生成./com/mypkg/test/J_Hello1.class。 
D:\jtest>javac -d . J_Hello1.java


D:\jtest>java com.mypkg.test.J_Hello1

Hello, the Java world!


以下是实例程序:

// J_Hello.java
public class J_Hello {
    public static void main(String[] args) {
    	System.out.println("Hello, the Java world!");
    }
}

// J_Hello1.java
package com.mypkg.test; 

public class J_Hello1 {
    public static void main(String[] args) {
    	System.out.println("Hello, the Java world!");
    }
}

欢迎提出宝贵意见,共同学习提高。

尊重原创,欢迎转载,请注明出处。

你可能感兴趣的:(java,coding)