cmd怎么编译java没问题,cmd下运行java类文件时,提示:java出现找不到文件

拒绝访问 | www. | 百度云加速
请打开cookies.
此网站 (www.) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3b9a-ua98).
重新安装浏览器,或使用别的浏览器问题描述:
编写简单的Hello.java程序,在cmd命令行下用javac Hello.java命令编译没有问题,可以生成Hello.class文件。但输入java Hello命令后(文件目录和命令目录一致),提示错误:“找不到或无法加载主类”。
解决思路:
从网上查找原因和解决方法,有提到环境变量classpath设置问题,但多次尝试问题依旧没有解决。然后使用java -cp % Hello执行,结果正确。
%classpath% 或者 set classpath,查看classpath环境变量值,发现只是显示当前用户变量中的classpath值,而不是系统变量中的classpath值。
解决方法1:
将系统变量中的classpath值添加到用户变量中,然后执行java Hello,成功!使用java -cp % Hello执行,仍正确!
解决方法2:
在系统变量中的classpath值中添加&&.;& &表示显示当前路劲,如下图;
可能需要重启下cmd
上网查找用户变量与系统变量的区别,
用户变量是当前用户使用,你用其它用户登陆,这个环境变量就不起作用了(私有)。而
系统变量,是对所有用户都可使用的(公有)。
但还不太清楚为什么出现这种情况?
上编:下编:
本月热门的内容
1 2 3 4 5 6 7 8 9 10
最近更新的内容有时候我们需要直接用jdk提供的java命令来执行class文件让软件运行起来,特别是很多初学者,但经常会发现如下提示:
用eclipse或用ant则没有问题。
其实原因很简单,我们忽略了2个细节。
1.java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。
2.我们忽略了package的影响。
第一个问题好解决:
我们直接在CLASSPATH环境变量中加入“.;”即可。“.”的意思是搜索当前目录
第二个问题看下面分析:
看下面两个类
& & & & & & & & & &类A & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 类B
类A和类B的唯一差别就是没有定义包名。
我们的工程路径是D:\HelloWorld,在HelloWorld文件夹中建立一个src文件夹,类B的源代码文件就放在src中。用javac编译完以后
会在src文件夹中生成NewsManager.class,如下
执行如下:
&现在我们再把源代码换成类A
为什么加入了package后就不对了呢?
类A中package的路径是org.will.app.main。按照java规定,我们应该按照package定义的路径来存放源文件,类A应该放入:
src\org\will\app\main下,如下:
然后我们编译执行:
依然有问题,为什么,其实大家再回去看看java的书籍就会发现,一个类的全名应该是包名+类名。类A的全名:org.will.app.main.NewsManager
好的,再试试:
还是不对。为什么?
仔细看上面的图,我们在main目录下让java命令去执行org.will.app.main.NewsManager,其实它会以为类的路径是:
D:\HelloWorld\src\org\will\app\main\org\will\app\main\NewsManager,大家看到了吧,路径重复了。
所以,我们应该这样执行:
一、java执行class文件是根据CLASSPATH指定的地方来找,不是我们理解当前目录。如果希望它查询当前目录,需要在CLASSPATH中加入“.;”,代表当前目录。
二、java执行class文件对package的路径是强依赖的。它在执行的时候会严格以当前用户路径为基础,按照package指定的包路径转化为文件路径去搜索class文件。各位同学以后注意就OK啦。至于网上说的要在CLASSPATH要加各种包等等都是泛泛而谈,真正静下心分析这个问题的资料不多。很多都没有说到点子上,会误导人的。
阅读(...) 评论()package MyJ
public class MyThread {
public static void SysPrint(String str) {
System.out.println(str);
public static void main(String[] args) {
SysPrint("Hello World");
java文件在:C:\Users\Ivan\Desktop\txt\MyThread.javajavac后,class文件保存在:C:\Users\Ivan\Desktop\txt\MyJava\MyThread.class
关于cmd下的java命令正确的做法1.把目录cd到:C:\Users\Ivan\Desktop\txt然后:java MyJava.MyThread即:C:\Users\Ivan\Desktop\txt&java MyJava.MyThread
2.在任何目录下,使用-cp或-classpath命令参数(不包括C:\Users\Ivan\Desktop\txt\MyJava)如:C:&java -cp C:\Users\Ivan\Desktop\txt MyJava.MyThread如:D:&java -cp C:\Users\Ivan\Desktop\txt MyJava.MyThread
关于-cp (作用、效果同-classpath)
-cp &路径&
指定查找用户类文件和注释处理程序的位置
错误的做法,有1.把目录cd到:C:\Users\Ivan\Desktop\txt\MyJava然后:java MyJava.MyThread或:java MyThread即:C:\Users\Ivan\Desktop\txt\MyJava&java MyJava.MyThread或:C:\Users\Ivan\Desktop\txt\MyJava&java MyThread
2.错误使用-cp,将路径直接指到了包里面即:D:&java -cp C:\Users\Ivan\Desktop\txt\MyJava MyJava.MyThread或:D:&java -cp C:\Users\Ivan\Desktop\txt\MyJava MyThread
总结,将当前路径设置为包的父目录,或使用-cp/-classpath参数,使得当前路径相当于在包的父目录,就能够正确执行java命令了。
补上一遍更有营养的文章,
浏览 48622
浏览: 145361 次
来自: 广州
附件呢?看不到啊?
你好,我按照你的写法配置了一遍,发现会报异常:a differ ...
看上去很值得学习!
赞一个 不错用上了
哇!!!!!这个真没想过。
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 cmd 编译java文件 的文章

 

随机推荐