1

JSP、Java、および PostgreSQL を使用して、特徴抽出と画像の特徴比較のための Web アプリケーションを構築しています。

私の特徴抽出は、画像からいくつかの特徴を抽出しているため、それらを比較できます(一部の機能は色に関するもので、一部は画像のヒストグラムに関するものなどです。特定のライブラリ(追加するjar)を使用してそれらを抽出する特別な方法がありますlib) 次の例でわかるように!

これらの機能は、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.
4

1 に答える 1

0

あなたの問題はここにあります

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 を介して渡される方法によって異なります。

于 2013-01-27T13:28:05.987 に答える