⑴ java問題
應該是含有oracle.apps.fnd.formsClient.FormsLauncher.class的jar沒有引用,你看看這或基個類在哪個清雀包里答團早然後引用一下.
⑵ JAVA報錯問題 來大神解決一下
驅動名寫錯了,應該是com.microsoft.sqlserver.jdbc.SQLServerDriver
⑶ 如何解決java.lang.NoClassDefFoundError
NoClassDefFoundError錯誤發生的原因
NoClassDefFoundError錯誤的發生,是因為Java虛擬機在編譯時能找到合適的類,而在運行時不能找到合適的類導致的錯誤。例如在運行時我們想調用某個類的方法或者訪問這個類的靜態成員的時候,發現這個類不可用,此時Java虛擬機就會拋出NoClassDefFoundError錯誤。與ClassNotFoundException的不同在於,這個錯誤發生只在運行時需要載入對應的類不成功,而不是編譯時發生。很多Java開發者很容易在這里把這兩個錯誤搞混。
簡單總結就是,NoClassDefFoundError發生在編譯時對應的類可用,而運行時在Java的classpath路徑中,對應的類不可用導致的錯誤。發生NoClassDefFoundError錯誤時,你能看到如下的錯誤日誌:
Exception in thread "main" java.lang.NoClassDefFoundError
錯誤的信息很明顯地指明main線程無法找到指定的類,而這個main線程可能時主線程或者其他子線程。如果是主線程發生錯誤,程序將崩潰或停止,而如果是子線程,則子線程停止,其他線程繼續運行。
NoClassDefFoundError和ClassNotFoundException區別
我們經常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError這兩個錯誤迷惑不清,盡管他們都與Java classpath有關,但是他們完全不同。NoClassDefFoundError發生在JVM在動態運行時,根據你提供的類名,在classpath中找到對應的類進行載入,但當它找不到這個類時,就發生了java.lang.NoClassDefFoundError的錯誤,而ClassNotFoundException是在編譯的時候在classpath中找不到對應的類而發生的錯誤。ClassNotFoundException比NoClassDefFoundError容易解決,是因為在編譯時我們就知道錯誤發生,並且完全是由於環境的問題導致。而如果你在J2EE的環境下工作,並且得到NoClassDefFoundError的異常,而且對應的錯誤的類是確實存在的,這說明這個類對於類載入器來說,可能是不可見的。
怎麼解決NoClassDefFoundError錯誤
根據前文手老,很明顯NoClassDefFoundError的錯誤是因為在運行時類載入器在classpath下找不到需要載入的類,所以我們需要把對應的類載入到classpath中,或者檢查為什麼類在classpath中是不可用的,這個發生可能的原因如下:
對應的Class在java的classpath中不可用
你可能用jar命令運行你的程序,但類並沒有在jar文件的manifest文件中的classpath屬性中定義
可能程序的啟動腳本覆蓋了原來的classpath環境變數
因為NoClassDefFoundError是java.lang.LinkageError的一個子類,所以可能由於程序依賴的原生的類庫不可用而導致
檢查日誌文件中是否有java.lang.ExceptionInInitializerError這樣的錯誤,NoClassDefFoundError有可能是由於靜態初始化失敗導致的
如果你工作在J2EE的環境,有多個不同的類載入器,也可能導致NoClassDefFoundError
下面我們看一些當發生NoClassDefFoundError時,我們該如何解決的樣例。
NoClassDefFoundError解決示例
當發生由於缺少jar文件,或者jar文件沒有添加到classpath,或者jar的文件名發生變更會導致java.lang.NoClassDefFoundError的錯誤。
當類不在classpath中時,這種情況很難確切的知道,但如果在程序中列印出System.getproperty(「java.classpath」),可以得到程序實爛數際運行的classpath
運行時畢歷升明確指定你認為程序能正常運行的 -classpath 參數,如果增加之後程序能正常運行,說明原來程序的classpath被其他人覆蓋了。
NoClassDefFoundError也可能由於類的靜態初始化模塊錯誤導致,當你的類執行一些靜態初始化模塊操作,如果初始化模塊拋出異常,哪些依賴這個類的其他類會拋出NoClassDefFoundError的錯誤。如果你查看程序日誌,會發現一些java.lang.ExceptionInInitializerError的錯誤日誌,ExceptionInInitializerError的錯誤會導致java.lang.NoClassDefFoundError: Could not initialize class,如下面的代碼示例:
/**
* Java program to demonstrate how failure of static initialization subsequently cause
* java.lang.NoClassDefFoundError in Java.
* @author Javin Paul
*/
public class {
public static void main(String args[]){
List<User> users = new ArrayList<User>(2);
for(int i=0; i<2; i++){
try{
users.add(new User(String.valueOf(i))); //will throw NoClassDefFoundError
}catch(Throwable t){
t.printStackTrace();
}
}
}
}
class User{
private static String USER_ID = getUserId();
public User(String id){
this.USER_ID = id;
}
private static String getUserId() {
throw new RuntimeException("UserId Not found");
}
}
Output
java.lang.ExceptionInInitializerError
at testing..main(.java:23)
Caused by: java.lang.RuntimeException: UserId Not found
at testing.User.getUserId(.java:41)
at testing.User.<clinit>(.java:35)
... 1 more
java.lang.NoClassDefFoundError: Could not initialize class testing.User
at testing..main(.java:23)
Read more: http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz3dqtbvHDy
由於NoClassDefFoundError是LinkageError的子類,而LinkageError的錯誤在依賴其他的類時會發生,所以如果你的程序依賴原生的類庫和需要的dll不存在時,有可能出現java.lang.NoClassDefFoundError。這種錯誤也可能拋出java.lang.UnsatisfiedLinkError: no dll in java.library.path Exception Java這樣的異常。解決的辦法是把依賴的類庫和dll跟你的jar包放在一起。
如果你使用Ant構建腳本來生成jar文件和manifest文件,要確保Ant腳本獲取的是正確的classpath值寫入到manifest.mf文件
Jar文件的許可權問題也可能導致NoClassDefFoundError,如果你的程序運行在像linux這樣多用戶的操作系統種,你需要把你應用相關的資源文件,如Jar文件,類庫文件,配置文件的許可權單獨分配給程序所屬用戶組,如果你使用了多個用戶不同程序共享的jar包時,很容易出現許可權問題。比如其他用戶應用所屬許可權的jar包你的程序沒有許可權訪問,會導致java.lang.NoClassDefFoundError的錯誤。
基於XML配置的程序也可能導致NoClassDefFoundError的錯誤。比如大多數Java的框架像Spring,Struts使用xml配置獲取對應的bean信息,如果你輸入了錯誤的名稱,程序可能會載入其他錯誤的類而導致NoClassDefFoundError異常。我們在使用Spring MVC框架或者Apache Struts框架,在部署War文件或者EAR文件時就經常會出現Exception in thread 「main」 java.lang.NoClassDefFoundError。
在有多個ClassLoader的J2EE的環境中,很容易出現NoClassDefFoundError的錯誤。由於J2EE沒有指明標準的類載入器,使用的類載入器依賴與不同的容器像Tomcat、WebLogic,WebSphere載入J2EE的不同組件如War包或者EJB-JAR包。關於類載入器的相關知識可以參考這篇文章類載入器的工作原理。
總結來說,類載入器基於三個機制:委託、可見性和單一性,委託機制是指將載入一個類的請求交給父類載入器,如果這個父類載入器不能夠找到或者載入這個類,那麼再載入它。可見性的原理是子類的載入器可以看見所有的父類載入器載入的類,而父類載入器看不到子類載入器載入的類。單一性原理是指僅載入一個類一次,這是由委託機制確保子類載入器不會再次載入父類載入器載入過的類。現在假設一個User類在WAR文件和EJB-JAR文件都存在,並且被WAR ClassLoader載入,而WAR ClassLoader是載入EJB-JAR ClassLoader的子ClassLoader。當EJB-JAR中代碼引用這個User類時,載入EJB-JAR所有class的Classloader找不到這個類,因為這個類已經被EJB-JAR classloader的子載入器WAR classloader載入。
這會導致的結果就是對User類出現NoClassDefFoundError異常,而如果在兩個JAR包中這個User類都存在,如果你使用equals方法比較兩個類的對象時,會出現ClassCastException的異常,因為兩個不同類載入器載入的類無法進行比較。
有時候會出現Exception in thread 「main」 java.lang.NoClassDefFoundError: com/sun/tools/javac/Main 這樣的錯誤,這個錯誤說明你的Classpath, PATH 或者 JAVA_HOME沒有安裝配置正確或者JDK的安裝不正確。這個問題的解決辦法時重新安裝你的JDK。
Java在執行linking操作的時候,也可能導致NoClassDefFoundError。例如在前面的腳本中,如果在編譯完成之後,我們刪除User的編譯文件,再運行程序,這個時候你就會直接得到NoClassDefFoundError,而錯誤的消息只列印出User類的名稱。
java.lang.NoClassDefFoundError: testing/User
at testing..main(.java:23)
現在我們知道要怎樣去面對NoClassDefFoundError異常並解決它了。
⑷ Java中的Class類與java.lang.reflect間的關系
Class類是java.lang包下的類,針對你的提問, 舉一個簡單易懂的例子來理解一下:package com.test;public class Student { //聲明私用屬性
private int id;
private String username;
private String userpwd;
private int age;
//共有屬性
public String str = "some strings"; //私用方法
private Student getStudent(){
return new Student();
}
//共有的setter和getter方法
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getUserpwd() {
return userpwd;
} public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getStr() {
return str;
} public void setStr(String str) {
this.str = str;
}
}
------------------------------------------------------------------------------------ package com.test;import java.lang.reflect.Method;public class ClassTest { public static void main(String[] args) {
//獲取class對象的方式一
Student stu = new Student();
Class class1 = stu.getClass();
/*
* 返回一個包含某些 Method 對象的數組,
* 這些對象反映此 Class 對象所表示的類或介面(
* 包括那些由該類或介面聲明的氏鉛嘩以及
* 從超類和超介面繼承的那些的類或介面)的公共 member 方法。
*/
Method[] method = class1.getMethods(); //method[]數組存放的是Method對象
int length = method.length;
for(int i=0; i<length; i++){
System.out.println(method[i].getName()); //method[i]就是一個激知Method對象
}
/*
* 你要明白class1對象的來源是Student,那麼返回的構造函數,方法,屬性等信息就和這個類有關
* 其他構造函數,屬性的殲行反射就舉例子了, 道理是一樣的.
*/
//獲取class對象的方式二
Class class2 = Student.class;
//獲取class對象的方式三
Class class3 = Integer.TYPE;
}
}
⑸ 用命令行編譯Java時遇到如下錯誤提示(該錯誤是在Class文件生成後,執行java命令時出現的)
你的java命令是怎麼寫的?
一般是:java + class文件名;例如:A.java 編譯後生成A.class文件。則命令為:java A
如果這樣都不行,可能是你所運行的class文件不在你現在所訪問的路徑下。應該在cmd環境下進入.class所在的文件目錄下,然後運行 java A
⑹ java.lang.ClassFormatError
未識別的.class文件版本,你是不是換過jdk版本或者在搭衫A機器上寫的代碼復制到b機器上?
比如你用jdk1.6編譯的程序,拿到jdk1.5上運行,就有可能出現這個問題。
javac命令的-target選項銷團可以用知斗腔來解決這個問題。
⑺ JAVA中的 Class類 的使用方法
String C = "B";
Class D = Class.forName(C).getClass();
D.newInstance();
在JAVA中,類的名字一般不是用自己的名字來命名的,「B」是我們已知的名字,但JAVA虛擬機並不知道這樣的命名,也找不到你想要的類的位置,所以正確的改法是:
String C = "no.yes.flas.B" 也就是B類所在的包名+「.」+類的名字。你再試一試看看。
⑻ java hibernate java.lang.ClassFormatError
org/hibernate/hql/ast/util/LiteralProcessor$DecimalFormnter類編譯的鍵橘結果正亮態為:org/hibernate/hql/ast/util/LiteralProcessor$DecimalFormatter 不一致,你舉源檢查一下源碼類.java和編譯後的.class的類名稱