本文目錄一覽:
- 1、java中文件上傳報如下錯誤,是什麼原因?
- 2、eclipse導入的例子java文件出現錯誤,打開projiect.properties出現錯誤
- 3、java讀取文件,報找不到文件錯誤,我寫的路徑跟報錯的路徑不一樣,怎麼回事?
- 4、java中import*導入包報錯;
- 5、關於Java的報錯
java中文件上傳報如下錯誤,是什麼原因?
然後在百度和谷歌上各種搜索,大多數認為是超時而斷開連接。對於解決辦法一般給的不夠全面,現綜合給出如下:
(1)首先,上傳頁面上面的 form 標籤要設enctype=”multipart/form-data” 參數
(2)修改tomcat配置文件server.xml,找到類似於下面配置:
Connector port=”8086″ maxHttpHeaderSize=”8192″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” /
將上面的參數disableUploadTimeout值改為false即可。
(3)上邊(1)是我的程序中已經設置的,修改了(2)所述的配置後依然不能運行,後來又修改了tomcat配置文件server.xml中的另外一處:
Connector executor=”tomcatThreadPool”
port=”8080″ protocol=”HTTP/1.1″
connectionTimeout=”20000″
redirectPort=”8443″ / 也在裡邊加入了disableUploadTimeout=”false”一句。
用了以上方法仍然不能解決,後來想到可能是伺服器外加了防火牆或者限制了上傳文件的大小之類的,聯繫網路中心進行相關設置進行設置即可
eclipse導入的例子java文件出現錯誤,打開projiect.properties出現錯誤
打開project.properties出現錯誤是因為文件編碼問題導致。
依次選擇:
菜單——Preferences——General——ContentTypes——Text——Java Properties File,設置Default encoding,把下面的ISO-8859-1改為UTF-8或者GBK(推薦UTF-8),然後update,如下圖所示。
java讀取文件,報找不到文件錯誤,我寫的路徑跟報錯的路徑不一樣,怎麼回事?
就是路徑的問題,不一樣是因為編譯時處理成虛擬機認識的。文件根本沒讀取成功,要麼沒這文件要麼路徑寫的有問題。
java中import*導入包報錯;
註:java文件編譯後產生class文件,如果刪除T.java 而沒有刪除T.class文件,則可以通過import
你第一次編譯所有文件時沒有通過的原因可能是:先編譯了Text.java,這時沒有T.class文件所以報錯。
第二次編譯通過原因:T.class文件存在所以能編譯import
關於Java的報錯
UnsatisfiedLinkError
在把本機調用鏈接到對應的本機定義時,類裝入器扮演著重要角色。如果程序試圖裝入一個不存在或者放錯的本機庫時,在鏈接階段的解析過程會發生 UnsatisfiedLinkError。JVM 規範指定 UnsatisfiedLinkError 是:
對於聲明為 native 的方法,如果 Java 虛擬機找不到和它對應的本機語言定義,就會拋出該異常。
當調用本機方法時,類裝入器會嘗試裝入定義了該方法的本機庫。如果找不到這個庫,就會拋出這個錯誤。
清單 6 演示了拋出 UnsatisfiedLinkError 的測試用例 :
清單 6. UnsatisfiedLinkError.java
public class UnsatisfiedLinkErrorTest {
public native void call_A_Native_Method();
static {
System.loadLibrary(“myNativeLibrary”);
}
public static void main(String[] args) {
new UnsatisfiedLinkErrorTest().call_A_Native_Method();
}
}
這段代碼調用本機方法 call_A_Native_Method(),該方法是在本機庫 myNativeLibrary 中定義的。因為這個庫不存在,所以在程序運行時會發生以下錯誤:
The java class could not be loaded. java.lang.UnsatisfiedLinkError:
Cant find library myNativeLibrary (myNativeLibrary.dll)
in sun.boot.library.path or java.library.path
sun.boot.library.path=D:/sdk/jre/bin
java.library.path= D:/sdk/jre/bin
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2147)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:2006)
at java.lang.Runtime.loadLibrary0(Runtime.java:824)
at java.lang.System.loadLibrary(System.java:908)
at UnsatisfiedLinkErrorTest.clinit(UnsatisfiedLinkErrorTest.java:6)
本機庫的裝入由調用 System.loadLibrary() 方法的類的類裝入器啟動 —— 在清單 6 中,就是 UnsatisfiedLinkErrorTest 的類裝入器。根據使用的類裝入器,會搜索不同的位置:
對於由 bootstrap 類裝入器裝入的類,搜索 sun.boot.library.path。
對於由擴展類裝入器裝入的類,先搜索 java.ext.dirs,然後是 sun.boot.library.path,然後是 java.library.path。
對於由系統類裝入器裝入的類,搜索 sun.boot.library.path,然後是 java.library.path。
在清單 6 中,UnsatisfiedLinkErrorTest 類是由系統類裝入器裝入的。要裝入所引用的本機庫,這個類裝入器先查找 sun.boot.library.path,然後查找 java.library.path。因為在兩個位置中都沒有需要的庫,所以類裝入器拋出 UnsatisfiedLinkageError。
==========================================================================
java.lang.UnsatisfiedLinkError 出現這種錯誤的原因是一般是java虛擬機找不到聲明為native方法的本地語言定義時,出現的錯誤。在我的理解過程中我一般都認為是由於導入dll或 者導入lib文件不正確導致的。有些需要靜態導入就沒有問題(即在前面加static來導入lib文件),如果是不加static導入也就是動態導入的時 候,那麼需要添加catch的拋出異常來解決,如
try{
System.loadLibrary(“vtkCommonJava”);
System.loadLibrary(“vtkFilteringJava”);
System.loadLibrary(“vtkIOJava”);
System.loadLibrary(“vtkImagingJava”);
System.loadLibrary(“vtkGraphicsJava”);
System.loadLibrary(“vtkRenderingJava”);
}catch(Throwable e)
{
System.out.println(“The load problem”);
}
這種方式來判斷,或者直接在類前面添加
static{
System.loadLibrary(“vtkCommonJava”);
System.loadLibrary(“vtkFilteringJava”);
System.loadLibrary(“vtkIOJava”);
System.loadLibrary(“vtkImagingJava”);
System.loadLibrary(“vtkGraphicsJava”);
System.loadLibrary(“vtkRenderingJava”);
}
================================================================================
關於java.lang.UnsatisfiedLinkError(JNI)
目標:把pbp1.0的java包和native移到GEM中,並使GEM在新的虛擬機上正常運行
背景:GEM(1)有一堆java包和native函數,pbp1.0是虛擬機和JAVA基本包,要將pbp1.0的虛擬機移走只用它的JAVA基本包和native函數。
問題:在將GEM和pbp1.0的native函數生成一個動態庫後在程序里System.loadLibrary()無法載入,報java.lang.UnsatisfiedLinkError
解決過程:
1,理論
我們知道,JAVA調用native函數時,必須通過System.loadLibrary()或System.load將其native函數所在動態庫 載入到虛擬機。並在運行時指明-Djava.library.path或-Dsun.boot.library.path,將其指向包含有native函 數的動態庫所在位置。
2,實施
我按這個步驟操作完成後就是無法載入我生成的動態庫libgem.so,這個庫用到的其他動態庫包括:rt,pthread,freetype,dl, directfb,而directfb用到的動態庫有rt,dl,pthread,freetype,jpeg,png,這些庫除了directfb要生 成外其餘都在/lib目錄下存在。
3,思路
先寫了一個Hello的測試用例。發現在native里所使用到其他動態庫時,無論是否存在於相關目錄,仍然無法載入。然後經過修改編譯選項,把所使用到的動態庫連動態連接進目標庫,如下:
$(GCC) -fPIC -shared -o libdirectfb.so … -lpng -ljpeg -lpthread -lrt -ldl, -lfreetype
經過這麼一個修改後,directfb可以載入。
這也說明System.loadLibrary()所載入的動態庫所引用的所有符號都要能找到。如果有一個無法找到將無法載入。可以寫一個空的main ()函數,對你的動態庫進行連接,如果動態庫里所引用的符號在指定的動態庫和本身找到不到則無法編譯通過,那麼這個動態庫也肯定載入不了。
4,問題解決
按照這個思路,對libgem.so的編譯Makefile做相應修改後,問題解決!並在LD_LIBRARY_PATH加入動態庫所在目錄。
(1) MHP (Multimedia Home Platform) was developed by the DVB Project as the world’s first open standard for interactive television. It is a Java-based environment which defines a generic interface between interactive digital applications and the terminals on which those applications execute. MHP was designed to run on DVB platforms but there was a demand to extend the interoperability it offers to other digital television platforms. This demand gave rise to GEM, or Globally Executable MHP, a framework which allows other organisations to define specifications based on MHP.
====================================================================================
另外,還可能是dll本身的問題,使用release版的,而不要用debug版的
=============================================================================
關於編寫JNI時的發生的unsatisfiedlinkError錯誤- –
這個錯誤也讓我鬱悶了半天,現在我把它寫出來,可以讓大家少走點彎路。一般這個錯誤有兩種:
1。unsatisfiedlinkError:dll名,那說明你沒有把dll放到合適的位置,一般就和要調用原生函數的類放在一起,當然前提是你成功的生成dll了
2。unsatisfiedlinkError:方法名,這個時 候你其實dll已經成功生成了,而且位置也正確,它的意思就是你沒有定義那個函數,你可能會說,我明明定義了,其實當你發現問題所在,你只能自虐了,肯定 是你在C文件中定義函數時有些字母大小寫錯了,因為其他地方是自動生成的,不會出錯。尤其是直接從網上拷貝源程序時經常發生這種問題,有些作者不負責任, 把有錯誤的程序也貼上去。
轉自:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/151102.html