java初心者です
10年以上前にC言語で作成されたプログラムを,GUIの部分だけ
JAVAで組み直したいと思っております
そこで質問なのですが、例えばC言語で作成されたHELLO WORLDを表示するような
実行ファイルをJAVAで作成したボタンで実行が可能かどうか。
もし可能ならば、その方法について教えて頂きたいのですが
よろしくお願いします

このQ&Aに関連する最新のQ&A

A 回答 (1件)

アプローチとしては二つあると思います。



・Runtime#exec() で外部プロセスとして起動して、標準出力を Process から取得する

呼出しの回数や単位を考えないと、パフォーマンスが悪くなるリスクがありますが、
簡単に実装できます。


・JNI(Java Native Interface) を使う

Java には、ネイティブメソッドというのがあり、メソッドの実装を Java 以外の
言語で記述することが可能です。

それなりに面倒なのと、Java のメリットであるスケーラビリティを損なうという
面はありますが、細かい制御は可能です。

参考URL に sun のサイトのページを紹介します。その気が出てきたならば、まずは
「JNI 1.1 の仕様」というページをじっくり読むことを薦めます。


ん、質問には「実行ファイルをJAVAで作成したボタンで実行が可能かどうか」と
ありますね。実行だけであれば、最初のアプローチで可能です。

参考URL:http://java.sun.com/j2se/1.3/ja/docs/ja/guide/jni/
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます
早速、URLのぞきにいってみます

お礼日時:2001/12/06 23:21

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

Qupdate文で改行を入れる

こんにちは。
いつもお世話になっています。

update文を使用して、データに改行を入れたいのですが、どうすればよいでしょうか。

対象列のデータ型はVARCHAR2です。

例えばSQLPLUSから、
SPL>update 「テーブル名」set 「対象列」='あ改行い改行う改行'
を投入し、そのあと
select 「対象列」 from 「テーブル名」
とすると
SQL>あ
SQL>い
SQL>う
と出てくればよいんですが、
SQL>update 「テーブル名」set 「対象列」='あ\nい\nう\n'
としても
SQL>あ\nい\nう\n
と、「\n」が文字列としてでてきてしまいます。

SPL>update 「テーブル名」set 「対象列」='あ
2い
3う'
と投入すると、期待通りになるのですが、
そうではなく一行にまとめたいのですがどうすれば良いでしょうか。

Oracle9iを使用しています。
宜しくお願いいたします。

Aベストアンサー

こんにちわyukio200263さん
以下のSQL文でどうでしょうか?

UPDATE 「テーブル名」
SET 「対象列」= 'あ' || CHR(13) || CHR(10) ||'い'

ちょっと長くなってしまいますが、一行で可能です。

Qファイル出力の場所を指定

現在C++にてhtmlファイルを出力するプログラムを作っているのですが、出力場所を指定することはできるのでしょうか?(現在はそのプログラムソースが保存されている場所と同じファイル内に出力されますが、それをデスクトップに出力するなど。)
もし、方法がありましたら、教えてください。
ソースや参考HPのURLなどのせていただけたらありがたいです。
環境はVisualStudio.NET2003です。
よろしくお願いします。

Aベストアンサー

単にファイル名の前にパスを指定する。

絶対パス指定
fp=fopen("c:/temp/test.txt","w");

相対パス指定
fp=fopen("./hoge/test.txt","w");


デスクトップはOSやユーザによって場所が異なるので、少し面倒です。
XPの場合環境変数を利用してこんな感じで出来ると思います。

例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(void)
{
FILE *fp;
char fname[1024];
strcpy(fname,getenv("USERPROFILE"));
strcat(fname,"/デスクトップ/test.txt");
fp=fopen(fname,"w");
//処理
fclose(fp);
}

Qjavaからバッチファイル実行

お世話になります。
javaプログラムからバッチファイルを呼び出して実行するようにしたいのですが、上手くいきません。
サイトを参考に以下のように書いてみましたが、
バッチファイルの一行目のみ実行している?ようで、二行目以降の処理をしていないようです。
バッチファイル単体での実行は正常に動作しています。
お気づきの点がありましたら教えて頂けないでしょうか。

try {
String[] cmd = {"バッチファイルのパス"};
Process p = Runtime.getRuntime().exec(cmd);
while(true){
try{
p.exitValue();
}catch(IllegalThreadStateException e){
continue;
}
break;
}
} catch (IOException e) {
e.printStackTrace();
}

Aベストアンサー

たとえば、直下のhoge.bat を起動するJavaプログラムは、、、

import java.io.IOException;
public class Cmd1 {
public static void main(String args[]) throws IOException {
String cmd = "cmd.exe /c start hoge.bat";
Runtime.getRuntime().exec(cmd);
}
}

QJAVA  ArrayListからArrayListへのコピー

java で、ArrayListからArrayListへコピーはできるのでしょうか?
clone()というメソッドがありましたが、よくわからず、コピーできてないようなので伺いました。

ベーシックではできるようですが、JAVAでもできるのでしょうか?
どなたか教えていただけませんでしょうか?

Aベストアンサー

ArrayList li = new ArrayList(list);
でよいでのでは?

QWindows 7 で16ビットソフトを動かすにはどうしたらいいですか

Windows 7 で16ビットソフトを動かすにはどうしたらいいですか?

 最近、Windows Xp から Windows 7 に移行しようとして問題になりました。
 私の場合、DOS のころから16ビットのコンパイラを使っており、それでコンパイルした大量の自作ソフトがあります。(普段使っている言語は、pascal と FORTRAN です。)
 メールの送信なども、自作ソフトを噛ませて、整形してから送信するようなことをしています。

 さて、Windows 7 を使い始めたら、これらのソフトがすべて使えなくなりました。
 chcp 932 を入れて日本語環境にセットしても、16ビットソフトを起動すると、英語モード(?)に変わってしまって、プログラムからのメッセージがすべて読めなくなります。実行が終わると 932 に戻ります。これでは事実上プログラムが使えません。
 というわけで、今は Windows 7 に移行できていません。

 新しい環境に順応するには、今まで蓄えたプログラム言語の知識を捨て、新しいプログラム言語を覚え、その言語のコンパイラを購入し、すべての自作ソフトを書き直すのでしょうか。仕事が忙しくて、とてもそんなことをしていられる余裕はなさそうです。
 自分の年齢を考えると、あと15年もすれば、今の仕事を辞めるので、その後はプログラミングはしなくてもいいのではないかと感じています。(趣味でするかもしれませんが。)
 何とか、15年くらい、今の Xp 環境でパソコンを使っていきたいと思うのですが、どうしたらいいでしょうか。
 当面は、古いパソコン(Windows Xp)を使っていますので、仕事に影響はなさそうです。とはいえ、ハード的に問題な部分もあって、新しいパソコンを買ったのですが、今はお手上げ状態です。

 「コンピューターの問題のトラブルシューティング」→「プログラムの互換性」からセットすると、動くように思えましたが、実際やってみた限りでは無効でした。

Windows 7 で16ビットソフトを動かすにはどうしたらいいですか?

 最近、Windows Xp から Windows 7 に移行しようとして問題になりました。
 私の場合、DOS のころから16ビットのコンパイラを使っており、それでコンパイルした大量の自作ソフトがあります。(普段使っている言語は、pascal と FORTRAN です。)
 メールの送信なども、自作ソフトを噛ませて、整形してから送信するようなことをしています。

 さて、Windows 7 を使い始めたら、これらのソフトがすべて使えなくなりました。
 chcp 932 を...続きを読む

Aベストアンサー

7のpro以上ならXpモード使うがいいと思います。
homeならアップグレードすればXPモードが使えますよ。
後は対応してくれるのを待つしかないと思いますよ。

QJavaで文字列をゼロ埋め(ゼロパディング)

Javaで文字列を前ゼロで埋め(ゼロパディング)たいのですが、
exceptionが発生してうまくいきません。
だれかお助け頂けたら助かります。

(例)123の前に0を5つ結合したい場合、

String str2="123";
String str = String.format("%08s",str2);

で問題無いと思ったのですが、
exceptionが発生してしまいます。

回答お待ちしております。

Aベストアンサー

そのExceptionはどういったExceptionなのか把握されてますか?
何が悪いのかの理由もそのExceptionからわかると思いますが。

http://docs.oracle.com/javase/jp/6/api/java/util/Formatter.html#syntax
をよく読んで"%08s"という指定ができるのかどうか確認しましょう。

やられたいことは"123"の先頭に"00000000"をつけて後ろから8文字取り出せばできると思いますが。


人気Q&Aランキング

おすすめ情報