🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

4205閲覧

Javaでひらがなを漢字に変換したい

meoto2408

総合スコア52

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

2クリップ

投稿2019/10/26 14:34

編集2019/10/28 01:54

#問題
Minecraft のプラグインで半角英字をひらがなにして、それを漢字にするというプラグインがあります。

それを参考に同じようなものを作ったのですが、半角英字をひらがなにはできますが、漢字にする段階でうまく動作いたしません。

原因がわかる方はいますか?(変換部分はMinecraft とは互換性はないと思います。
#書いたコード
GoogleIME.java

Java

1package jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.honyaku; 2 3import com.google.common.io.CharStreams; 4import com.google.gson.Gson; 5import com.google.gson.JsonArray; 6import com.google.gson.JsonElement; 7import sun.net.www.protocol.http.HttpURLConnection; 8 9import java.io.BufferedReader; 10import java.io.IOException; 11import java.io.InputStreamReader; 12import java.net.MalformedURLException; 13import java.net.ProtocolException; 14import java.net.URL; 15import java.net.URLEncoder; 16 17public class GoogleIME { 18 19 private static final String GOOGLE_IME_URL = 20 "https://www.google.com/transliterate?langpair=ja-Hira|ja&text="; 21 22 public static String convByGoogleIME(String org) { 23 return conv(org); 24 } 25 26 // 変換の実行 27 private static String conv(String org) { 28 if ( org.length() == 0 ) { 29 return ""; 30 } 31 32 HttpURLConnection urlconn = null; 33 BufferedReader reader = null; 34 try { 35 String baseurl; 36 String encode = "UTF-8"; 37 baseurl = GOOGLE_IME_URL + URLEncoder.encode(org , "UTF-8"); 38 39 URL url = new URL(baseurl); 40 41 urlconn = (HttpURLConnection)url.openConnection(); 42 urlconn.setRequestMethod("GET"); 43 urlconn.setInstanceFollowRedirects(false); 44 urlconn.connect(); 45 46 reader = new BufferedReader( 47 new InputStreamReader(urlconn.getInputStream(), encode)); 48 49 String json = CharStreams.toString(reader); 50 String parsed = GoogleIME.parseJson(json); 51 52 return parsed; 53 54 } catch (MalformedURLException e) { 55 e.printStackTrace(); 56 } catch (ProtocolException e) { 57 e.printStackTrace(); 58 } catch (IOException e) { 59 e.printStackTrace(); 60 } finally { 61 if ( urlconn != null ) { 62 urlconn.disconnect(); 63 } 64 if ( reader != null ) { 65 try { 66 reader.close(); 67 } catch (IOException e) { // do nothing. 68 } 69 } 70 } 71 72 return ""; 73 } 74 75 // デバッグ用エントリ 76 /** 77 * GoogleIMEの最初の変換候補を抽出して結合します 78 * 79 * @param json 変換元のJson形式の文字列 80 * @return 変換後の文字列 81 * @since 2.8.10 82 */ 83 public static String parseJson(String json) { 84 StringBuilder result = new StringBuilder(); 85 for (JsonElement response : new Gson().fromJson(json, JsonArray.class)) { 86 result.append(response.getAsJsonArray().get(1).getAsJsonArray().get(0).getAsString()); 87 } 88 return result.toString(); 89 } 90 91}

文字数の都合上YukiKanaConveter.javaは参考にしたGitHubのリンクとする(コピペなので中身はまったく同じです)
YukiKanaConveter.java

文字数の都合上Chat.javaはコードのコピペです。
Chat.java

参考にしたもの:
GitHub
#エラー

[10:53:09 ERROR]: Could not pass event AsyncPlayerChatEvent to MLSPlugin v1.0-SNAPSHOT org.bukkit.event.EventException: null at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:72) ~[patched_1.12.2.jar:git-Paper-1613] at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:74) ~[patched_1.12.2.jar:git-Paper-1613] at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[patched_1.12.2.jar:git-Paper-1613] at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:513) ~[patched_1.12.2.jar:git-Paper-1613] at net.minecraft.server.v1_12_R1.PlayerConnection.chat(PlayerConnection.java:1393) ~[patched_1.12.2.jar:git-Paper-1613] at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1308) ~[patched_1.12.2.jar:git-Paper-1613] at net.minecraft.server.v1_12_R1.PacketPlayInChat$1.run(PacketPlayInChat.java:39) ~[patched_1.12.2.jar:git-Paper-1613] at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) ~[?:1.8.0_211] at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:1.8.0_211] at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_211] at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_211] at java.lang.Thread.run(Unknown Source) [?:1.8.0_211] Caused by: java.lang.ClassCastException: sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to sun.net.www.protocol.http.HttpURLConnection at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.honyaku.GoogleIME.conv(GoogleIME.java:41) ~[?:?] at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.API.honyaku.GoogleIME.convByGoogleIME(GoogleIME.java:23) ~[?:?] at jp.dip.monsterlifeserver.mlsplugin.mlsplugin.Listener.Chat.onChat(Chat.java:56) ~[?:?] at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor9.execute(Unknown Source) ~[?:?] at org.bukkit.plugin.EventExecutor$2.execute(EventExecutor.java:70) ~[patched_1.12.2.jar:git-Paper-1613] ... 11 more [10:53:09 INFO]: <Monster2408> test

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/10/26 22:51

うまく動作しないというのはどういうふうに動作するんでしょうか
y_waiwai

2019/10/27 13:22

エラーが出るならエラー・メッセージを提示しましょう。 問題を解決したいなら、なにが問題かなにが起こってるかををすべて提示しましょうや。隠しててもなにも得はないですぜ。
javahack

2019/10/27 17:02

エラーは自分で勝手に要約せず、そのままをコピペして記載した方が解決に繋がりやすいです。
guest

回答3

0

ベストアンサー

importするHttpURLConnectionは、java.net.HttpURLConnection です。

投稿2019/10/30 04:48

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

HttpURLConnectionimport sun.net.www.protocol.http.HttpURLConnection; となっているのが問題ではないでしょうか。
sun.net.www.protocol.https.HttpsURLConnectionImpljavax.net.ssl.HttpsURLConnection を拡張しているようです。
javax.net.ssl.HttpsURLConnectionjava.net.HttpURLConnection を拡張しています。

上記から import java.net.HttpURLConnection; であれば、ClassCastException のメッセージにある sun.net.www.protocol.https.HttpsURLConnectionImpl からでもキャストしてエラーにならないはずです。

IDEのコード補完機能で出てきたパッケージ違いのものを選ぶと時々こういうことが起きます。
少なくとも、sun. で始まる実装クラスを import する形になっている場合、明確にそのクラスでなければならない理由(例えば実装クラスで拡張された機能のためのメソッドを呼び出したいなど)がない限りは、コードが実装依存になってしまうので注意された方が良いと思います。

添付されたコードの状態を見る限りそのような特殊な事情はなさそうに思います。
もしこの先実装依存のメソッドを使用する考えがあるなら、SSL接続の実装クラスそのもの、つまり sun.net.www.protocol.https.HttpsURLConnectionImpl にキャストするしかないでしょう。
実装クラス依存のコードを書くという意味であれば javax.net.ssl.HttpsURLConnection にキャストする意味が(Java SEの規定のメソッドしか使えませんから)ありません。

投稿2019/10/30 04:10

ironya

総合スコア456

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Java

1Caused by: java.lang.ClassCastException: sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to sun.net.www.protocol.http.HttpURLConnection

と出力されていますので、

Java

1 HttpURLConnection urlconn = null; 2 urlconn = (HttpURLConnection)url.openConnection();

ここはHttpsURLConnectionが正しいのでは。

投稿2019/10/28 18:13

編集2019/10/28 18:20
javahack

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問