繁体   English   中英

找不到符号错误消息

[英]cannot find symbol error message

编写程序时,尝试从另一个类调用方法setTextArea()时收到“找不到符号消息”。 编译程序后,我得到以下错误消息:无法编译的源代码-错误的符号类型:gui.setTextArea

这是我的代码:

public class LinkExtractor {

    public static void main(String[] args) throws IOException {
        //Validate.isTrue(args.length == 1, "usage: supply url to fetch");
        String base = "http://uk.ask.com/web?q=";
        String keyword ="flowers";
        String tale="&search=&qsrc=0&o=312&l=dir";
        String url =base+keyword+tale;

        print("Fetching %s...", url);

        Document doc = Jsoup.connect(url).get();
        Elements links = doc.select("a[href]");

        print("\nLinks: (%d)", links.size());
        for (Element link : links) {
            print(" * a: <%s>  (%s)", link.attr("abs:href"), trim(link.text(), 35));
      AssistantGUI gui=new AssistantGUI();

        }
    }

    public static void print(String msg, Object... args) {
      ***//here is the problem line***
        gui.setTextArea(String.format(msg, args));

    }

    private static String trim(String s, int width) {
        if (s.length() > width)
            return s.substring(0, width-1) + ".";
        else
            return s;
    }
}

这是我的第二堂课:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class AssistantGUI {
JFrame frame= new JFrame("TextArea frame");
JPanel panel=new JPanel();
JTextArea text= new JTextArea("",5,20);


public AssistantGUI(){

frame.add(panel);
panel.add(text);
frame.setSize(250,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}
public void setTextArea(String myString){
text.append(myString);
}
public static void main(String[] args){
AssistantGUI gui= new AssistantGUI();

gui.setTextArea("Hello");
}

}

我读过许多有类似问题的帖子,但找不到解决方案。 对我来说一切都很好。 我正在创建AssistantGUI的实例,然后使用它来调用方法setTextArea(),为什么它无法识别它? 有任何想法吗? 非常感谢您的帮助。

现在,@ RameshK有正确答案。 以面向对象的样式:做这样的事情(使事情变为非静态):

AssistantGUI gui = new AssistantGUI();

public static void main(String[] args) throws IOException {
    new LinkExctractor().execute();
}

private void execute() {
    //Validate.isTrue(args.length == 1, "usage: supply url to fetch");
    String base = "http://uk.ask.com/web?q=";
    String keyword ="flowers";
    String tail = "&search=&qsrc=0&o=312&l=dir";
    String url = base + keyword + tail;

    print("Fetching %s...", url);

    Document doc = Jsoup.connect(url).get();
    Elements links = doc.select("a[href]");

    print("\nLinks: (%d)", links.size());
    for (Element link : links) {
        print(" * a: <%s>  (%s)", link.attr("abs:href"), trim(link.text(), 35));
    }
}

private void print...

您尚未声明gui ,因此自然无法找到它。 在其他方法中声明局部变量不计算在内。

在第一堂课中,您将在main方法中实例化gui局部变量。 退出main方法后,该引用将丢失,并且方法print找不到它。 一种快速的解决方案是使该gui成为您类的静态成员(但这不是正确的方法)。

考虑阅读本教程,但更重要的是,尝试摆脱所有static (除了必须保持静态的main方法除外),而改用new ,使用实例。

您正在main方法中的第一个类中创建gui对象,它将用作局部变量。

每当您从打印方法调用setTextArea时,那里都不允许引用。

所以为您的头等舱尝试这些改动

public class LinkExtractor {
    public static AssistantGUI gui=new AssistantGUI(); // create the object
    public static void main(String[] args) throws IOException {
        //Validate.isTrue(args.length == 1, "usage: supply url to fetch");
        String base = "http://uk.ask.com/web?q=";
        String keyword ="flowers";
        String tale="&search=&qsrc=0&o=312&l=dir";
        String url =base+keyword+tale;

        print("Fetching %s...", url);

        Document doc = Jsoup.connect(url).get();
        Elements links = doc.select("a[href]");

        print("\nLinks: (%d)", links.size());
        for (Element link : links) {
            print(" * a: <%s>  (%s)", link.attr("abs:href"), trim(link.text(), 35));


        }
    }

    public static void print(String msg, Object... args) {
      ***//here is the problem line***
        gui.setTextArea(String.format(msg, args));

    }

    private static String trim(String s, int width) {
        if (s.length() > width)
            return s.substring(0, width-1) + ".";
        else
            return s;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM