Java:GUIで入力ラインを取得する必要があり、コンソールでのみ動作しています
-
29-10-2019 - |
質問
私の友人と私は、キーボード/マウスのないタッチスクリーン端子用に作られたGUIでJavaでプログラムを書きました。すべてがGUI内で発生し、入力のほとんどはボタンプレスです。磁気カードリーダー(キーボードモード)を添付し、カードから読み取り、データに基づいて処理を実行します。
コンソールで動作するクラスを書きましたが、GUIを実行すると、Alt+タブがIDE(Eclipse)コンソール内をクリックしてカードをスワイプするまでハングアップします。私が探しているのは、GUIを離れる必要がある場合にこの入力を取得する方法です。
MCRは、キーボードのカード情報を単に入力したように機能します。同じライン、TXTドキュメント、コンソールなどを入力できる場所にデータの両方のトラックを含む行を送信します。
関連するコードは次のとおりです。
import java.util.Scanner;
public class CardRead {
public static void main()
{
String raw_card_data = "";
Scanner read = new Scanner( System.in );
System.out.println("Scan card"); // changed to an outputArea.setText for GUI
raw_card_data = read.nextLine(); // works in console, not within GUI
/* insert processing here */
}
}
GUIでは、コードは単純です。
cardreadbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
CardRead.main();
}
});
Inputstreamが機能するかもしれないと思いましたが、私は彼らと一緒に仕事をしたことがありません。私はグーグルでこれを見つけましたスレッド :次のように、ioutilsに関する提案を統合してみました。
InputStream is = System.in;
StringWriter writer = new StringWriter();
IOUtils.copy(is, writer, null);
raw_card_data = writer.toString();
System.out.println(raw_card_data);
IOUtils.closeQuietly(is);
IOUtils.closeQuietly(writer);
私がそれを正しくやっているかどうかはわかりませんが、コンソール(GUIで試したことはありません)で、「スキャンカード」と言って、raw_card_dataを印刷するか、他のことをしないように進行することはありません。 「近く」から得た ここ:
...しかし、繰り返しますが、私がそれを正しくやっているなら、私は知らない。 Apache ioutilsとも仕事をしたことはありません。
だから私は立ち往生しています、そして私はあなたたちを探しています。このカードデータをGUIを残すためにどうすれば取得できますか?
重要な注意:カードデータには、その中に変数のスペースがあります(保存する必要があります)。そのため、scanner.next()のようなものは機能しません。カードリーダーは、両方のトラックが区切り文字によって区切られ、その後キャリッジリターンを備えたラインを送信するように設定されているため、.nextline()が機能します。カードデータは、バイト/文字の変数#でもあります。
また:最初のコードブロックでは、system.out.printlnはdoの前にありますwhile loopはraw_card_data = read.nextline()が実際に存在します(私はそれが関連していないと感じたのでそれを除外しましたが、今は私は興味がありますこれをやっています)。 printlnがsettext()に変更されてGUIのjtextareaに表示されると、カードデータがコンソールで入力されるまで表示されず、whileの前に発生し、その前に実行する必要があります。わかりません、笑。
正しい解決策はありません