GUIによるアプリケーション開発

996 views
Skip to first unread message

杉浦翔太

unread,
May 31, 2014, 4:52:11 AM5/31/14
to twitt...@googlegroups.com
Twitterからのコピペで申し訳ないです

はじめまして、お世話になっております
Twitter4jを使ったGUIアプリケーションの開発について壁にぶつかってしまったので御質問よろしいでしょうか?
単刀直入に申し上げますとツイートすらできない状況です。サンプルコードでもエラーが出ます
試しにJButtonを配置し、ボタンを押すと「test」とツイートするだけのコードを書いて見ましたが結果は同じでした。
netbeansの指示でtry、catchで囲んだところ、コードのエラー?は消えましたがデバッグ時にエラーを吐かれました。

CUIでは問題なくツイートできていたのですが、元々GUI開発は初めてなもので…

以下、エラー内容
例外TwitterExceptionは報告されません。スローするには、補足または宣言する必要があります


どうかご教授をお願いします。

Yamamoto Yusuke

unread,
May 31, 2014, 4:57:55 AM5/31/14
to twitt...@googlegroups.com
Javaでは例外をキャッチしないといけません。
try-catchで囲む方法でokです。「デバッグ時のエラー」はどのようなものでしょうか?貼り付けて下さい

--
山本 裕介
@yusuke
http://samuraism.jp/
> --
> Twitter4J の最新情報をフォロー: http://twitter.com/t4j_news
> 現在のバージョン - 安定: 4.0.1, 開発中: 4.0.2-SNAPSHOT
> バグトラッキング: http://issue.twitter4j.org/youtrack/issues/TFJ
>
> このメールは次の Google グループの参加者に送られています: Twitter4J J
> このグループにメールで投稿: twitt...@googlegroups.com
> このグループから退会する: http://groups.google.com/group/twitter4j-j?hl=ja
> ---
> このメールは Google グループのグループ「Twitter4J J」の登録者に送られています。
> このグループから退会し、グループからのメールの配信を停止するには twitter4j-j...@googlegroups.com にメールを送信してください。
> その他のオプションについては、https://groups.google.com/d/optout にアクセスしてください。

杉浦翔太

unread,
May 31, 2014, 5:20:53 AM5/31/14
to twitt...@googlegroups.com
返信ありがとうございます。
コード
// 認証
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("")
.setOAuthConsumerSecret("")
.setOAuthAccessToken("")
.setOAuthAccessTokenSecret("");
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();

try {
twitter4j.Status status = twitter.updateStatus("test");
} catch (TwitterException ex) {
Logger.getLogger(TwiJFrame.class.getName()).log(Level.SEVERE, null, ex);
}

実行結果(デバッグし、JButtonを押したときに出るエラー *とりあえずデバッグ時にはエラーは出ません)

重大: null
api.twitter.com
Relevant discussions can be found on the Internet at:
http://www.google.co.jp/search?q=2fc5b7cb or
http://www.google.co.jp/search?q=11613e17
TwitterException{exceptionCode=[2fc5b7cb-11613e17 2fc5b7cb-11613ded], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=4.0.1}
at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:179)
at twitter4j.HttpClientBase.request(HttpClientBase.java:53)
at twitter4j.HttpClientBase.post(HttpClientBase.java:82)
at twitter4j.TwitterImpl.post(TwitterImpl.java:2004)
at twitter4j.TwitterImpl.updateStatus(TwitterImpl.java:251)
at com.twitest.TwiJFrame.jButton1ActionPerformed(TwiJFrame.java:82)
at com.twitest.TwiJFrame.access$000(TwiJFrame.java:21)
at com.twitest.TwiJFrame$1.actionPerformed(TwiJFrame.java:46)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
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:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.net.UnknownHostException: api.twitter.com
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:649)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:275)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:371)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1103)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:997)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1281)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1256)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:137)
... 43 more

Yamamoto Yusuke

unread,
May 31, 2014, 5:37:56 AM5/31/14
to twitt...@googlegroups.com
根本原因(Caused by…の部分)としてjava.net.UnknownHostExceptionが記録されています。
api.twitter.comというドメインの解決(ドメイン名からIPアドレスを割り出す処理)が出来ていないようです。
ネットワーク接続に問題があるのではないでしょうか?
ファイアウォールの設定やネットワーク設定を確認してみてください。

--
山本 裕介
@yusuke
http://samuraism.jp/

杉浦翔太

unread,
May 31, 2014, 5:51:28 AM5/31/14
to twitt...@googlegroups.com
返信ありがとうございます。
当方ネットワークの知識がとぼしいもので詳しいことはわかりませんが
ネットに接続できてはいます。
今もこうしてネットサーフィンしていますし、とあるサイト上からグローバルIPも確認できています。(関係ない?)
GUIではなくただ単にツイートの送信処理だけをするCUIではtry、catchで囲めという指示もなくうまくできるのですが、、、

以下はCUIでのツイートプログラムです

import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

(略)
    Twitter twitter = new TwitterFactory().getInstance();
         Status status = twitter.updateStatus("テスト”);

2014年5月31日土曜日 18時37分56秒 UTC+9 yus...@mac.com:

Yamamoto Yusuke

unread,
May 31, 2014, 6:04:58 AM5/31/14
to twitt...@googlegroups.com
恐らくCUIアプリケーションの場合は main メソッドに throws TwitterException と書くことで例外をキャッチしなくてもコンパイルできているのではないかと思います。

GUIアプリケーションでもあらゆるところに throws TwitterException と書けばコンパイルは通るかもしれません。
(が、通信に失敗した場合の処理などは必要なのでやはりtry-catchを書くべきです)

CUIアプリケーションとGUIアプリケーションは同じ環境で動かしていますでしょうか?
--
山本 裕介
@yusuke
http://samuraism.jp/

> このメールは Google グループのグループ「Twitter4J J」に登録しているユーザーに送られています。

alpha

unread,
May 31, 2014, 6:25:24 AM5/31/14
to twitt...@googlegroups.com
返信ありがとうございます。
CUIのコードとGUIのコードを見比べていてthrows TwitterExceptionはきになっていた点でした。
適当にthrows TwitterException追記したらエラーはきましたが...w

同じ環境というのはどういうことでしょうか?
エディタにはGUIもCUIもnetbeansを使用しています。
twitter4jのバージョンもjavaのバージョンも同じです。
確実にわかることはGUIとCUIで”意図的には”環境をかえていないということですね

2014年5月31日土曜日 19時04分58秒 UTC+9 yus...@mac.com:

Yamamoto Yusuke

unread,
May 31, 2014, 6:27:06 AM5/31/14
to twitt...@googlegroups.com
環境は実行しているマシンやOS、実行時のパラメータなどを指していました。
GUIが動かないプロジェクトにCUIアプリのコードを貼り付けた場合は同じ例外が出ますか?
--
山本 裕介
@yusuke
http://samuraism.jp/

alpha

unread,
May 31, 2014, 6:49:19 AM5/31/14
to twitt...@googlegroups.com
返信ありがとうございます。
実行しているマシンは同じです。同じマシンのnetbeans上でGUIもCUIも開発しています。

コード(文をtry,catchで囲んだところ、エラーでデバッグできなかったためJButtonのブロックを囲みました)
try {
            Twitter twitter = new TwitterFactory().getInstance();
            
            //つぶやきの実行
            twitter4j.Status status = twitter.updateStatus("@tisyo_1 ");
        } catch (TwitterException ex) {
            Logger.getLogger(gui.class.getName()).log(Level.SEVERE, null, ex);
        }

CUIのツイートプログラムをGUIのボタンを配置しただけのプログラムにペーストし、実行したところ
以下のようなエラーが出ました。こちらもデバッグ時にエラーはなくボタンを押したところエラーがずらずらっと出る形でした

重大: null
401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.
message - Invalid or expired token
code - 89

Relevant discussions can be found on the Internet at:
TwitterException{exceptionCode=[2fc5b7cb-11613e08], statusCode=401, message=Invalid or expired token, code=89, retryAfter=-1, rateLimitStatus=null, version=4.0.1}
at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:164)
at twitter4j.HttpClientBase.request(HttpClientBase.java:53)
at twitter4j.HttpClientBase.post(HttpClientBase.java:82)
at twitter4j.TwitterImpl.post(TwitterImpl.java:2004)
at twitter4j.TwitterImpl.updateStatus(TwitterImpl.java:251)
at com.gui.gui.jButton1ActionPerformed(gui.java:74)
at com.gui.gui.access$000(gui.java:20)
at com.gui.gui$1.actionPerformed(gui.java:45)
ビルド成功(合計時間: 16秒)

2014年5月31日土曜日 19時27分06秒 UTC+9 yus...@mac.com:

Yusuke Yamamoto

unread,
May 31, 2014, 6:54:00 AM5/31/14
to twitt...@googlegroups.com
さっきのとは違う例外ですね。
(なんとかExceptionというのは「例外」と呼ばれていて、より致命的な問題は「エラー」と区別されています)

この例外はOauth認可に失敗していることを示します。twitter4j.propertiesがないようなのでうまく動いているCUIアプリのプロジェクトからコピーしてから実行してみてください。


-- 
山本 裕介
@yusuke
http://samuraism.jp/
Sent from my iPhone5

alpha

unread,
May 31, 2014, 6:59:43 AM5/31/14
to twitt...@googlegroups.com
パッケージファイルにtwitter4j.propertiesを作成し、以下を記入、デバッグしています
debug=true
oauth.consumerKey=****
oauth.consumerSecret=****
oauth.accessToken=****
oauth.accessTokenSecret=****
http.useSSL=true

実行結果がひとつ前の私の投稿で載せたエラーです。

2014年5月31日土曜日 19時54分00秒 UTC+9 yus...@mac.com:

Yusuke Yamamoto

unread,
May 31, 2014, 7:03:17 AM5/31/14
to twitt...@googlegroups.com
実行時、クラスパスに通る場所に置かれていないのではないかと思います。ディレクトリ構造えおCUIプロジェクトと動作しないGUIプロジェクトとで比べて見てください。


-- 
山本 裕介
@yusuke
http://samuraism.jp/
Sent from my iPhone5

alpha

unread,
May 31, 2014, 7:20:48 AM5/31/14
to twitt...@googlegroups.com
簡易GUIツイートプログラムでコンシューマキー、アクセストークンを別の物に書き換えてみたらツイートできました。
恥ずかしい話なのですがアクセス権限が読み書きになっていなかったかもしれないです、、、
本命のGUIプログラムでも試しましたが、こっちではエラー。
ツイート自体はできるため、おそらくJFrameデザイン自体の問題だと思います。
こんなくだらないことに貴重なお時間を割かせてしまった申し訳ありません...。

2014年5月31日土曜日 20時03分17秒 UTC+9 yus...@mac.com:

Yusuke Yamamoto

unread,
May 31, 2014, 7:28:17 AM5/31/14
to twitt...@googlegroups.com
分らないことがあればお気軽にどうぞ!
最初に貼り付けて頂いたメッセージの根本例外はUnknownHostExceptionなのでアプリケーションの権限設定の問題ではないはずです。
とりあえず動いたとのことですが、また発生するようでしたら例外メッセージをまた貼り付けて投稿していただければ!


-- 
山本 裕介
@yusuke
http://samuraism.jp/
Sent from my iPhone5

alpha

unread,
May 31, 2014, 7:40:17 AM5/31/14
to twitt...@googlegroups.com
本命プログラムのほうも無事動かすことができました!
本当にありがとうございました
また機会がありましたらよろしくお願いします。

2014年5月31日土曜日 20時28分17秒 UTC+9 yus...@mac.com:
Reply all
Reply to author
Forward
0 new messages