簡體   English   中英

嘗試使用JSP搜索相似圖像時出錯

[英]Error when trying to search similar images using JSP

我正在使用JSP,Java和PostgreSQL構建一個用於提取特征並比較圖像特征的Web應用程序。

我的特征提取是從圖像中提取一些特征,以便隨后可以對其進行比較(一些特征與顏色有關,一些特征與圖像的直方圖有關,因此。我有一些特殊的方法可以使用特定的庫提取這些特征(我添加到jar中在下面的示例中可以看到!

這些功能隨后被成功添加到我的PostgreSQL數據庫中。

public void GetImageProperties(String targetPath, ImageProperties imagesProperties) throws Exception
{
    // load image
    FileInputStream imageStream;
    imageStream = new FileInputStream(targetPath);
    BufferedImage bimg = ImageIO.read(imageStream);        

    // get properties
    imagesProperties.cl = new ColorLayoutImpl(bimg);
    imagesProperties.eh = new EdgeHistogramImplementation(bimg);
    imagesProperties.sc = new ScalableColorImpl(bimg);
}

然后我將它們添加到PostgreSQL數據庫中(僅功能,而不是圖像)

String query = "CREATE TABLE Images (" +
               "  imageid SERIAL PRIMARY KEY," +
               "  fname VARCHAR(128)," +
               "  colorlayout VARCHAR(512), " +
               "  edgehist VARCHAR(512), " +
               "  scalablecolor VARCHAR(512) " +
               ")";

每次加載圖像並將其與目錄中的所有其他圖像進行比較時,都會出現此錯誤。

HTTP Status 500 -     
type Exception report

信息:

description The server encountered an internal error () that prevented it from fulfilling this request.

例外:

org.apache.jasper.JasperException: An exception occurred processing JSP page /query.jsp at line 124

121:  if (bSearch) { 
122:    // get form params 
123:    query.setTopK(new Integer(request.getParameter("frm_topk"))); 
124:    query.setColorHistogramWeight(new Integer(request.getParameter("frm_weight_c1"))); 
125:    query.setColorDistributionWeight(new Integer(request.getParameter("frm_weight_c2"))); 
126:    query.setTextureWeight(new Integer(request.getParameter("frm_weight_c3"))); 
127:  }

堆棧跟蹤:

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)    
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)   
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)    
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

根本原因:

java.lang.NumberFormatException: For input string: "1.0"
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)   
java.lang.Integer.parseInt(Integer.java:492)    java.lang.Integer.<init>
(Integer.java:677)  org.apache.jsp.query_jsp._jspService(query_jsp.java:256)    
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)  
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)    
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)     
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)    
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)   
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)    
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.27 logs.

你的問題在這里

query.setTopK(new Integer(request.getParameter("frm_topk")));

應該

String parFrm_topk = request.getParameter("frm_topk");
Integer frm_topk = null;
if (parFrm_topk != null && parFrm_topk.length() > 0 && !parFrm_topk.equals("null"))
try {
  frm_topk = Integer.valueOf(parFrm_topk);
} catch (NumberFormatException nfe){
  throw nfe;
}
if (frm_topk ! = null) {
   query.setTopK(frm_topk);

此代碼試圖檢查可能為空的參數,為什么為空取決於應用程序的流量以及如何通過url傳遞參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM