2017-04-14 90 views
0

我想從下面的代碼使用用戶名和密碼在頭中的Java Swing桌面應用程序(在澤西網絡應用上實現)調用登錄API。線程「AWT-EventQueue-0」中的異常java.lang.NoSuchFieldError:DEF_CONTENT_CHARSET

String authString = username + ":" + password; 
    String authStringEnc = new BASE64Encoder().encode(authString.getBytes()); 
    System.out.println("Base64 encoded auth string: " + authStringEnc); 

    DefaultHttpClient httpClient = new DefaultHttpClient(); 
    HttpGet getRequest = new HttpGet(FVConstants.loginAPI); 
    getRequest.addHeader("Authorization", "Basic " + authStringEnc); 

    HttpResponse response = null; 
    try { 
    response = httpClient.execute(getRequest); 

    if (response.getStatusLine().getStatusCode() != 200) { 
     throw new RuntimeException("Failed : HTTP error code : " 
      + response.getStatusLine().getStatusCode()); 


    } 

    BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent()))); 

    String output; 
    System.out.println("Output from Server .... \n"); 
    while ((output = br.readLine()) != null) { 
      System.out.println(output); 
    } 

    httpClient.getConnectionManager().shutdown(); 

} catch (ClientProtocolException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

它給了我下面錯誤就行response = httpClient.execute(getRequest);

Exception in thread "AWT-EventQueue-0" java.lang.NoSuchFieldError: DEF_CONTENT_CHARSET 
at org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175) 
at org.apache.http.impl.client.DefaultHttpClient.createHttpParams(DefaultHttpClient.java:158) 
at org.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448) 
at org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:309) 
at org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:466) 
at org.apache.http.impl.client.AbstractHttpClient.createHttpContext(AbstractHttpClient.java:286) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:851) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784) 
at login.Login.callLoginApi(Login.java:67) 
at login.Login.actionPerformed(Login.java:101) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6533) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) 

我試圖從構建路徑和/.m2/repository/org/apache/刪除同一個庫的多個版本,如在提到HttpClient DEF_CONTENT_CHARS並再次添加,仍然給我同樣的錯誤。 任何幫助將不勝感激,謝謝。

+0

希望這種聯繫將幫助你[看到這個鏈接](http://stackoverflow.com/questions/18246979/java-lang-nosuchfielderror-def-content-charset?noredirect=1&lq=1) –

+0

我已經考慮到了與我嘗試的解決方案相同的鏈接 –

回答

0

使用下面的代碼解決。請確保您有以下進口。

import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.HttpClientBuilder; 
import org.apache.http.HttpResponse; 

使用這些導入添加庫,你很好用下面的代碼去。

private void callLoginApi(String username, String password) 
{ 
    String authString = username + ":" + password; 
    String authStringEnc = new 
    BASE64Encoder().encode(authString.getBytes()); 
    System.out.println("Base64 encoded auth string: " + authStringEnc); 

    HttpClient client = HttpClientBuilder.create().build(); 
    HttpGet request = new HttpGet(FVConstants.loginAPI); 
    request.addHeader("Authorization", "Basic " + authStringEnc); 

    try { 
     HttpResponse response = client.execute(request); 
     System.out.println("response is : "+response.getStatusLine()); 

    } catch (Exception e) { 
     e.printStackTrace(); 

    } 
} 
相關問題