我正在使用GWT + twitter4j创建简单的Twitter应用程序。但我不能运行它或编译它。
这里有代码,请告诉我它有什么问题。
package in.isuru.twitter.server;
import java.util.ArrayList;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Tweet;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
public class Twit extends RemoteServiceServlet{
ArrayList<Tweet> tweets = new ArrayList<Tweet>();
//ArrayList<String> status = new ArrayList<String>();
public ArrayList<Tweet> search(String searchTerm){
// The factory instance is re-useable and thread safe.
Twitter twitter = new TwitterFactory().getInstance();
Query query = new Query(searchTerm);
QueryResult result = null;
try {
result = twitter.search(query);
} catch (TwitterException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (Tweet tweet : result.getTweets()) {
//System.out.println(tweet.getFromUser() + ":" + tweet.getText());
tweets.add(tweet);
}
return tweets;
}
}
客户端,
package in.isuru.twitter.client;
import java.util.ArrayList;
import twitter4j.Tweet;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.RootPanel;
import in.isuru.twitter.server.*;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class Twitter implements EntryPoint {
Twit twit = new Twit();
ArrayList<Tweet> allStatus;
public void onModuleLoad() {
// Create a Flex Table
final FlexTable flexTable = new FlexTable();
FlexCellFormatter cellFormatter = flexTable.getFlexCellFormatter();
flexTable.addStyleName("cw-FlexTable");
flexTable.setWidth("32em");
flexTable.setCellSpacing(5);
flexTable.setCellPadding(3);
// Add some text
cellFormatter.setHorizontalAlignment(0, 1, HasHorizontalAlignment.ALIGN_LEFT);
cellFormatter.setColSpan(0, 0, 2);
//search in twitter
allStatus = twit.search("sex");
for (int i=0 ; i <allStatus.size() ; i++) {
//System.out.println(tweet.getFromUser() + ":" + tweet.getText());
Tweet tweet = allStatus.get(i);
String user = tweet.getFromUser();
String status = tweet.getText();
addRow(flexTable, user);
addRow(flexTable, status);
}
// Add two rows to start
// addRow(flexTable, "This is testing status update");
// addRow(flexTable, "This is testing status update");
// Return the panel
flexTable.ensureDebugId("cwFlexTable");
RootPanel.get().add(flexTable);
}
/**
* Add a row to the flex table.
*/
private void addRow(FlexTable flexTable, String status) {
int numRows = flexTable.getRowCount();
flexTable.setText(numRows, 0, status);
flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows + 1);
}
/**
* Remove a row from the flex table.
*/
private void removeRow(FlexTable flexTable) {
int numRows = flexTable.getRowCount();
if (numRows > 1) {
flexTable.removeRow(numRows - 1);
flexTable.getFlexCellFormatter().setRowSpan(0, 1, numRows - 1);
}
}
}
这是我编译时得到的错误代码。
编译模块in.isuru.twitter.Twitter 验证新编译的单元 第一次通过时忽略了1个带编译错误的单元。 使用-strict或-logLevel进行编译设置为TRACE或DEBUG以查看所有错误。 查找入口点类 [错误]'文件中的错误:/ E:/workspace/Twitter/src/in/isuru/twitter/client/Twitter.java' [错误]第20行:没有源代码可用于输入in.isuru.twitter.server.Twit;你忘了继承一个必需的模块吗? [错误]第21行:没有源代码可用于类型twitter4j.Tweet;你忘了继承一个必需的模块吗? [错误]无法找到类型'in.isuru.twitter.client.Twitter' [错误]提示:以前的编译器错误可能导致此类型不可用 [错误]提示:检查模块中的继承链;它可能没有继承所需的模块,或者模块可能没有正确添加其源路径条目
提前致谢!
答案 0 :(得分:0)
[错误]第20行:没有源代码可用于输入in.isuru.twitter.server.Twit;
这是你的问题 - 从包中,你已经声明Twit是一个服务器对象,因此GWT编译器没有使它可以在客户端上编译。
看起来您正在尝试直接调用服务器类Twit而不是异步调用它 - 再看一下RPC文档来创建远程服务,以及如何对它进行异步调用。 http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html
答案 1 :(得分:0)
你不能在GWT中使用任何java库。 GWT不是java,并且必须以特殊方式创建和配置库,这就是您收到此错误的原因。
我建议您阅读official documentation