java - 每次在java中调用方法时以单个字符串形式检索结果

标签 java swing

我想在每次调用函数时在单个字符串中检索该方法的结果。我有一个每次返回不同结果的方法。我想将所有结果作为一个字符串。

尝试使用java的append()方法,但每次调用该函数时结果都会被替换。但我还需要检索以前的结果。

我的代码如下。

public void createPanel2()
    {
        panel2 = new JPanel();
        panel2.setLayout( new FlowLayout() );
        query = new JLabel("query");
        textbox =new JTextField(10);

        submit = new JButton("submit");
        panel2.add(query);
        panel2.add(textbox);
        panel2.add(submit);

        submit.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e){
                String str =textbox.getText();
                String serverUrl = "http://localhost:8983/solr/collection1";
                SolrServer solr = new HttpSolrServer(serverUrl);
                try {
                    for (SolrDocument next : simpleSolrQuery(solr, str +
                            "")) {
                        prettyPrint(System.out, next);
                    }
                } catch (SolrServerException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                initFilterAndButton();
            }
            SolrDocumentList simpleSolrQuery(SolrServer solr,
                    String query) throws SolrServerException {
                SolrQuery solrQuery = new SolrQuery(query);
                //SolrQuery query = new SolrQuery(searchTerm);
                //query.setStart((pageNum - 1) * numItemsPerPage);
                //query.setRows(numItemsPerPage);

                //solrQuery.setRows(Integer.MAX_VALUE);
                QueryResponse resp = solr.query(solrQuery);


                //System.out.println("resp"+resp);
                final SolrDocumentList hits = resp.getResults();
                /*for (SolrDocument d : hits) {
                    for (Iterator<Map.Entry<String, Object>> i = d.iterator(); i
                            .hasNext();) {
                        Map.Entry<String, Object> e2 = i.next();
                        System.out.println(e2.getKey() + "\t" + e2.getValue());
                    }

                    System.out.println("------------------------");
                }*/

                System.out.println("hits"+resp.getElapsedTime());
                System.out.println("size"+hits.size());
                System.out.println("num found"+hits.getNumFound());
                //String str ="hello";
                //createPanel1(hits);
                return hits;



            }

            void prettyPrint(PrintStream out, SolrDocument doc) {
                List<String> sortedFieldNames =
                        new ArrayList<String>(doc.getFieldNames());
                Collections.sort(sortedFieldNames);
                out.println();
            //  StringBuilder contentstring=new StringBuilder();
            //  ArrayList<String> contents=new ArrayList<>();
                for (String field : sortedFieldNames) {
                    if(field.equals("content")){
                    textarea.append(String.format("%s: %s",
                            field,doc.getFieldValue(field)+"\n"));
                    out.println(String.format("\t%s: %s",
                            field, doc.getFieldValue(field)));
                    contentsmethod(doc.getFieldValue(field).toString());
                //  contents.add(doc.getFieldValue(field).toString());
                //  System.out.println("conetnts"+contentstring);
                    }

                }
            //  String test=contentstring.toString();


                out.println();
            }
            public void contentsmethod(String fieldsvalues) {
                // TODO Auto-generated method stub
                StringBuilder contentstring=new StringBuilder();
                contentstring.append(fieldsvalues);
                 try {
                        Desktop.getDesktop().browse(new URL(serverQuery+URLEncoder.encode(contentstring.toString())).toURI());
                    } catch (MalformedURLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (URISyntaxException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

            }
        });




    }

上面的代码每次都会调用 PrettyPrint 方法,并且该方法的结果应该检索到单个字符串,该字符串也应该保存以前调用的结果。

这里我想检索 contentstring.append(fieldsvalues); 的结果; 但 contentstring 仅返回当前结果,而不附加以前的结果。

这很明显,因为每次都会调用该方法。是否有任何解决办法可以检索以前的结果以及当前的结果。

最佳答案

您需要将此StringBuilder contentstring=new StringBuilder();移到您的方法之外。每次进行方法调用时,都会创建一个新的字符串。这就是为什么您只能获得当前值的原因。

关于java - 每次在java中调用方法时以单个字符串形式检索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29912553/

相关文章:

java - 在 java.time 中从 `DateTimeFormatter.ofLocalized…` 生成的本地化字符串中强制使用 4 位数年份

java - gradle 运行执行;已编译的 JAR 因 ClassNotFoundException 而崩溃

java - 为什么在 jpanel.paintComponent() 中调用 setText() 方法时 JLabel 不刷新?

java - 如何将 JLabel 转换为字符串,反之亦然?

Java Swing - 使用定时器刷新 jTable

java - JLabel 数组中的空指针异常

java - 句柄操作符的动态程序

java - SableCC 期待 : EOF

java - 在 JPanel 中单击并拖动 Path2D 线

Java Nimbus Look and Feel per component customization ("Nimbus.Overrides") - 其他实例也受影响