从另一个类调用方法时,无法运行部分方法

时间:2012-12-30 16:57:02

标签: java netbeans

我实现了在jTextPane中突出显示单词的方法。如果我从主类调用该方法,一切正常,但如果我从另一个类调用该方法,而循环不起作用。这是我的代码:

// Main class with my method, I named it Frame

public void traziJedan(String rijec){
        try{
        Highlighter h = jTextPane1.getHighlighter();
        h.removeAllHighlights();
        String text = jTextPane1.getText();
        String pattern = rijec;
        int pos = 0;

        while ((pos = text.indexOf(pattern, pos)) >= 0) {
                System.out.println(rijec);
                h.addHighlight(pos, pos + pattern.length(), DefaultHighlighter.DefaultPainter);
                pos += pattern.length();

            }

        }
        catch(BadLocationException e){}
    }

// method in another class

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        Frame f = new Frame();
        f.traziJedan(jTextField1.getText());
    }

的System.out.println(rijec);我把它放在这里只是为了看看这个方法是否正常工作,但是这个单词不会只在while循环中打印出来,如果我把这个命令放在其他地方我得到正确的输出。这有什么问题。

2 个答案:

答案 0 :(得分:0)

您应该从UI线程更新jTextPane1或任何UI组件,您可以使用invokeLater或invokeAndWait

e.g。

SwingUtilities.invokeLater(new Runnable() {
  public void run() {
    // update UI
  }
});

答案 1 :(得分:0)

我猜您在jTextPane1方法中分配新的框架Frame f = new Frame();时未正确初始化jButton1ActionPerformed

当您使用其他类中的方法时,请不要分配新的Frame,而是传入现有的Frame实例。