Java Netbeans教程:为twitter创建图形客户端

Java Netbeans教程:为twitter创建图形客户端,java,swing,netbeans-7,Java,Swing,Netbeans 7,我正在练习为twitter创建图形客户端的netbeans教程,可在以下链接找到:我正在使用netbeans 7.1 下面是教程的代码片段 public class TwitterFrame extends javax.swing.JFrame { /** * Creates new form TwitterFrame */ public TwitterFrame() { initCompone

我正在练习为twitter创建图形客户端的netbeans教程,可在以下链接找到:我正在使用netbeans 7.1

下面是教程的代码片段

    public class TwitterFrame extends javax.swing.JFrame {

        /**
         * Creates new form TwitterFrame
         */
        public TwitterFrame() {
            initComponents();

             try {
            initUserInfo();
        } catch (IOException ex) {
            Logger.getLogger(TwitterFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
        }



     private void initUserInfo() throws MalformedURLException, IOException {

            //Create an instance of the internal service class
        client = new Twitter_OAuth_user_timeline__format_JerseyClient("xml");


        //Log in, get tokens, and append the tokens to the consumer and secret
        //keys
        client.login();
        client.initOAuth();

        //Call getUserTimeline, get a list of statuses, pass the most recent
        //status as a StatusType object, and display the text of that object
        //in the JTextField
        Statuses statuses = client.getUserTimeline(Statuses.class, null, null, null, "1");
            twitter.twitteroauth.twitterresponse.StatusType st = statuses.getStatus().get(0);
        jTextField1.setText(st.getText().trim());

         //Get a UserType object from the StatusType object, get the URL of that
        //user's icon, and display that icon in the JLabel
        UserType user = st.getUser();
        String iconSrc = user.getProfileImageUrl();
        URL iconUrl = new URL(iconSrc);
        ImageIcon icon = new ImageIcon(iconUrl, user.getScreenName());
        jLabel1.setIcon(icon);

    }


 public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(TwitterFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(TwitterFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(TwitterFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(TwitterFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new TwitterFrame().setVisible(true);
            }
        });
    }
公共类TwitterFrame扩展了javax.swing.JFrame{
/**
*创建新表单TwitterFrame
*/
公共TwitterFrame(){
初始化组件();
试一试{
initUserInfo();
}捕获(IOEX异常){
Logger.getLogger(TwitterFrame.class.getName()).log(Level.SEVERE,null,ex);
}
}
private void initUserInfo()引发MalformedURLException,IOException{
//创建内部服务类的实例
client=newtwitter\u OAuth\u user\u timeline\u格式\u JerseyClient(“xml”);
//登录,获取令牌,并将令牌附加到使用者和密码
//钥匙
client.login();
client.initOAuth();
//调用getUserTimeline,获取状态列表,传递最近的
//状态为StatusType对象,并显示该对象的文本
//在JTextField中
Statuses Statuses=client.getUserTimeline(Statuses.class,null,null,null,“1”);
twitter.twitteroauth.twitterresponse.StatusType st=statuses.getStatus().get(0);
jTextField1.setText(st.getText().trim());
//从StatusType对象获取UserType对象,获取该对象的URL
//用户的图标,并在JLabel中显示该图标
UserType user=st.getUser();
字符串ICONRC=user.getProfileImageUrl();
URL iconUrl=新URL(ICONRC);
ImageIcon图标=新的ImageIcon(iconUrl,user.getScreenName());
jLabel1.setIcon(图标);
}
公共静态void main(字符串参数[]){
/*
*设置Nimbus的外观和感觉
*/
//
/*
*如果Nimbus(在JavaSE6中引入)不可用,请使用
*默认外观。有关详细信息,请参阅
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
试一试{
for(javax.swing.UIManager.LookAndFeelInfo:javax.swing.UIManager.getInstalledLookAndFeels()){
if(“Nimbus”.equals(info.getName())){
setLookAndFeel(info.getClassName());
打破
}
}
}捕获(ClassNotFoundException ex){
getLogger(TwitterFrame.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}catch(实例化异常){
getLogger(TwitterFrame.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}捕获(非法访问例外){
getLogger(TwitterFrame.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}catch(javax.swing.UnsupportedLookAndFeelException ex){
getLogger(TwitterFrame.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
}
//
/*
*创建并显示表单
*/
invokeLater(new Runnable()){
公开募捐{
新建TwitterFrame().setVisible(true);
}
});
}
但是,当我在netbeans上运行代码时,我得到了以下错误

run:
Exception in thread "AWT-EventQueue-0" com.sun.jersey.api.client.UniformInterfaceException: GET http://twitter.com/oauth/request_token returned a response status of 301 Moved Permanently
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:676)
    at com.sun.jersey.api.client.WebResource.get(WebResource.java:191)
    at twitterclient.TwitterFrame$Twitter_OAuth_user_timeline__format_JerseyClient.getOAuthRequestToken(TwitterFrame.java:268)
    at twitterclient.TwitterFrame$Twitter_OAuth_user_timeline__format_JerseyClient.login(TwitterFrame.java:255)
    at twitterclient.TwitterFrame.initUserInfo(TwitterFrame.java:123)
    at twitterclient.TwitterFrame.<init>(TwitterFrame.java:37)
    at twitterclient.TwitterFrame$2.run(TwitterFrame.java:177)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
运行:
线程“AWT-EventQueue-0”com.sun.jersey.api.client.UniformInterfaceException:获取http://twitter.com/oauth/request_token 返回301永久移动的响应状态
位于com.sun.jersey.api.client.WebResource.handle(WebResource.java:676)
位于com.sun.jersey.api.client.WebResource.get(WebResource.java:191)
twitterclient.TwitterFrame$Twitter\u OAuth\u user\u timeline\u format\u JerseyClient.getOAuthRequestToken(TwitterFrame.java:268)
在twitterclient.TwitterFrame$Twitter\u OAuth\u user\u timeline\u format\u JerseyClient.login(TwitterFrame.java:255)
位于twitterclient.TwitterFrame.initUserInfo(TwitterFrame.java:123)
位于twitterclient.TwitterFrame。(TwitterFrame.java:37)
twitterclient.TwitterFrame$2.run(TwitterFrame.java:177)
在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)中
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
在java.awt.EventQueue.access$000(EventQueue.java:101)
在java.awt.EventQueue$3.run(EventQueue.java:666)
在java.awt.EventQueue$3.run(EventQueue.java:664)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
位于java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:128)
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:117)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
任何对如何运行教程有建议的人。
谢谢。

我想自从编写Netbeans教程以来,URL已经改变了,现在是
https://api.twitter.com/oauth/request_token
根据

异常指示您调用:
http://twitter.com/oauth/request_token

您错过了
api。