欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Exception in thread main java.lang.NoClassDefFoundError錯誤解決方法

 更新時間:2016年08月20日 09:40:32   投稿:mdxy-dxy  
這篇文章主要介紹了Exception in thread main java.lang.NoClassDefFoundError錯誤解決方法,需要的朋友可以參考下

錯誤描述
javac helloworld.java能夠通過。但是java helloworld出現(xiàn)錯誤:

hadoop@xuwei-erplab:~/jarfile$ java HelloWorld 
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/xuwei/HelloWorld)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
	at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: HelloWorld. Program will exit.

2、問題解決
在文獻(xiàn)1中很多人提到都是因為環(huán)境變量classpath配置錯誤。說是沒有加上當(dāng)前路徑"."。但是我查看了自己的classpath為

復(fù)制代碼 代碼如下:

export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

這表明我的classpath配置是正確的。這個時候我找到了文獻(xiàn)2,里面提到了helloword分為帶包名和不帶包名兩類。
3、不含包層次的HelloWorld.java

public class HelloWorld {
	public static void main(String args[]){
		System.out.println("Hello World!");
	}
}

保存在/home/hadoop/jarfile下,使用javac命令編譯:

復(fù)制代碼 代碼如下:

$ javac HelloWorld.java  

運行:
復(fù)制代碼 代碼如下:

$ java HelloWorld 

屏幕打印出:
  Hello World!

4、初學(xué)者常犯的錯誤
4.1. 運行時,帶了.class后綴
        如果你試圖使用如下命令:(下面的命令都是假設(shè)在HelloWorld.java所在目錄執(zhí)行,即/home/hadoop/jarfile)

復(fù)制代碼 代碼如下:

java HelloWorld.class 

系統(tǒng)會誤認(rèn)為你運行的是HelloWorld包下的名為class的類文件,會到系統(tǒng)的CLASSPATH下(一般都包括當(dāng)前目錄)企圖尋找 HelloWorld.class.class這樣的類,這樣的類當(dāng)然不存在了;并且也不可能存在,因為class是關(guān)鍵字,不能作為一個類的名字。所以會報如下錯誤信息:
  Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class
4.2. 文件名大小寫錯誤
  對于像Windows這樣的系統(tǒng),編譯時可以不關(guān)心大小寫(linux區(qū)分大小寫)。比如編譯HelloWorld.java時,也可以使用:

復(fù)制代碼 代碼如下:

javac helloworld.java

也可以編譯通過,但產(chǎn)生的類文件仍然是和源文件相符的:HelloWorld.class。但在運行時一定要注意大小寫,比如試圖使用如下命令運行:

復(fù)制代碼 代碼如下:

java helloworld 

將報類似于1中的錯誤:
  Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: 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. 直接編譯

復(fù)制代碼 代碼如下:

javac HelloWorld.java 

  此時在當(dāng)前目錄下輸出HelloWorld.class。此時,運行不能使用上面相同的方法,使用:

復(fù)制代碼 代碼如下:

java HelloWorld 

  運行時,出現(xiàn)如下錯誤:
  Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/myorg/HelloWorld)
  從上述錯誤信息你也可以看到,系統(tǒng)可以找到HelloWorld類(因為當(dāng)前路徑包含在CLASSPATH中,具體為什么會提示wrong name,有興趣的朋友參見Java語言規(guī)范),但這個類屬于org.myogr包。所以,你要做的就是按照上述包層次,相應(yīng)的創(chuàng)建目錄層次,把上面生成的HelloWorld.class放到/home/hadoop/jarfile/org/myorg目錄下。HelloWorld.java在/home/hadoop/jarfile/目錄下。運行: 

復(fù)制代碼 代碼如下:

java org.myorg.HelloWorld 

系統(tǒng)打印出:
 Hello World! 

這兒要注意的是,不能使用java org\myorg\HelloWorld來運行,此時同樣會出現(xiàn)如下錯誤:
Exception in thread "main" java.lang.NoClassDefFoundError :org\myorg\HelloWorld (wrong name: org\myorg\HelloWorld)
  是不是有點怪怪的,那沒辦法。以后對Java的包有更深的認(rèn)識時,就會明白了。
5.2. 使用 -d <directory>編譯選項
  是不是覺得上面的編譯方法有點麻煩,能不能自動在當(dāng)前路徑(或任意指定的路徑)下生成包層次呢?有!使用-d <directory>編譯選項就能做到。

復(fù)制代碼 代碼如下:

javac -d . HelloWorld.java 

  此時,在當(dāng)前目錄(/home/hadoop/jarfile)下就生成了一個org\myorg目錄(/home/hadoop/jarfile/org/myorg),并且輸出的.class文件也在里面。運行:

復(fù)制代碼 代碼如下:

java org.myorg.HelloWorld 

系統(tǒng)打印:

Hello World!

  如果你想把生成的類文件集中存放在一個目錄中,比如:/home/hadoop/jarfile/test下,那么你首先創(chuàng)建這個目錄,然后編譯時:

復(fù)制代碼 代碼如下:

javac -d /home/hadoop/jarfile/test HelloWorld.java 

  就可以把生成的類文件放到/home/hadoop/jarfile/test目錄下,并且按照包層次相應(yīng)的創(chuàng)建目錄路徑。你可以在/home/hadoop/jarfile/test/org/myorg下找到HelloWorld.class文件。此時使用如下命令可以正確運行(注意如果要用到其它類,請在CLASSPATH中設(shè)好):

復(fù)制代碼 代碼如下:

hadoop@xuwei-erplab:~/jarfile/test$ java org.xuwei2.HelloWorld 

注意上述命令是在/home/hadoop/jarfile/test下執(zhí)行的。

如果不行可以參考下面的方法:

第二個問題解決方法:

這是因為JDK的版本而產(chǎn)生的問題,我裝的是OpenJDK,會出現(xiàn)JAR包的缺失,導(dǎo)致啟動報錯,所以這里需要更換為Oracle官方給出的JDK

1、去Oracle官方下載一個這樣的包:jdk-7u79-linux-x64.tar.gz
2、解壓之后,移動到/usr/local/java目錄下
3、添加環(huán)境變量:vim   /etc/profile,文件最后添加下面幾行

復(fù)制代碼 代碼如下:

export JAVA_HOME=/usr/local/java/jdk1.7.0_79   //實際的JDK路徑
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

4、完成上述安裝之后,再啟動Tomcat,發(fā)現(xiàn)還會報錯:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

這個問題是因為Tomcat沒有識別出JDK的環(huán)境變量

5、修改Tomcat中bin目錄的catalina.sh文件,在文件的開頭,加入下面代碼:

復(fù)制代碼 代碼如下:

export JAVA_HOME=/usr/local/java/jdk1.7.0_79  ////實際的JDK路徑
export JRE_HOME=/usr/local/java/jdk1.7.0_79/jre

最后啟動Tomcat,日志打印正常,瀏覽器也能夠訪問,問題解決

Exception in thread "main" java.lang.InternalError
        at sun.security.ec.SunEC.initialize(Native Method)
        at sun.security.ec.SunEC.access$000(SunEC.java:49)
        at sun.security.ec.SunEC$1.run(SunEC.java:61)

相關(guān)文章

  • SpringBoot整合Shiro框架,實現(xiàn)用戶權(quán)限管理

    SpringBoot整合Shiro框架,實現(xiàn)用戶權(quán)限管理

    Apache Shiro是一個強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗證、授權(quán)、密碼和會話管理。作為一款安全框架Shiro的設(shè)計相當(dāng)巧妙。Shiro的應(yīng)用不依賴任何容器,它不僅可以在JavaEE下使用,還可以應(yīng)用在JavaSE環(huán)境中。
    2021-06-06
  • SpringBoot詳細(xì)列舉常用注解的說明

    SpringBoot詳細(xì)列舉常用注解的說明

    在開發(fā)SpringBoot程序的過程中,有可能與其他業(yè)務(wù)系統(tǒng)進(jìn)行對接開發(fā),獲取封裝公共的API接口等等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot常見的注解的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Spring Boot 2和Redis例子實現(xiàn)過程解析

    Spring Boot 2和Redis例子實現(xiàn)過程解析

    這篇文章主要介紹了Spring Boot2發(fā)布與調(diào)用REST服務(wù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java初始化List方法代碼實例

    Java初始化List方法代碼實例

    這篇文章主要介紹了Java初始化List方法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • Sharding JDBC讀寫分離實現(xiàn)原理及實例

    Sharding JDBC讀寫分離實現(xiàn)原理及實例

    這篇文章主要介紹了Sharding JDBC讀寫分離實現(xiàn)原理及實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • SpringBoot 如何使用RestTemplate發(fā)送Post請求

    SpringBoot 如何使用RestTemplate發(fā)送Post請求

    這篇文章主要介紹了SpringBoot 如何使用RestTemplate發(fā)送Post請求的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring中Bean創(chuàng)建完后打印語句的兩種方法

    Spring中Bean創(chuàng)建完后打印語句的兩種方法

    這篇文章主要介紹了Spring中Bean創(chuàng)建完后打印語句的兩種方法,一個是實現(xiàn)InitializingBean接口,另一個使用@Bean注解和initMethod屬性,通過代碼示例介紹的非常詳細(xì),感興趣的小伙伴可以參考閱讀
    2023-07-07
  • jsp頁面中獲取servlet請求中的參數(shù)的辦法詳解

    jsp頁面中獲取servlet請求中的參數(shù)的辦法詳解

    在JAVA WEB應(yīng)用中,如何獲取servlet請求中的參數(shù),本文講解了jsp頁面中獲取servlet請求中的參數(shù)的辦法
    2018-03-03
  • 10個實現(xiàn)Java集合,Map類型自由轉(zhuǎn)換的實用工具方法

    10個實現(xiàn)Java集合,Map類型自由轉(zhuǎn)換的實用工具方法

    這篇文章主要為大家整理了整理了10個實用工具方法,可以滿足?Collection、List、Set、Map?之間各種類型轉(zhuǎn)化,文中的示例代碼講解詳細(xì),需要的可以參考下
    2023-09-09
  • Centos中yum方式安裝java的實現(xiàn)示例

    Centos中yum方式安裝java的實現(xiàn)示例

    這篇文章主要介紹了Centos中yum方式安裝java的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論