2012-11-26 31 views
2

我正在编写一个Java代码,以便从mu应用程序上传视频到youtube。NoSuchMethodError与Java中的YouTube API

我的代码是:

package com.youtube.video; 

import java.io.IOException; 
import java.net.URL; 
import com.google.gdata.client.youtube.YouTubeService; 
import com.google.gdata.data.media.mediarss.MediaCategory; 
import com.google.gdata.data.media.mediarss.MediaDescription; 
import com.google.gdata.data.media.mediarss.MediaKeywords; 
import com.google.gdata.data.media.mediarss.MediaTitle; 
import com.google.gdata.data.youtube.FormUploadToken; 
import com.google.gdata.data.youtube.VideoEntry; 
import com.google.gdata.data.youtube.YouTubeMediaGroup; 
import com.google.gdata.data.youtube.YouTubeNamespace; 
import com.google.gdata.util.AuthenticationException; 
import com.google.gdata.util.ServiceException; 

public class YouTubeController { 

    public static YouTubeService service; 

    public void init() { 
     if (service == null) { 
     service = new YouTubeService("[email protected]", "A...A"); 
     String username = "[email protected]"; 
     String password = "xxxxxxxxx"; 

     try { 
      service.setUserCredentials(username, password); 
     } catch (AuthenticationException ae) { 
      ae.printStackTrace(); 
     } 
     } 
    } 

    static String token; 
    static String formUrl; 
    public static void setFormDetails() throws IOException { 
     VideoEntry newEntry = new VideoEntry(); 
     YouTubeMediaGroup mg = newEntry.getOrCreateMediaGroup(); 

     String videoTitle = "this is a title"; 

     mg.addCategory(new MediaCategory(YouTubeNamespace.CATEGORY_SCHEME, "Autos")); 
     mg.setTitle(new MediaTitle()); 
     mg.setPrivate(false); 
     mg.setKeywords(new MediaKeywords()); 
     mg.getKeywords().addKeyword(""); 
     mg.getTitle().setPlainTextContent(videoTitle); 
     mg.setDescription(new MediaDescription()); 
     mg.getDescription().setPlainTextContent(videoTitle); 

     URL uploadUrl = new URL("http://gdata.youtube.com/action/GetUploadToken"); 

     try { 
     FormUploadToken fut = service.getFormUploadToken(uploadUrl, newEntry); 
     token = fut.getToken(); 
     System.out.println(">>>>>"+token); 
     formUrl = fut.getUrl(); 
     } catch (ServiceException se) { 
     se.printStackTrace(); 
     } 
    } 

    public static void main(String s[]) throws IOException { 
     YouTubeController yc = new YouTubeController(); 
     yc.init(); 
     yc.setFormDetails(); 
    } 
} 

我在lib文件夹下面的罐子:

GDATA,客户1.0.jar GDATA-的YouTube-2.0.jar GDATA,芯 - 1.0.jar GDATA媒体-1.0.jar 谷歌 - 收集 - 1.0.jar 番石榴13.0.1.jar 的mail.jar 的activation.jar

但在运行这段代码,这是给我下面的错误

Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.copyOf([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet; 
    at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableTypes(AltFormat.java:399) 
    at com.google.gdata.wireformats.AltFormat$Builder.setAcceptableXmlTypes(AltFormat.java:387) 
    at com.google.gdata.wireformats.AltFormat.<clinit>(AltFormat.java:49) 
    at com.google.gdata.client.Service.<clinit>(Service.java:558) 
    at com.zeta.video.YouTubeController.init(YouTubeController.java:23) 
    at com.zeta.video.YouTubeController.main(YouTubeController.java:66) 

我尝试了网上,所有的解决方案,和他们都指出,这个错误是因为我错过了一些JAR文件。但我拥有所有的JAR。有人可以帮我解决这个问题吗?

+0

你是如何建立这个项目的? – BeRecursive

+0

我不明白你的意思吗? – Rajkumar

+0

你用什么来构建这段代码? – BeRecursive

回答

0

它看起来好像你是参考谷歌收藏番石榴。由于番石榴的超集谷歌收藏你其实只需要参考番石榴。删除引用谷歌收藏,你应该发现问题已解决。

+0

是的,它可以工作,谢谢。你拯救了我的一天。 – Rajkumar