错误描述
Javac HelloWorld.java 能够通过。但是 Java HelloWorld 出现错误 :
hadoop@xuwei-erplab: ~/jarfile $ java helloworld استثناء في الموضوع "main" java.lang.classloader.defineclasscond (classloader.java:631) في java.lang.classloader.defineclass (classloader.java:615) في java.security.secureclassloader.defineclass java.net.urlclassloader.defineclass (urlClassloader.java:283) في java.net.urlclasslassloader.access $ 000 (urlclaslasloader.java:58) في java.net.urlclasslader $ 1.run (urlClasslader.java.java:197) at java.security.accesscontroller.doprivileged (الطريقة الأصلية) في java.net.urlclassloader.findclass (urlClassloader.java:190) في java.lang.classloader.loadclass (classloader.java:306) على Sun.Misc.Launcher $ AppClassloader.loadClass (Launcher.java:301) على java.lang.classloader.loadclass (classloader.java:247) لم يستطع العثور على الفصل الرئيسي: Helloworld. سوف يخرج البرنامج.
2 、问题解决<br /> 在文献 1 中很多人提到都是因为环境变量 classpath 配置错误。说是没有加上当前路径 "." 。但是我查看了自己的 classpath 为
复制代码代码如下:
تصدير classpath =.: $ java_home/lib/tools.jar: $ java_home/lib/dt.jar: $ classpath
这表明我的 classpath 配置是正确的。这个时候我找到了文献 2 , 里面提到了 helloword 分为带包名和不带包名两类。
3 、不含包层次的 HelloWorld.java
الطبقة العامة HelloWorld {public static void main (String args []) {system.out.println ("Hello World!") ؛}}保存在/home/hadoop/jarfile 下 , 使用 javac 命令编译 :
复制代码代码如下:
$ Javac HelloWorld.java
: :
复制代码代码如下:
$ Java HelloWorld
: :
مرحبا بالعالم!
4 、初学者常犯的错误
4.1. 运行时 , 带了 .class : :
复制代码代码如下:
Java HelloWorld.class
系统会误认为你运行的是 HelloWorld 包下的名为 class 的类文件 , 会到系统的 classpath 下 (一般都包括当前目录) 企图寻找 企图寻找 helloworld.class.class 这样的类 , 这样的类当然不存在了;并且也不可能存在 因为 因为 是关键字 是关键字 : :
استثناء في الموضوع "الرئيسي" java.lang.noclassdeffounderror: HelloWorld/Class
4.2. 文件名大小写错误 对于像 Windows 这样的系统 , 编译时可以不关心大小写 (Linux 区分大小写) 。比如编译 HelloWorld.java 时 , :
复制代码代码如下:
Javac HelloWorld.java
: : : helloworld.class 。但在运行时一定要注意大小写 , : :
复制代码代码如下:
جافا هيلوورلد
将报类似于 1 中的错误 :
استثناء في الموضوع "الرئيسي" java.lang.noclassdeffounderror: HelloWorld (الاسم الخطأ: HelloWorld)
5 、包含包层次的 HelloWorld.java
比如上面的 HelloWorld.java 修改如下 :
Package org.myorg ؛ public class helloWorld {public static void main (string args []) {system.out.println ("Hello World!") ؛}}编译时有两种方法
5.1. 直接编译复制代码代码如下:
Javac HelloWorld.java
此时在当前目录下输出 HelloWorld.class 。此时 , 运行不能使用上面相同的方法 使用 : :
复制代码代码如下:
جافا هيلوورلد
: : : :
استثناء في الموضوع "الرئيسي" java.lang.noclassdeffounderror: HelloWorld (الاسم الخطأ: org/myorg/helloworld)
从上述错误信息你也可以看到 , 系统可以找到 helloworld 类 (因为当前路径包含在 因为当前路径包含在 中 中 , 具体为什么会提示 اسم خاطئ , 有兴趣的朋友参见 java 语言规范) 但这个类属于 org.myogr 包。所以 , 你要做的就是按照上述包层次 相应的创建目录层次 , 把上面生成的 把上面生成的 helloWorld.class 放到/hom
复制代码代码如下:
Java org.myorg.helloworld
: :
مرحبا بالعالم!
这儿要注意的是 , 不能使用 java org/myorg/helloworld 来运行 , 此时同样会出现如下错误 :
استثناء في الموضوع "الرئيسي" java.lang.noclassdeffounderror: org/myorg/helloworld (الاسم الخطأ: org/myorg/helloworld)
是不是有点怪怪的 , 那没办法。以后对 java 的包有更深的认识时 , 就会明白了。
5.2. 使用 -D <Cirly> 编译选项 是不是觉得上面的编译方法有点麻烦 , 能不能自动在当前路径 (或任意指定的路径) 下生成包层次呢?有!使用 -d <wired> 编译选项就能做到。
复制代码代码如下:
جافاك -D. Helloworld.java
此时 , 在当前目录 (/home/hadoop/jarfile) 下就生成了一个 org/myorg 目录 (/home/hadoop/jarfile/org/myorg) , 并且输出的 .class 文件也在里面。运行 :
复制代码代码如下:
Java org.myorg.helloworld
: :
مرحبا بالعالم!
: : :/home/hadoop/jarfile/test 下 , 那么你首先创建这个目录 , :
复制代码代码如下:
Javac -D/Home/Hadoop/Jarfile/Test HelloWorld.java
就可以把生成的类文件放到/home/hadoop/jarfile/test 目录下 , 并且按照包层次相应的创建目录路径。你可以在/home/hadoop/jarfile/test/org/myorg 下找到 helloworld.class 文件。此时使用如下命令可以正确运行 (注意如果要用到其它类 请在 请在 请在 请在 中设好 中设好 : :
复制代码代码如下:
hadoop@xuwei-erplab: ~/jarfile/test $ java org.xuwei2.helloworld
注意上述命令是在/home/hadoop/jarfile/test 下执行的。
: :
: :
这是因为 jdk 的版本而产生的问题 , 我装的是 openjdk , 会出现 jar 包的缺失 , 导致启动报错 , 所以这里需要更换为 oracle 官方给出的 jdk
1 、去 oracle : : JDK-7U79-Linux-X64.Tar.GZ
2 、解压之后 , 移动到/usr/local/java 目录下
3 : : vim /etc /profile , 文件最后添加下面几行
复制代码代码如下:
تصدير java_home =/usr/local/java/jdk1.7.0_79 // 实际的 jdk 路径
تصدير classpath =.: $ java_home/jre/lib/rt.jar: $ java_home/lib/dt.jar: $ java_home/lib/tools.jar
مسار التصدير = المسار $: $ java_home/bin
4 、完成上述安装之后 , 再启动 tomcat , : : لا يتم تعريف Java_home ولا متغير بيئة JRE_HOME
tomcat 没有识别出 jdk 的环境变量
5 、修改 tomcat 中 bin 目录的 catalina.sh 文件 在文件的开头 在文件的开头 , : :
复制代码代码如下:
تصدير java_home =/usr/local/java/jdk1.7.0_79 //// 实际的 jdk 路径
تصدير jre_home =/usr/local/java/jdk1.7.0_79/jre
最后启动 Tomcat , 日志打印正常 , 浏览器也能够访问 , 问题解决
استثناء في الموضوع "الرئيسي" java.lang.internalerror
في Sun.Security.ec.sunec.initialize (الطريقة الأصلية)
في sun.security.ec.sunec.access 000 دولار (sunec.java:49)
في Sun.Security.ec.Sunec 1.Run (Sunec.java:61)