2012-02-02 113 views
0

我正在用GWT + twitter4j创建简单的twitter应用程序。但我无法运行或编译它。GWT无法编译项目

这里代码和请告诉我什么是错的。

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

[ERROR]第20行:没有源代码可用的类型in.isuru.twitter.server.Twit;

这就是你的问题 - 从包中你已经声明Twit是一个服务器对象,所以GWT编译器还没有使它可以在客户端上编译。

看起来您正试图直接调用服务器类Twit,而不是异步调用它 - 再次查看RPC文档以创建远程服务以及如何对其进行异步调用。 http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html

0

不能在GWT只使用任何Java库。 GWT不是java,库必须以特殊的方式创建和配置,这就是为什么你会得到这个错误。

我建议阅读official documentation

+0

好了,使用这个库的人,twitter4j与GWT。 http://ililiililililii.blog.de/2010/08/21/gwt-gae-twitter-in-20-minutes-9217888/ – Isuru 2012-02-03 00:28:57

+0

@isurumadusanka在从twiter4j所提供的教程的所有代码用于在服务器端。没有一个代码实际用于GWT应用程序客户端代码(这是不可能的,因为twitter4j是一个普通的java库) – jusio 2012-02-03 00:35:58

+0

好的!谢谢!我尝试过GWT RPC。但它仍然会给出错误。 – Isuru 2012-02-03 00:37:32