質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.61%

  • Java

    13514questions

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

  • Visual Basic .NET

    96questions

    Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio2005 Visual Basic から Javaのクラスメソッドを呼び出す方法を教えて下さい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 4,981

izuki_y

score 43

よろしくお願いします。
処理部分をJavaで作り、GUI周りをVBで作成して、VBからJavaのメソッドを呼び出したいと思っています。
適当なサンプルを作り、Shellコマンドなどを使って以下の様にクラスを呼び出してみましたが
上手くいきません(そもそもShellは実行ファイルの呼び出しっぽいので違う様な気はしますが)

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    Dim Ret As Integer
    Ret = Shell("java HashEncoding")

End Sub

Javaで作ったメソッドをVBからの呼び出し方を教えてください。




import java.security.MessageDigest;

public class HashEncoding {

    private final String HASH_TYPE;

    // コンストラクタ
    public HashEncoding(){
        // ハッシュ関数を"SHA-1"にする
        this("SHA-1");
    }
    // コンストラクタ( 引数あり )
    public HashEncoding( String algorithm ){
        HASH_TYPE = algorithm;
    }

    // 文字列からハッシュ値を生成する
    public String getStringDigest(byte[] data, int offset, int len) throws Exception {
        MessageDigest md = MessageDigest.getInstance(HASH_TYPE);

        md.update(data, offset, len);

        return hashByte2String(md.digest());
    }
    // ハッシュ値を16進数文字列に変換   
    private String hashByte2String(byte []hash) {
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < hash.length; i++) {   
            if ((0xff & hash[i]) < 0x10) {// < 16(<=F)の場合、1桁になるので、頭に"0"を追加   
                hexString.append("0" + Integer.toHexString((0xFF & hash[i])));    //HEX   
            } else {   
                hexString.append(Integer.toHexString(0xFF & hash[i]));    //HEX   
            }   
        }   
        return hexString.toString();
    }
}

上記のクラスをコンパイルして HashEncoding.class を生成しました。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

VBからJavaのメソッドを呼び出したいと思っています。 
メソッド単体の呼び出しはできません。VBからは、Javaで書かれたアプリケーションを起動する以上の結びつきは実現できません。

ただし、どうしても相互運用したければ以下の回避案が考えられます。いずれも VB側でデータ送信 → Java側でデータ受信+実処理+結果送信 → VB側で結果受信 という流れです。リスト上位は実装が比較的簡単で、下位の実装ほど複雑になります。
  • 一時ファイルを介したデータ通信(送信=ファイル書き出し/受信=ファイル読み込み)
  • 標準入出力コンソールを介したデータ通信
  • ローカルなTCP接続を介したデータ通信
  • プロセス間共有メモリAPIを介したデータ通信

もしくは jni4net のようなライブラリが使えるかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/27 19:50

    回答ありがとうございます。
    遅くなって申し訳ありません。

    自分の方も併せて調べてみたのですが、やはり直接メソッドを叩く方法はなさそうですね。
    もともとVBだとユーザインタフェース周りを作るのが楽だと言う事を考えての調査だったのです。
    通信やファイルを媒介にしてアクセスする方法も考えたのですが、これだとGUIにするメリッドがあまりなさそうなので諦めてSwingかAWT辺りで実装する事を考えようと思います。
    ただ jni4net のようなライブラリがある事は初めて知ったので時間があるときにでも挑戦してみようと思います。
    本当にありがとうございました。

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    Java インターフェースについての質問です

    インターフェースクラスの指定されたメソッドを自作し、自作したメソッドを呼び出す、という問題です。HashMapなどの実装クラスは使用出来ない、という制約付です。 ① get

  • 解決済

    [Java]String文字列を元にbyte型変数を取得したい

    お世話になります。 Javaについての質問です。 String文字列にセットされているコードから、 byte型を変数を生成し取得したいと考えております。 このようなことは可能でし

  • 解決済

    [java][ストリーム]質問

    はじめまして。javaの学習を始めて二カ月ほどのものです。 イクリプスを用いて以下の課題に着手しているのですが、何点か不明な点があり、ご教授いただけたら嬉しいです。 事前準備とし

  • 解決済

    Javaでサロゲートペア文字を含む文字列のreplace

    サロゲートペア文字(例えば😆とか𩸽)を含む文字列でStringBufferのreplaceメソッドを 使用したいのですが、replaceメソッドはサロゲートペア文字を考慮した実装で

  • 解決済

    単語ごとの出現回数を出現順に表示するには、HashMapとArrayListが必要か

    単語ごとの出現回数を出現順に表示するには、HashMapとArryaListが必要でしょうか。 下記の例よりももっとスマートかつコード量が少なく使用するメモリの量が少ない方法がある

  • 解決済

    java 日付の取得と変更について

    javaの日付の取得と変更に関するコードについて質問です 参考書のとおりに、下記のコードを書いて実行してみたのですが 実行してみても、現在の日付から5日後の日付が出力されず、現在

  • 解決済

    Unicodeに変換できない

    Unicodeにうまく変換できません。文字コードの指定の仕方が悪いのかもしれませんが… private EditText unicodeText; p

  • 解決済

    toString()メソッドのうまい書き方がわかりません。

    簡単な単方向連結リストの実装をしてみたのですが、toStringメソッドがうまく書けないで、困っています。 どのように記述するのがベストだと思われますか? public c

同じタグがついた質問を見る

  • Java

    13514questions

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

  • Visual Basic .NET

    96questions

    Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。