• ベストアンサー

JavaのクラスをCアプリケーションから起動。。?

Javaにて、引数として渡されたURLに  接続するクラスを作成します。 それをCで作ったアプリケーションから、  URLを引数として渡し、起動させるようなものを  考えています。 この時、C言語からJavaで作った上記のようなクラスを  呼び出すにはどうしたらよいのでしょうか。 また、この場合のJavaの処理として、  指定URLに対して、GETではなく、POSTを行うには  どのようにすれば可能でしょうか。 具体的な方法、参考になる文献など、  ご存知の方、いらっしゃいましたら、ご教授願います。

noname#744
noname#744
  • Java
  • 回答数2
  • ありがとう数11

質問者が選んだベストアンサー

  • ベストアンサー
  • ryoyama
  • ベストアンサー率56% (45/80)
回答No.2

質問の内容からわからない点が2つあります。 1.Javaのプログラムはアプリケーションなのかアプレットなのか。 2.Cのプログラムはそのマシン上で動くのか、CGIとしてサーバで動くのか。(KanataさんはCGIと考えたようですね。) そのマシン上で動くCのアプリケーションから同じマシンにあるJavaのクラスを呼び出すことはできるようです。 jclass FindClass(JNIEnv *env, const char *name)という関数がJNIにあります。 くわしくは参考URLを見てください。 質問がかなり高度な内容なので、これくらいしかアドバイスできません・・・。 GET,POSTの質問はちょっとボクにはわかりません。 それではがんばってください。ヾ(^o^)

参考URL:
http://java.sun.com/products/jdk/1.2/ja/docs/ja/guide/jni/index.html
noname#744
質問者

補足

ありがとうございます。 1について、Javaはアプリケーション、です。 2については、マシン上で動く単純なユーザインタフェースプログラム、を想定しています。 全てJavaかCで製造したいところなのですが、 諸々の事情により、このようなややこしい構成となっています。 FindClassですね。 早速、お教えいただきましたURLを覗いてみます。 ありがとうございました。

その他の回答 (1)

noname#9414
noname#9414
回答No.1

基本的には、無理ではないでしょうか。なぜなら、 C言語で書いたアプリケーションは、CGIとして サーバ側で実行されるのにも関わらず、Javaで 書いたクラスは、クライアント側で実行するから です。 まぁ、クライアントのIPアドレスをしっかりと取得 できるのならば、C言語側で取得しておき、そのIP アドレスのJavaクラスを呼び出す・・・なんてことが できるかもしれませんが、少なくとも私の知識では そのようなことはできないと思います。 それから、Javaの処理として、GETではなくPOSTを 使用するのはURLConnectionを使用すれば、取得 できるようです。出力ストリームから読みとるよう ですよ。 ではでは☆

noname#744
質問者

補足

ご回答、ありがとうございます。 実は、Cのアプリケーションと、Javaのクラスは  同じハード上にあり、前者からのトリガによって、  後者が起動して、URLに接続する。。。というもの  なのです。 つまり、ローカルでCからJavaクラスを呼び出す方法、  という事です。 舌足らずで申し訳ありませんが、  ご存知でしたらお知恵をお借りいたしたく思います。 POSTに関しては、参考になりました。  これから実験してみます。  ありがとうございました。

関連するQ&A

  • UNIX CからのJAVA起動について。

    いつもお世話になっております。 OS:UNIX、 言語:C言語で、JAVAで作成したクラスを引数を渡して起動したいのですが、やり方がわかりません。 実現可能なのかもよくわかりません。 UNIX開発は今回が初めてで困っております。 参考ソースや参考URLがありましたら、教えてください。 よろしくお願いいたします。

  • java アプリケーションをjava アプレットに

    java超初学者です。詳しいかたご教授願います。 java アプリケーションをjava アプレットに書き換えたいのですが、具体的にはどう書き換えを行ったらいいのか修正をお願いします。 (文字制限があるので、14個あるクラスファイルの中で(内1つはhtmlファイル)、メインメソッドを持つ実行クラスだけのせています。) Appletを継承させる、属性をメインクラスとコンストラクタはpublic にする、 mainメソッドを削除し、initメソッドへ書き換える、サイズ指定は<applet>タグで指定する。等調べましたが 具体的にわかりません。特にコンストラクタとメインメソッドの部分のアプレットへの書き換えがわかりませんでした。 宜しくお願い致します。 //実行クラスです。 import java.awt.*; import java.awt.event.*; /** *ゲームクラス(ここから始まる)<p> *画面の作成 */ public class Game extends Frame { /** * メインクラス */ public static void main(String args[]) { //フレームの作成 new Game(); } /** * 引数なしのコンストラクタ */ Game() { //*** ウィンドウの初期化 //タイトル super("Shooting Game"); //クローズボタンによる終了処理の実装 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); setSize(500, 500); //ウィンドウのサイズ //*** キャンバスの初期化 MyCanvas mc = new MyCanvas(); add(mc); //フレームにキャンバスを追加 setVisible(true); //ウィンドウの表示 //ゲームデータの初期化 mc.init(); //スレッドを作成 mc.initThread(); } }

  • Java クラスを使ったソート

    Javaで隣接交換法を用いて配列dataを昇順に並び替え、出力するプログラムを作成する。 ただし、ループ処理には、int型の変数は使わず、以下のCounterクラスを使用する。 という課題が出て、とり組んでみたのですが所々よく分からないので、お力添えしていただければと思います。 課題には下記のような条件が書いてありました。 配列data={54,76,32,89,45,11,8,54,29,67}; [クラス] Counter [インスタンス変数] int型の値を保持するcount [コンストラクタ] 引数で渡された値を初期値としてインスタンス変数に設定する。 引数を省略された場合、ゼロを設定する。 [メソッド] increment 値に1加算する decrement 値に1減算する compareTo 以下の処理を行う Counterの保持している値が引数に指定された値と 等しい場合、値0を返す。 Counterの保持している値が引数に指定された値より 小さい場合、0より小さい値を返す。 Counterの保持している値が引数に指定された値より 大きい場合、0より大きい値を返す。 get Counterの保持している値を添え字として、 引数で渡された配列の要素を取得します。 set Counterの保持している値を添え字として、 第1引数で渡された配列に第2引数で渡された値を設定します。 以下組んだものです。 ---- class Counter { int count = 0; Counter(int count) { this.count = count; } Counter() { this.count = 0; } public int get(int[] data) { return this.count; } public void set(int[] data, int count) { this.count = count; } public void increment() { this.count = count + 1; } public void decrement() { this.count = count - 1; } public int compareTo() { return count; } } public class Lesson09 { public static void main(String args[]) { Counter counter = new Counter(0); int[] data = {54, 76, 32, 89, 45, 11, 8, 54, 67}; counter.get(data); counter.set(data, 0); } } ---- とりあえず、compareToとsetとgetの部分をどう記述していいのかがよく分かりません。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JavaとCを連携させて計算を行う時のスピード

    Javaアプリケーションからデータをもらって それをもとにC(またはC++)で計算を行い その結果をJavaアプリケーションにまた引き渡す、 ということをやろうと思っております。 Cで計算をしようと思った理由は たぶんCが一番速い言語なのかな、ということです。 しかし、成り行きによってはpython、もしくは統計ソフトR などを使わなければいけない可能性もありまして、 そういう状態での質問となってしまい申し訳ないです。 Cをはじめとしたいくつかの言語をこれまでに経験していますので、 新しい言語を覚えることは問題ないだろうと思います。 質問の主眼ですが、 スピードを重視するなら どの言語にJavaからデータを引き渡すのがいいか、ということです。 ただ、そんなことをやらずに最初から一貫してJavaで処理してしまう、という手もあるのかもしれません。 また、Javaの相手役としてそれぞれの言語を選んだ時の注意点なども お聞かせいただけると幸いです。 どうぞよろしくお願いいたします。

  • JAVAのクラスの考え方は・・?

    JAVAの勉強をしていている学生です。 常々思っていたのですが、クラスの考え方がしっくりきてませんヽ(~-~ よく参考書などで書かれていることで 「クラスは設計図のようなもの、オブジェクトはそこから作成した実体」 「鋳型がクラスでどんどん作れるのがインスタンス」 といった話が疑問でならないのです。 というのも・・クラスの設計って、自分自身をフィールドに宣言したりできますよね。。 でそこから生成して、また自分自身のフィールドに生成して・・とか。 インターフェースを実装したクラスで、、、内部クラスを持ったクラスで、、、ジェネリッククラス、、。 となってくると、最初の考え方では、論理的に無理?私の脳内では変換しきれないです(´;ω;) 多分前提となる考え方が間違っていたり、私の想像力が乏しいだけだと思います。 どなたか、「クラスってこう考えればオブジェクト指向が見えてくる」と表現している本やサイトなどご存じないでしょうか。 一朝一夕で理解しようとは思っていませんので、きちんと参考にして理解しようと頑張ります! 「私的には・・」や「あなたが勘違いしている箇所は・・」といったご意見もぜひお聞きしたいです! クラスかオブジェクト指向かどっちかというより、クラスありきでJAVAのオブジェクト指向が本当に理解できると考えています。参考書やWEBを探してみた限りではやっぱり理解できないです(´;ω;) ちなみにC言語を中学生で始め、プログラミングに触れました。

  • javaのメソッドの引数で、クラスの配列を指定する

    javaのメソッドの引数で、クラスの配列を指定する事は可能なのでしょうか? 受け取るメソッドでは引数の所に何と書けば良いのでしょうか? 教えてください!

    • ベストアンサー
    • Java
  • java C言語では[system(**)]

    c言語ではコマンドラインに指定の文字列を入れて実行させるには system(***); をつかいますが javaではどのように書くのでしょうか?・ ご教授お願いします。

  • javaでwindowsアプリケーション

    仕事でwebプログラマーをしていますが、最近趣味でwindowsのアプリケーションをつくろうと思っています。 言語はjava。 javaでも.NETのように、ウィンドウズ標準のボタンやメニューを使うことはできるのでしょうか? swingだとどうも標準のインターフェースじゃないので違和感を感じています。 そもそもwindowsのアプリケーション(テキストエディター等)て一般的には言語は何を使って開発するのでしょうか? ご教授いただければ幸いです。

    • ベストアンサー
    • Java
  • C言語で出来る事

     卒論でC言語orJavaで何かプログラムを組みたいのですが、CやJavaで具体的にどんな事が出来るのかイマイチ分からなくてテーマを決めかねています。  参考になる文献、こんなプログラムを考えてみたらいいんじゃないか、など何か参考になる事があれば教えてください。  ちなみに私はSEまたはソフトウェア開発を目指しているのでそれにつながる事がしたいです

  • 私の場合、C++とJavaのどちらの言語でクラス取るべき?

    今度、データ構造のクラスを取ります。 でもその言語がC++とJavaで選べます。 私自身はBASIC, C, Fortran, Assembly, C++と習ってきました。 C++の初級は余裕だったのですが(Cの知識が結構応用できた)、 中級でのclassの概念(base, derivedなど)は 今一つ理解できてないと思います(グレードはBでした)。 例文があれば、いろんなところから貼り合わせ、なんとか動くようには出来るレベルです(^^ゞ 教授は「大丈夫、C++を理解していればJavaは出来る」と言いますし、 ここのOKWebの過去ログにもそんな記述があるのですが、 未知の言語(Java)で初級コースならまだしも データ構造(配列やらリストやら)を扱うっていうのは厳しいような…うーん…。 …と言いつつもC++でも自信ないし…うーん…。 Javaは人気があるのは知っていますし、新しい言語に興味もあるのですけど…うーん…。 最近、初級コースはJavaに切り替わったそうです… でも折角C++で必修科目を埋めたのにJavaで取り直すのはちょっと…うーん…。 こんな私はどちらの言語でデータ構造のクラスを取ればよいでしょうか? 両方の言語をご存知の方、アドヴァイスをください。