winXP sp3
jdk1.6.0_25
安装目录为:C:\Program Files\Java\jdk1.6.0_25
我安装的是下载的jdk-6u25-windows-i586.exe
但是没有安装public jre也没有安装jdb,就是这些。个人设置环境变量操作为
在系统变量下地PATH下最后加入:C:\Program Files\Java\jdk1.6.0_25\bin用户变量名是:classpath
变量值是:.;C:\Program Files\Java\jdk1.6.0_25\lib;C:\Program Files\Java\jdk1.6.0_25\jre\lib
之前尝试很多种情况了,比如把那个rt.jar,dt.jar,tools.jar都加入过classpath了,可是还不通过命令行下运行javac通过,之后的java命令就出错了
错误提示为:exception in thread"main"java.lang.NoClassDefFoundError:.....................希望有人可以帮助我,我也查了很多了,但是没有帮助啊,最好事告诉我不通过命令行设置classpath的方法,谢谢!!!
jdk1.6.0_25
安装目录为:C:\Program Files\Java\jdk1.6.0_25
我安装的是下载的jdk-6u25-windows-i586.exe
但是没有安装public jre也没有安装jdb,就是这些。个人设置环境变量操作为
在系统变量下地PATH下最后加入:C:\Program Files\Java\jdk1.6.0_25\bin用户变量名是:classpath
变量值是:.;C:\Program Files\Java\jdk1.6.0_25\lib;C:\Program Files\Java\jdk1.6.0_25\jre\lib
之前尝试很多种情况了,比如把那个rt.jar,dt.jar,tools.jar都加入过classpath了,可是还不通过命令行下运行javac通过,之后的java命令就出错了
错误提示为:exception in thread"main"java.lang.NoClassDefFoundError:.....................希望有人可以帮助我,我也查了很多了,但是没有帮助啊,最好事告诉我不通过命令行设置classpath的方法,谢谢!!!
这一个命令报错了,错误如问题描述。
这种情况你要到d:\javabench,然后java:myfirstjavaapp
path :%JAVA_HOME%\jre\bin;%JAVA_HOME%;%JAVA_HOME%\bin;你的JAVA_HOME 中应该有jre吧 ?
添加到系统变量的后边了,测试过javac命令是能用的,但是java d:\javabench\myfirstjavaapp
这一命令却通不过,具体报错我在问题详细内容里讲了。
标 题: [整理] Java 的 Class Path 和 Package
发信站: BBS 水木清华站 (Mon Apr 9 08:15:01 2001)
Java 中的 ClassPath 和 Package
前言:
由于这两个问题新手问得较多, 且回答比较零散, 很难统一整理, 所
以就直接写了一篇, 还请大家见谅.
正文:
一, 类路径 (class path)
当你满怀着希望安装好了 java, 然后兴冲冲地写了个 hello world,然后编译,
运行, 就等着那两个美好的单词出现在眼前, 可是不幸的是, 只看到了 Can 't find
class HelloWorld 或者 Exception in thread "main " java.lang.NoSuchMethodError
: maain.
为什么呢? 编译好的 class 明明在呀.
我们一起来看一看 java 程序的运行过程. 我们已经知道 java 是通过 java
虚拟机来解释运行的, 也就是通过 java 命令, javac 编译生成的 .class
文件就是虚拟机要执行的代码, 称之为字节码(bytecode), 虚拟机通过 classloader
来装载这些字节码, 也就是通常意义上的类. 这里就有一个问题, classloader 从
哪里知道 java 本身的类库及用户自己的类在什么地方呢? 或者有着缺省值(当前路径)
.
或者要有一个用户指定的变量来表明, 这个变量就是类路径(classpath), 或者在运行
的时候传参数给虚拟机. 这也就是指明 classpath 的三个方法. 编译的过程和运行
的过程大同小异, 只是一个是找出来编译, 另一个是找出来装载.
实际上 java 虚拟机是由 java luncher 初始化的, 也就是 java (或 java.exe)
这个程序来做的. 虚拟机按以下顺序搜索并装载所有需要的类:
1, 引导类: 组成 java 平台的类, 包含 rt.jar 和 i18n.jar 中的类.
2, 扩展类: 使用 java 扩展机制的类, 都是位于扩展目录($JAVA_HOME/jre/lib/e
xt)
中的 .jar 档案包.
3, 用户类: 开发者定义的类或者没有使用 java 扩展机制的第三方产品. 你必须在 命令行中使用 -classpath 选项或者使用 CLASSPATH 环境变量来确定这些类的位置. 我 们在上面所说的用户自己的类就是特指这些类.
这样, 一般来说, 用户只需指定用户类的位置, 引导类和扩展类是 "自动 "寻找的.
那么到底该怎么做呢? 用户类路径就是一些包含类文件的目录, .jar, .zip 文件的 列表, 至于类具体怎么找, 因为牵扯到 package 的问题, 下面将会说到, 暂时可认为
只要包含了这个类就算找到了这个类. 根据平台的不同分隔符略有不同, 类 unix 的系 统基本上都是 ": ", windows 多是 "; ". 其可能的来源是:
* ". ", 即当前目录, 这个是缺省值.
* CLASSPATH 环境变量, 一旦设置, 将缺省值覆盖.
* 命令行参数 -cp 或者 -classpath, 一旦指定, 将上两者覆盖.
* 由 -jar 参数指定的 .jar 档案包, 就把所有其他的值覆盖, 所有的类都来自这
个指
定的档案包中. 由于生成可执行的 .jar 文件, 还需要其他一些知识, 比如 package,
还有
特定的配置文件, 本文的最后会提到. 可先看看 jdk 自带的一些例子.
我们举个 HelloWorld 的例子来说明. 先做以下假设:
* 当前目录是 /HelloWorld (或 c:\HelloWorld, 以后都使用前一个)
* jdk 版本为 1.2.2 (linux 下的)
* PATH 环境变量设置正确. (这样可以在任何目录下都可以使用工具)
* 文件是 HelloWorld.java, 内容是:
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println( "Hello World!\n ");
System.exit(0);
}
}
首先这个文件一定要写对, 如果对 c 熟悉的话, 很有可能写成这样:
public static void main(int argc, String[] argv)
{
....
}
这样是不对的, 不信可以试一试. 由于手头没有 java 的规范, 所以
作如下猜想: java 的 application 程序, 必须以 public static void main(String[
])
开始, 其他不一样的都不行.
到现在为止, 我们设置方面只设置了 PATH.
1, 当前路径就是指你的 .class 文件在当前目录下,
[HelloWorld]$ javac HelloWorld.java //这一步不会有多大问题,
[HelloWorld]$ java HelloWorld // 这一步可能就会有问题.
如果出了象开头那样的问题, 首先确定不是由于敲错命令而出错. 如果没有敲错命
令,
那么接着做:
[HelloWorld]$ echo $CLASSPATH
或者
c:\HelloWorld> echo %CLASSPATH%
看看 CLASSPATH 环境变量是否设置了, 如果设置了, 那么用以下命令:
[HelloWorld]$ CLASSPATH=
或者
c:\HelloWorld> set CLASSPATH=
来使它为空, 然后重新运行. 这次用户类路径缺省的是 ". ", 所以应该不会有相
同的问题了. 还有一个方法就是把 ". " 加入到 CLASSPATH 中.
[/]$ CLASSPATH=$CLASSPATH:.
或者
c:\HelloWorld> set CLASSPATH=%CLASSPATH%;.
同样也可以成功. Good Luck.
2, 当你的程序需要第三方的类库支持, 而且比较常用, 就可以采用此种方法.比如
常
用的数据库驱动程序, 写 servlet 需要的 servlet 包等等. 设置方法就是在环境变量
中
加入 CLASSPATH. 然后就可以直接编译运行了. 还是以 HelloWorld 为例, 比如你想在
根
目录中运行它, 那么你直接在根目录下执行
$ java HelloWorld
或者
c:\> java HelloWorld
这样肯定会出错, 如果你的 CLASSPATH 没有改动的话. 我想大家应该知道为什么错
了
吧, 那么怎么改呢? 前面说过, 用户类路径就是一些包含你所需要的类的目录, .jar 档
案
包, .zip 包. 现在没有生成包, 所以只好把 HelloWorld.class 所在的目录加到 CLAS
SPAT
了, 根据前面的做法, 再运行一次, 看看, 呵呵, 成功了, 换个路径, 又成功了!! 不仅
仅?br /> 以直接运行其中的类, 当你要 import 其中的某些类时, 同样处理.
不知道你想到没有, 随着你的系统的不断的扩充, (当然了, 都是一些需要 java 的
东挝?
如果都加到这个环境变量里, 那这个变量会越来越臃肿, 虽然环境变量空间可以开很大
, 总
觉得有些不舒服. 看看下面一个方法.
3, 在命令行参数中指明 classpath.
还是和上面相同的目标, 在任何目录下执行 HelloWorld, 用这个方法怎么实现呢? [/]$ java -cp /HelloWorld HelloWorld
或者
c:\> java -cp c:\HelloWorld HelloWorld
就可以了. 这是这种方法的最简单的应用了. 当你使用了另外的包的时候, 还可以
采用用?br /> 种方法. 例如:
$ javac -classpath aPath/aPackage.jar:. myJava.java
$ java -cp aPath/aPackage.jar:. myJava
或者
c:\> javac -classpath aPath\aPackage.jar;. myJava.java
c:\> java -cp aPath\aPackage.jar;. myJava
这种方法也有一个不方便的的地方就是当第三方包所在的路径较长或者需要两个以
上包包?br /> 时候, 每次编译运行都要写很长, 非常不方便, 这时候可以写脚本来解决. 比
如一个例子:
compile (文件, 权限改为可执行, 当前目录)
$ cat compile
---------------------------
#!/bin/bash
javac -classpath aPath\aPackage.jar:anotherPath\anotherPackage.jar:. m
yJavva.java
---------------------------
run (文件, 权限改为可执行, 当前目录)
$cat run
---------------------------
#!/bin/bash
java -cp aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJava
---------------------------
或者:
compile.bat
c:\HelloWorld> type compile.bat
-------------------------
javac -classpath aPath\aPackage.jar:anotherPath\anotherPackage.jar:. m
yJavva.java
-------------------------
run.bat
c:\HelloWorld> type run.bat
------------------------
java -cp aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJava
------------------------
就可以了. 试试看.
前面提到了扩展类, 扩展类是什么呢? java 的扩展类就是应用程序开发者用来
扩展核心平台功能的 java 类的包(或者是 native code). 虚拟机能像使用系统类一
样使用这些扩展类. 有人建议可以把包放入扩展目录里, 这样, CLASSPATH 也不用设了
,
也不用指定了, 岂不是很方便? 确实可以正确运行, 但是个人认为这样不好, 不能什么 东西都往里搁, 一些标准的扩展包可以, 比如, JavaServlet, Java3D 等等. 可以提个 建议, 加一个环境变量, 比如叫 JARPATH, 指定一个目录, 专门存放用户的 jar zip
等包, 这个要等 SUN 公司来做了.
windows98 下, 我原来安装的时候, 一直装不上, 总是死机, 好不容易装上了, 缺 省的是不能运行正确的, 然后把 tool.jar 放入 CLASSPATH 后工作正常. 现在作测试, 去掉仍然是正确的. 经过多次测试, 发现如果原来曾装过 jdk 的都很好, 没有装过的
装的时候会死机, 多装几次就可以了. 如果你发现正确安装后, 不能正常工作, 就把
tools.jar 加入 CLASSPATH, 试一下.
class MyFirstJavaApp
{
// This is the entry point of the program
public static void main(String args[])
{
// Write something
System.out.println("Hello World!");
}
}
这个贴代码功能是这么用的么
请问你该如何运行java
java命令是需要jre支持的
,改来改去,不断地尝试,其实在jdk1.6.0_25目录下是有jre目录的,我也尝试着把该目录下的rt.jar文件包含在classpath里了,但是还是同样的错误结果啊,请大家帮个忙吧,谢谢。
变量值是:.;C:\Program Files\Java\jdk1.6.0_25\lib【;C:\Program Files\Java\jdk1.6.0_25\jre\lib】括号内的配置上去干嘛?
本来就不需要加上去的。只需要
classpath
.;C:\Program Files\Java\jdk1.6.0_25\lib
就可以了啊