2012-02-02 2 views
0

Я создаю приложение простой твиттера с GWT + twitter4j. Но я не могу запустить это или скомпилировать его.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, чтобы увидеть все ошибки. Поиск классов точек входа [ERROR] Ошибки в файле:/E: /workspace/Twitter/src/in/isuru/twitter/client/Twitter.java ' [ОШИБКА] Строка 20: Исходный код не доступен для типа in.isuru.twitter.server.Twit; вы забыли унаследовать необходимый модуль? [ОШИБКА] Строка 21: нет исходного кода для типа twitter4j.Tweet; вы забыли унаследовать необходимый модуль? [ERROR] Невозможно найти тип 'in.isuru.twitter.client.Twitter' [ERROR] Подсказка: предыдущие ошибки компилятора, возможно, сделали этот тип недоступным [ERROR] Подсказка: проверьте цепочку наследования из вашего модуля; он не может наследовать необходимый модуль, или модуль не может правильно добавлять свои исходные записи пути

Заранее благодарим!

ответ

0

[ОШИБКА] Строка 20: Нет исходного кода для типа in.isuru.twitter.server.Twit;

Это ваша проблема - из пакета вы заявили, что Twit является объектом сервера, поэтому компилятор GWT не сделал его доступным для компиляции на клиенте.

Похоже, вы пытаетесь напрямую вызвать класс сервера Twit вместо его асинхронного вызова - еще раз посмотрите на документацию RPC для создания удаленной службы и как сделать асинхронные вызовы. http://code.google.com/webtoolkit/doc/latest/tutorial/RPC.html

0

Вы не можете использовать только какую-либо библиотеку java в GWT. GWT не является java, и библиотеки нужно создавать и настраивать особым образом, поэтому вы получаете эту ошибку.

Я рекомендую прочитать official documentation

+0

Ну, люди, использующие эту библиотеку, twitter4j с GWT. http://ililiililililii.blog.de/2010/08/21/gwt-gae-twitter-in-20-minutes-9217888/ – Isuru

+0

@isurumadusanka в предоставленном учебнике весь код из twiter4j используется на стороне сервера. Ни один из кодов фактически не используется в клиентском коде приложения GWT (что невозможно, поскольку twitter4j является нормальной java-библиотекой) – jusio

+0

ok! Благодаря! Я пробовал GWT RPC. Но все же это дает ошибку. – Isuru