2015-05-04 127 views
2

對不起,我已經通過在主類中使用方法創建類來嘗試這種方法,但它在jsp頁面中顯示此錯誤;查看JSP頁面中的Java類

java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Sigar.getCpuInfoList()[Lorg/hyperic/sigar/CpuInfo;

我不知道,如果從代碼或SIGAR API庫再次抱歉,但我需要幫助得到這個JSP右

package mydata; 
 

 
import org.hyperic.sigar.CpuInfo; 
 
import org.hyperic.sigar.Sigar; 
 
import org.hyperic.sigar.SigarException; 
 

 
public class MyCpu { 
 
private String cpuInfoList; 
 

 
public String getCpuInfoList() { 
 
\t return this.cpuInfoList; 
 
} 
 

 
public MyCpu() { 
 
\t Sigar sigar = new Sigar(); 
 
\t String output = " "; 
 
\t CpuInfo[] cpuInfoList = null; 
 
\t try { 
 

 
\t \t cpuInfoList = sigar.getCpuInfoList(); 
 
\t } catch (SigarException e) { 
 
\t \t e.printStackTrace(); 
 
\t \t return; 
 
\t } 
 
\t for (CpuInfo info : cpuInfoList) { 
 
\t \t output += "Vendor: " + info.getVendor() + ""; 
 
\t } 
 
\t System.out.println(output); 
 
} 
 

 
public static void main(String[] args) { 
 
\t MyCpu main = new MyCpu(); 
 
} 
 
} 
 

 
-------------------------------------------------------------------------------------- 
 
    <!---JSP---> 
 
    
 
    <%@page import ="org.hyperic.sigar.Sigar"%> 
 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
 

 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
 
    "http://www.w3.org/TR/html4/loose.dtd"> 
 

 
<html> 
 
    <head> 
 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 
     <title>JSP Page</title> 
 
    </head> 
 
    <body> 
 
     <h1>Hello World!</h1> 
 
     <%@page import="mydata.*"%> 
 
     <% 
 
    MyCpu cpu = new MyCpu(); 
 
    Sigar sigar = new Sigar(); 
 
    out.println(sigar.getCpuInfoList()); 
 
%> 
 
    </body> 
 
</html>

+0

這看起來像'getCpuInfoList()'方法中的錯誤。你能發佈完整的堆棧跟蹤嗎?我懷疑類路徑上缺少一個庫,因此這個異常應該在'MyCpu cpu = new MyCpu()'這一行中拋出:' – Thomas

+0

這就是所有的代碼,我已經下載了Sigar庫並添加到JRE文件夾中,現在我可以運行它作爲Java應用程序確定,但我不能從JSP運行。謝謝Thomas – Sadigain

+0

輸出應該是= Vendor +「CPU供應商名稱」 – Sadigain

回答

0

您可以調用Java代碼在使用scriplet的JSP中,但在jsp中使用scriplet而不是使用JSTL是不好的做法。讓我們繼續前進創建一個類如下面提到

public class Demo { 
    public String output = ""; 

    public Demo() { 
     CpuInfo[] cpuInfoList = null; 
     try { 
      cpuInfoList = new Sigar().getCpuInfoList(); 
     } catch (SigarException e) { 
      e.printStackTrace(); 
     } 
     for (CpuInfo info : cpuInfoList) { 
      output += info.getVendor() + "\n"; 
     } 
     System.out.println(output); 
    } 

    public static void main(String[] args) { 
     new Demo(); 
    } 
} 

更改你的JSP代碼如下

<%@page import="com.Demo"%> 

<!DOCTYPE HTML"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <% 
      out.println(new Demo().output); 
     %> 
    </body> 
</html> 

並添加此Web應用程序中的MANIFEST.MF類路徑的-Djava.library.path="./lib"所以最後MENIFEST.MF樣子:

Manifest-Version: 1.0 
Class-Path: -Djava.library.path="./lib" 

而且當然在位於WEB_INF的lib文件夾中添加sigar.jar

編輯:

你應該看到某種提示以下錯誤:在您的服務器日誌:

Info: 5 [http-listener-1(5)] DEBUG Sigar - no sigar-amd64-winnt.dll in java.library.path 
org.hyperic.sigar.SigarException: no sigar-amd64-winnt.dll in java.library.path 

所以,你必須在lib文件夾中提供sigar-amd64-winnt.dll爲好。

Lib

而現在你會看到輸出如下

output

+0

謝謝你Naman的幫助我會盡力並回復你 – Sadigain

+0

查看答案中的更新。 – Naman

+0

它工作的同伴,但也忽略了主類,這個數據,你可以看到沒有從類中調用,它從類庫中導入,如果我是正確的。 – Sadigain