Javaのデスクトップアプリ(Swing)から、REST API を呼び出したいケースは意外と多くあります。
例えば以下のような用途です。
-
社内ツールからWeb APIを呼び出す
-
Swing画面でボタンを押したら外部サービスと通信する
-
APIの結果を画面に表示する簡易クライアントを作りたい
本記事では、Swing画面のボタン操作をトリガーに REST API を呼び出す基本サンプルを紹介します。
使用する構成
-
Java:Java 11 以上
-
GUI:Swing
-
HTTP通信:
java.net.http.HttpClient(標準API) -
API:JSON を返す REST API(サンプル用)
全体イメージ
-
Swing画面を表示
-
ボタンをクリック
-
REST API を呼び出す
-
レスポンスをテキストエリアに表示
サンプル画面の構成
-
ボタン:API呼び出し
-
テキストエリア:レスポンス表示
Swing画面のサンプルコード
コード解説(重要ポイント)
① HttpClient を使用してREST APIを呼び出す
|
1 |
HttpClient client = HttpClient.newHttpClient(); |
Java 11 以降では、HttpURLConnection よりもHttpClient の使用が推奨されています。
② Swingのイベントディスパッチスレッド(EDT)に注意
Swingでは以下が非常に重要です。
-
通信処理はEDTで実行しない
-
画面更新はEDTで実行する
そのため、以下のように分けています。
-
API呼び出し →
new Thread(...) -
画面更新 →
SwingUtilities.invokeLater(...)
これを守らないと、
-
画面がフリーズする
-
ランダムに例外が出る
といった不具合につながります。
POSTリクエストの例(参考)
よくあるハマりポイント
| 問題 | 原因 |
|---|---|
| ボタンを押すと画面が固まる | EDTで通信している |
| レスポンスは取れているのに画面に表示されない | EDT外でUI更新 |
| SSLエラーが出る | 証明書未登録・プロキシ環境 |
まとめ
-
SwingからREST APIを呼び出すことは可能
-
通信は別スレッド、UI更新はEDTが鉄則
-
Java 11 以降なら
HttpClientがシンプルでおすすめ
Swingの社内ツールや簡易クライアントを作る際の参考になれば幸いです。

