salsberry の回答履歴
- Javaで外部ファイルの実行
Javaで外部ファイルの形態素解析ツールのjumanを実行させようとしてるのですが上手くいきません。 ソースは以下のようにしています。 public class CommandExec { /** * 外部コマンドを実行します。 * またリタンーン値で、標準出力、エラー出力 、リターンコードを取得します。 * 例: * execCommand("notepad.exe"); * * @see execCommand(String[] cmds) * ※実行するコマンドに引数(パラメータ)がある場合は、 * 以下を使用してください。 * @param cmd 実行するコマンド * @return コマンド実行結果情報を保持するString配列 * 配列[0] ⇒ 標準出力 * 配列[1] ⇒ エラー出力 * 配列[2] ⇒ リターンコード * @throws IOException 入出力エラーが発生した場合 */ String b; public static String[] execCommand(String cmd) throws IOException, InterruptedException { return execCommand(new String[] { cmd }); } /** * 外部コマンドを引数(パラメータ)を指定して実行します。 * またリタンーン値で、標準出力、エラー出力 、リターンコードを取得します。 * 例: * execCommand(new String[]{"notepad.exe","C:\test.txt"}); * * Process.waitFor()を実行していますので、外部コマンドの実行が * 終了するまでこのメソッドは待機します。 * * @see execCommand(String cmd) * ※実行するコマンドに引数がない場合は簡易的にこちらを * 使用してください。 * @param cmds 実行するコマンドと引数を含む配列 * @return コマンド実行結果情報を保持するString配列 * 配列[0] ⇒ 標準出力 * 配列[1] ⇒ エラー出力 * 配列[2] ⇒ リターンコード * @throws IOException 入出力エラーが発生した場合 */ public static String[] execCommand(String[] cmds) throws IOException, InterruptedException { String[] returns = new String[3]; String LINE_SEPA = System.getProperty("line.separator"); Runtime r = Runtime.getRuntime(); Process p = r.exec(cmds); InputStream in = null; BufferedReader br = null; try { in = p.getInputStream(); StringBuffer out = new StringBuffer(); br = new BufferedReader(new InputStreamReader(in,"sjis")); String line; while ((line = br.readLine()) != null) { out.append(line + LINE_SEPA); System.out.println(line); } System.out.print("\n"); returns[0] = out.toString(); br.close(); in.close(); in = p.getErrorStream(); StringBuffer err = new StringBuffer(); br = new BufferedReader(new InputStreamReader(in)); while ((line = br.readLine()) != null) { err.append(line + LINE_SEPA); } returns[1] = err.toString(); returns[2] = Integer.toString(p.waitFor()); return returns; } finally { if (br != null) { br.close(); } if (in != null) { in.close(); } } } public static void main(String[] args) throws IOException, InterruptedException { ArrayList a = new ArrayList(); CommandExec.execCommand(new String[]{"C:\\Program Files\\juman\\juman.exe","<","C:\\Program Files\\juman\\test1.txt"}); } } これをおなじ解析ツールのchasenを実行した場合は上手くいくのですがなぜでしょうか? chasenの場合は以下のようにしてます。 CommandExec.execCommand(new String[]{"C:\\Program Files\\ChaSen\\chasen.exe","C:\\Program Files\\Chasen\\test1.txt"}); よろしくお願いします。
- Javaでゲーム
Javaのコンソールを利用してマルバツゲームを作りたいと思っています。 (1)2人のプレイヤーが3×3のますに「○」「×」を交互に指定して勝敗を競う (2)2人のプレイヤー名が入力可能 順番が回ってきたらプレイヤー名表示 (3)また勝敗結果表示時にもプレイヤー名表示 (4)「○」、「×」が縦横斜めに3つ並んだ時、勝敗結果を表示 (5)3×3のマス目も作る こんな感じで作りたいのですが、javaを勉強し始めたばかりなので よく分かりません。 ご回答、または参考になるサイト等がありましたら教えてください。 よろしくお願いいたします。
- 三つの文字を順に並べるプログラム
三つの文字を入力して、順番に並べて表示させるプログラムが作りたいのですが、どうしたらいいのかわかりません。 二つまではできました。以下に記します import java.io.*; class Sample { public static void main(String args[]) throws IOException { System.out.println("文字列1を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1=br.readLine(); System.out.println("文字列2を入力してください。"); String str2=br.readLine(); int s = 1,t = 0; if(str1.length()>str2.length()){ int len=str1.length(); StringBuffer sb=new StringBuffer(str1); while(s<len+1){ sb.insert(s,str2.charAt(t)); s=s+2; t++; } System.out.println("文字列は"+sb+"となる。"); }else{ int len=str2.length(); StringBuffer sb=new StringBuffer(str2); while(s<len+1){ sb.insert(s-1,str1.charAt(t)); s=s+2; t++; } System.out.println("文字列は"+sb+"となる。"); } } } str1に123 str2に45といった風に入力すると14253といった風になります。 これにstr3を加え、str3が6789ならば、146257389 となる風にしたいです。
- コンパイラソフトがmsysなので判りません!?
以下プログラムですが!? int judge; int strike = 0; int ball = 0; while( strike < 3 && ball < 4 ){ printf( "ストライク=1 or ボール=2 ?" ); scanf( "%d", &judge ); if( judge == 1 ) strike++; else if( judge == 2 ) ball++; } printf( "%dストライク,%dボール", strike, ball ); 以上ですが、あるサイトにあるプログラムです。以上のプログラムだけでは私が持っているコンパイルソフトのmsys は、エラーがでて動きません!?それ用のアレンジが分からないので現在は理論だけの勉強をしています。 以上プログラムで、ストライクを1回、ボール1回入力した場合、出力画面にどん画面が出てくるのでしょうか?以下余談ですが、msys 用にアレンジした場合どんプログラムになるのですか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- gogatunijyuku
- 回答数4
- ダウンキャストできません
参照型の縮小変換(ダウンキャスト)したいのですが、できません。 ◇私はロボット。名前はR2D2。値段は1000です。 ◇ご主人様はルーク。 ◇私はロボット。名前はR2D2。値段は1000です。 ◇ご主人様はルーク。 Exception in thread "main" java.lang.ClassCastException: Pet at PetTester1.main(PetTester1.java:15) コンパイルは成功するのですが、 実行すると最後の方にException in ~という風にエラーがでてしまいます。 実行ファイルの RobotPet q=(RobotPet)new Pet("ドラえもん","のび太"); の部分でダウンキャストできてない?みたいなのですが、どうしたらダウンキャストできるのでしょうか? よろしくお願いします。
- 三つの文字を順に並べるプログラム
三つの文字を入力して、順番に並べて表示させるプログラムが作りたいのですが、どうしたらいいのかわかりません。 二つまではできました。以下に記します import java.io.*; class Sample { public static void main(String args[]) throws IOException { System.out.println("文字列1を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1=br.readLine(); System.out.println("文字列2を入力してください。"); String str2=br.readLine(); int s = 1,t = 0; if(str1.length()>str2.length()){ int len=str1.length(); StringBuffer sb=new StringBuffer(str1); while(s<len+1){ sb.insert(s,str2.charAt(t)); s=s+2; t++; } System.out.println("文字列は"+sb+"となる。"); }else{ int len=str2.length(); StringBuffer sb=new StringBuffer(str2); while(s<len+1){ sb.insert(s-1,str1.charAt(t)); s=s+2; t++; } System.out.println("文字列は"+sb+"となる。"); } } } str1に123 str2に45といった風に入力すると14253といった風になります。 これにstr3を加え、str3が6789ならば、146257389 となる風にしたいです。
- コンパイラソフトがmsysなので判りません!?
以下プログラムですが!? int judge; int strike = 0; int ball = 0; while( strike < 3 && ball < 4 ){ printf( "ストライク=1 or ボール=2 ?" ); scanf( "%d", &judge ); if( judge == 1 ) strike++; else if( judge == 2 ) ball++; } printf( "%dストライク,%dボール", strike, ball ); 以上ですが、あるサイトにあるプログラムです。以上のプログラムだけでは私が持っているコンパイルソフトのmsys は、エラーがでて動きません!?それ用のアレンジが分からないので現在は理論だけの勉強をしています。 以上プログラムで、ストライクを1回、ボール1回入力した場合、出力画面にどん画面が出てくるのでしょうか?以下余談ですが、msys 用にアレンジした場合どんプログラムになるのですか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- gogatunijyuku
- 回答数4
- javaのJPanel重ね時、repaint
JPanelの上にJPanelを重ね、上のJPanelを透過させました。 この状態で両方のパネルでstartを行います。 下記の結果では、両方が動いています。 目標として、片方のパネルが描写をのこし、片方のパネルが再描写するのが理想です。 誰かお教えください。 import javax.swing.JFrame; import java.awt.*; public class Test extends Object { public static void main(String[] arguments){ TestViewU Upanel = new TestViewU();//上のパネル TestViewS Spanel = new TestViewS();//下のパネル Upanel.setLocation(new Point(0, 0)); Upanel.setLayout(null); Upanel.setOpaque(false); Spanel.setLocation(new Point(0, 0)); Spanel.setLayout(null); Spanel.add(Upanel); Upanel.setSize(new Dimension(800, 600)); Spanel.setSize(new Dimension(800, 600)); JFrame aWindow; aWindow = new JFrame("MVC-"); aWindow.getContentPane().add(Spanel); aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); aWindow.setSize(800, 600); aWindow.setVisible(true); Spanel.start(); Upanel.start(); } } import java.awt.*; import javax.swing.*; public class TestViewS extends JPanel implements Runnable{ static Thread thread; private static int interval_time = 5; int a = 100; int b = 100; public TestViewS(){ setBackground(Color.WHITE); } public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.BLUE); g.fillRect(a, b, 10, 10); } void start() { thread = new Thread(this); thread.start(); } public void run() { boolean checkA = true; boolean checkB = true; Thread thisThread = Thread.currentThread(); while (thisThread == thread) { try { if(checkA && checkB){ a++;} else if(!checkA && checkB){ b++;} else if(!checkA && !checkB){ a--;} else if(checkA && !checkB){ b--;} if(a == 701){ checkA = !checkA; a--;} else if(a == 99){ checkA = !checkA; a++;} if(b == 501){ checkB = !checkB; b--;} else if(b == 99){ checkB = !checkB; b++;} repaint(); Thread.sleep(interval_time); } catch (InterruptedException ie) { thread = null; break;}} } } import java.awt.*; import javax.swing.*; public class TestViewU extends JPanel implements Runnable{ static Thread thread; private static int interval_time = 5; int a = 200; int b = 200; public TestViewU(){ } public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.RED); g.fillRect(a, b, 10, 10); } void start() { thread = new Thread(this); thread.start(); } public void run() { boolean checkA = true; boolean checkB = true; Thread thisThread = Thread.currentThread(); while (thisThread == thread) { try { if(checkA && checkB){ a++;} else if(!checkA && checkB){ b++;} else if(!checkA && !checkB){ a--;} else if(checkA && !checkB){ b--;} if(a == 601){ checkA = !checkA; a--;} else if(a == 199){ checkA = !checkA; a++;} if(b == 401){ checkB = !checkB; b--;} else if(b == 199){ checkB = !checkB; b++;} repaint(a, b, 10, 10); Thread.sleep(interval_time); } catch (InterruptedException ie) { thread = null; break;}} } }
- 締切済み
- Java
- noname#180010
- 回答数1
- Eclipseで文字化け
Eclipse(Java,3.5)でコーディングをしていて、その途中で下記URLのように文字コードを変更してみたら、日本語で書いたところ(コメント等)が文字化けしてしまいました。文字コードを元に戻しても、戻らないようなのですが、修復方法はあるでしょうか? http://www.javadrive.jp/eclipse3/setup/index1.html
- タテヨコで数字の被らない二次元配列
23541 32415 14352 45123 51234 のように、タテヨコで数字の被らないN×Nの二次元配列を作成するためには、 どのようなアルゴリズムを考えればよいでしょうか? またこのような配列の名称はありますか? どなたかお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- HisanaEXE
- 回答数3
- Scanner と BufferedReader
javaでキーボードからの入力を格納するやつがあって、 Scanner と BufferedReaderのやり方がありますが、これはどう違うのでしょうか? それとも全く同じでしょうか? たとえば、 ■一つ目 import java.io.*; class Sample3{ public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("文字列を入力してください"); String str1=br.readLine(); System.out.println("検索文字を入力してください"); String str2=br.readLine(); char ch=str2.charAt(0); int num=str1.indexOf(ch); if(num !=-1) System.out.println(str1+"の"+(num+1)+"番目に「"+ch+"」が見つかりました"); else System.out.println(str1+"に「"+ch+"」はありません"); } } ■二つ目 import java.util.Scanner; class Sample4{ public static void main(String[] args){ Scanner stdIn=new Scanner(System.in); System.out.println("文字列を入力してください"); String str1=stdIn.nextLine(); System.out.println("検索文字を入力してください"); String str2=stdIn.nextLine(); char ch=str2.charAt(0); int num=str1.indexOf(ch); if(num !=-1) System.out.println(str1+"の"+(num+1)+"番目に「"+ch+"」が見つかりました"); else System.out.println(str1+"に「"+ch+"」はありません"); } } これら2つは全く同じ実行結果が得られると思うのですが、 Scanner と BufferedReader の使い分けるべき場合などあるのでしょうか?
- マルチキャストアプリケーションをJavaで作成
課題でUDPソケットを使って、 マルチキャストアプリケーションをJavaで作成するのですが、何からはじめればよいのかわかりません。 条件は次のとおりです。 プログラムがスタートしたら、グループの参加者をつなぐ。 ユーザーはメッセージを記入してそのメッセージをグループの参加者全員に配る(自分も含め)。 メッセージを受け取ったそれぞれの参加者はそのメッセージをディスプレイする。 UDPソケットを使う。 下記の4個のメッセージを使う GUIは何を使っても良い 1. “HELLO username” アプリはgroup IP multicast addressとportに自分がグループのメンバーであることをほかの全部の参加者にしらせるために周期的にこのメッセージを送る。このメッセージはリライアブルではない。 2. “LEAVE username” 参加者がチャットセッションから離れることを示す。このメッセージはreliableではない. 3. “HI username seq-number message” seq-numberでは新しいメッセージは番号がふえていき、messageはマルチキャストセッションの参加者の一人である受信者へ送信者から送られる文章である。 4. “YES seq-number” seq-numberは HI messageの番号である。このメッセージは上のHI messageを付随するsequence numberと一緒に受け取ったことを知らせるacknowledgementの役割をする。 付随するHI messageのsource IP address and portに送られる。 YESはHI messageのreliable delivery を実行するために使われる 1と2は1人対全員でreliable である必要はないが、3と4は1対1のメッセージのやり取りであるためtimeout, retransmissions, acknowledgments (“YES message”)を使ってこのメッセージをreliable に届けるようにしなければならない。 このようなプログラムを作るにあたって何から初めて、何をどのようにすればよいのか手順を教えてください。ヒントでもよいのでよろしくお願いします。
- 締切済み
- Java
- 2009googoo
- 回答数1
- プロポーショナルフォントで文字列の縦幅横幅
JTextPane中のプロポーショナルフォントの文字列の表示上の横幅及び縦幅をpixel単位で取得したいです。 ここで言う文字列とは空白文字・タブ文字・改行文字を含まない一続きの文字列を指します。 どの様な方法がありますでしょうか? 同時に、JTextPaneの入力領域左端から文字列の書き始めまでの距離(pixel)の取り方もお教えいただけると助かります。 どうか宜しくお願いします。
- VisualStudioでドキュメントのインスコ
この前,VisualStudio2010 ultimateの体験版を使ってみようと思い、 UltimateのISOをダウンロードしてからDAEMON Tool等でisoファイルをマウントさせて インストールしたのですが、インストール完了後、ドキュメントのインストールというものがありまして、 HDDにも容量は十分とあるのでインストールしようとしたのですが、間違えてキャンセルを押してしまい、ドキュメントのインストールをしようにも、どうすればインスコできるのか分かりません。 インスコ方法を教えていただけませんでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- noname#144186
- 回答数1
- java実行時のメッセージについて
50歳にてjavaを勉強しようとしているものです。 javaの本より例題を作成してみたのですが、うまくいきません。 javaをインストールしてjavacが正常でいざ実行した際、以下のメッセージが表示されました。何の意味かさっぱりわかりません。このサイトで質問するレベルではないかと思いますが、アドバイスいただければ幸いです。 作成したプログラムは class hello { public static void main(String[] args) { System.out.println("こんにちは"); } } javac ではエラー表示なし → C:\javabook\part1>javac Hello.java C:\javabook\part1> これを実行すると、 C:\javabook\part1>java Hello Exception in thread "main" java.lang.NoClassDefFoundError: Hello (wrong name: he llo) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.java:616) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14 1) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Could not find the main class: Hello. Program will exit. と表示されます。 何がエラーとなっているのでしょうか?
- ベストアンサー
- Java
- tomokanamana
- 回答数4
- Javaの課題を手伝ってください
Javaの課題があります。 ある程度独力で取り組んでいたのですが、 どうにも解決できない部分があり、手伝って欲しいです。 課題は以下の通りです。 起動パラメータとしてxy座標が列挙されたcsvファイルのファイルパス、x幅a(a>=100)、y幅b(b>=100)、y軸論理下限値c(b>c>=0)、y軸論理上限値d(b>=d>=c)(いずれもpixel)を受け取る x幅、y幅よりJTextPaneを作成する csvを読み、以下の規則に則りJTextPaneに対して連続する座標間に直線を描画する ・JTextPaneの背景の色はR=0xFF、G=0xFF、B=0xFF、A=0xFFとする ・y軸論理下限値より低い位置の直線の色はR=0xFF、G=0x0、B=0x0、A=0xFFとする ・y軸論理上限値より高い位置の直線の色はR=0xFF、G=0x0、B=0x0、A=0xFFとする ・それ以外の場合、色はR=0x0、G=0x0、B=0x0、A=0xFFとする ※Aは不透明度 ・起動パラメータは不定とする ・上記規則に則っている限り、詳細な実装方法は問わない 上記の課題の中ですでに出来ている事 ・起動パラメータの取得 ・起動パラメータからJTextPaneを作成 ・csvファイルの読み込み ・Graphicsオブジェクトを使ってJTextPaneに対して単純に座標間を繋ぐ線を引く まだ出来ていない事 ・y軸論理下限値、y軸論理上限値を見て線の色を変更する y座標開始終了位置が共に上限値・下限値より高い・低い場合に関しては、問題無いと思います。 問題は線が上限値・下限値をまたぐ場合です。 これに関して、解決の方法を二通り考えています。 1.連続した点を描画して擬似的な直線を表現する。判定は楽になる。 2.始点座標、終点座標、上限値、下限値から交点座標を取り、始点座標-交点座標までの線と交点座標-終点座標までの線を別の色で描画。 試した結果 1.drawLineが頂点を整数で取るため、鋭角・鈍角な線の場合に綺麗に線が引けずガタガタする。判定が楽でもこれでは本末転倒。綺麗に引く為にはより複雑な計算が要求される。 2.交点の取り方がいまいちわかりませんが、交点は端数処理をどうするかを一旦おいておけば、ココと決めた場所を線で繋げばいいだけなので、こちらの方が現実的。(先送りにした問題はどうにかがんばってみます) 長々と書いてしまいましたが、今回質問したい事は2のやり方に基づいた交点の取り方です。 図で示した中の交点xを取得する為の演算方法をお教えいただきたいです。この時点では実数の解で構いません。 (出来れば、1行1演算でJavaのソースで例示していただけると、非常に助かります) プログラミング自体は好きですが、算数はどうにも苦手です。 どうか宜しくお願いします。
- JavaからJNIを使わず既存DLLを呼び出す
現在、GeneXusというジェネレータで出力されたJavaコードを、GeneXusが使用しているフレームワークに依存しない形で解体する作業を行っております。 作業を進めていくうちに、こちらのシステムの内部にwin32DLLを呼び出している箇所があることに気づきました。 DLLの内部の処理がかなり重要な処理なのですが、現状どうにも手を出せない状態です。 JNIを使用してソースからDLLをコンパイルしなおせばUnsatisfiedLinkErrorを回避できることが分かったのですが、DLLのソースがないのでJNIでヘッダ情報などを生成することができない状況です。 ちなみに、DLLはとあるpackageからコールされており、そのpackageからなら問題なくコールできるようです。しかし私が新たに作成したコードから呼び出すと、やはりUnsatisfiedLinkErrorで「nativeメソッドが見つかりません」と言われます。 どうにか、既存のDLLをJavaから呼び出す方法はないでしょうか? もしくは、DLLの内部の処理を解析する方法はないでしょうか。 完全に行き詰っておりますので、何か案があればよろしくお願いいたします。
- 締切済み
- Java
- noname#224557
- 回答数2
- iphoneとアンドロイドのアプリ用言語の違い
iphoneだとC言語でないと動かないとききました。 また、フラッシュが動かないとききました。 反面、アンドロイドだとC言語がなくても動き、フラッシュも動くと聞きました。 ほとんど素人に近いのですが、なるべく簡単にわかりやすくなぜなのかをお教えいただけますとありがたく存じます。
- ベストアンサー
- その他(プログラミング・開発)
- noname#184513
- 回答数3
- Java ストリームでの文字列の扱いについて
Javaのストリームを勉強している際に、下記のサンプルソースを見ました。 (ユーザが入力した内容を、1文字ずつそのまま画面に返すプログラムです。) 疑問点があるので教えて下さい。 ===== import java.io.*; public class Sample{ public static void main(String args[]){ int b; try{ while((b = System.in.read()) != -1){ System.out.print((char)b); 以下省略 ====== ■疑問箇所1. while((b = System.in.read()) != -1) とありますが、 (1)ユーザが入力した文字(整数ではない)が、何故、int型の変数に代入出来るのでしょうか? (2)read()メソッドはint型の戻り値を持つようですが、EOFの"-1"以外の時は、 どんな数値が返されているのでしょうか? (read()メソッドは、1文字読み込んで、戻り値でその文字をUnicodeにエンコードした値を返しているとか?) ■疑問箇所2. System.out.print((char)b); とありますが、変数bには数値が入っていると考えられます。 これは、変数bの整数が、(char)でキャストされる事によって、 再び、文字に「変換」されているのでしょうか? 以上、教えて下さい。
- ベストアンサー
- Java
- hakase-chan
- 回答数2