0

私はしばらくの間JButtonを取得しようとしてきましたが、文字列を返す必要があり、ある程度は機能していますが、System.out.println()メソッドを使用している場合にのみ機能します。

私の関連コード:

private String answer;

public void inputDataButton(JButton inButton)
{
inButton.addActionListener(new Action1());
}

public String returnAnswer()
{
return answer;
}

private void fileAnswer(String inString)
{
answer = new String(inString);
}

public class Action1 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        String sub = JOptionPane.showInputDialog("Input The Date");
        fileAnswer(sub);
    }
}

私のメインがそれを制御している:

public class test
{
    protected static JTextField text;

    public static void main(String[] args)
    {
    javaUI base = new javaUI("Date Killer", 800, 800);

    JLabel label = new JLabel("Place Holder");
    base.addLabel(label, 1, 0, false);

    JButton button = new JButton("Press Here");
    base.addButton(button, 0, 0, false);

    String str = "EMPTY";

    base.inputDataButton(button);

    while (str == "EMPTY")
        {
        str = base.returnAnswer();
        }

    System.out.println(str + " TEST");
    label.setText(str + "SETTED");
    }
}

JavaUIは、ラベル、ボタンなどのJFrameおよびJpanelのセットアップ全体を簡素化する単なる別のクラスです。

とにかく、ここに私の問題があります。メインクラスのwhileステートメントでは、直後にSystem.out.println()ステートメントがある場合、strは文字列に正常に設定されます。 ボタンが押されるまで「EMPTY」を100回以上繰り返すため、これは明らかに端末をかなり混乱させます。

ただし、そのステートメントを削除すると、明らかに何も出力されませんが、strがstrに設定されることはありません。

私はかなり長い間これをいじっていました(すべてのJava UIのものに新しく、主に計算の部分で働いていました)、そして私はまだ私の端末を台無しにしない実用的な解決策を見つけていません。すべてのヘルプをありがとう!!!

ケイル

4

1 に答える 1

1

1)アクションが発生するのを「待機」するためにループを使用するのは少し奇妙です。あなたはあなたのCPU使用率を見ることができます、そしてそれが永遠にループするならばそれは死んでいる可能性があります。

2)また、ボタンがクリックされたかどうかに関係なく、メソッドは戻ります-アクションが発生する前に、メソッドはnullコードに従って文字列を返します。そして、あなたのメインの方法でstr == "EMPTY"は、最初のラウンドの後ですぐに偽になります。次に、画面に「nullTEST」が表示されます。


whileループ後のコードをactionPerformedメソッドまたはfileAnswerメソッドに入れて、ループを削除してみてください。

public void actionPerformed(ActionEvent e)
{
    String sub = JOptionPane.showInputDialog("Input The Date");
    System.out.println(sub + " TEST");
    label.setText(sub + "SETTED");
}

また、なぜあなたが呼ぶのかわかりませんanswer = new String(inString)。別の変数に割り当てたい場合はanswer = inString、Stringは変更できないため、呼び出すだけで済みます。そしてこの場合、あなたはこれをしません。

于 2013-03-01T11:11:43.400 に答える