在编写我的程序时,当我尝试从另一个类调用方法setTextArea()时,我得到了“找不到符号消息”。编译程序后,我收到以下错误消息: 无法编译的源代码 - 错误的sym类型: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(),为什么它不识别它?有任何想法吗?我将非常感谢你的帮助。
答案 0 :(得分:1)
@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...
答案 1 :(得分:0)
您尚未声明gui
,因此自然无法找到它。用不同的方法声明局部变量不算数。
答案 2 :(得分:0)
在第一堂课中,您在main方法中实例化gui
局部变量。退出main方法后,该引用将丢失,并且方法print无法找到它。一个快速的解决方案是让gui
成为你班级的静态成员(但这不是正确的方法)。
考虑阅读这个tutorial,但更重要的是,尝试去除所有static
(除了主要方法必须保持静态)并使用new
代替,使用实例。
答案 3 :(得分:0)
您正在main方法内的第一个类中创建gui对象,它将充当局部变量。
无论何时从print方法调用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;
}
}