【问题标题】:JOptionPane.showMessageDialog keeps reappearingJOptionPane.showMessageDialog 不断重新出现
【发布时间】:2014-09-10 18:15:01
【问题描述】:

我的代码应该确保用户只输入二进制字符串。如果我输入正确的二进制数 (1, 0),一切都会顺利进行。但是当我输入错误的数字(字母或 0 和 1 以外的数字)时,出现 JOptionPane.ShowMessageDialog 并显示错误消息,当我单击“确定”或“交叉”按钮时,它再次出现。所以要关闭应用程序,我必须使用进程管理器来杀死“java.exe”。

这是我的应用程序的完整代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

class Bn extends JFrame {
    private JLabel l1;
    private JLabel l2;
    private JLabel l3;

    private JTextField tf;

    private JButton oc;
    private JButton hd;
    private JButton dc;

public Bn() {
    setTitle("Binary Conversion");
    setSize(350 , 190);
    setResizable(false);
    setLocation(720 , 200);
    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new FlowLayout(FlowLayout.CENTER, 25, 10));

    l1 = new JLabel(">>>>>>>>BINARY CONVERSION<<<<<<<<");
    l2 = new JLabel("Enter The Number:");
    l3 = new JLabel("                                    Convert to:                                    ");

    tf = new JTextField(25);

    oc = new JButton("Octal");
    hd = new JButton("Hexa Decimal");
    dc = new JButton("Decimal");

    add(l1); // Binary conversion
    add(l2); // Enter The Number

    add(tf); // Text Field

    add(l3); // Conver to


    add(oc); // Octal
    add(hd); // Hexa Decimal
    add(dc); // Decimal

    oc.addActionListener(new cvr());
    hd.addActionListener(new cvr());
    dc.addActionListener(new cvr());

    setVisible(true);
}

void res()
{
    int b = 0;
    String num = tf.getText();
    int i , l;
    l = num.length();
    char ch;

    do
    {
        for (i=0 ; i<l ; i++)
        {
            b = 0;
            ch = num.charAt(i);
            if (Character.isDigit(ch) && (ch == 48 || ch == 49))
                b=1;
            else
            {
                JOptionPane.showMessageDialog(null, "Please enter a binary number (1 , 0)");
            }
        }
    }
    while(b != 1);
}


void occ()
{
    res();

    String num = tf.getText();

    long dec = Long.parseLong(num,2);

    String oct = Long.toOctalString(dec);

    JOptionPane.showMessageDialog(null, "Octal equivalent is: "+ oct);
}

void hdc()
{
    res();

    String num = tf.getText();

    long dec = Integer.parseInt(num,2);

    String hex = Long.toHexString(dec);

    JOptionPane.showMessageDialog(null, "Hexa Decimal equivalent is: "+ hex);

}

void dcc()
{
    res();

    String num = tf.getText();
    long decimal = 0, temp, i = 0;
    temp = Long.parseLong(num);
    while (temp != 0) {
        long r = temp % 10;
        long value = r * (int)Math.pow(2, i);
        i++;
        decimal = decimal + value;
        temp /= 10;
    }
    JOptionPane.showMessageDialog(null, "Decimal equivalent is: "+ decimal);
}


private class cvr implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        if (e.getSource() == oc)
        {
            occ();
        }

        if (e.getSource() == hd)
        {
            hdc();
        }

        if (e.getSource() == dc)
        {
            dcc();
        }
    }
}

public static void main(String args[])
{
    Bn obj = new Bn();
}
} 

JOptionPane 的代码位于void res() 方法中。如何关闭此对话框窗格,以便重新输入输入值?

【问题讨论】:

  • 这是有问题的地方
  • void res() { int b = 0;字符串数 = tf.getText();整数 i , l; l = 数字长度();字符 ch;做 { for (i=0 ; i

标签: java swing while-loop joptionpane


【解决方案1】:

删除 do { } while 循环

do
{
   for (i=0 ; i < l ; i++)
    {
        b = 0;
        ch = num.charAt(i);
        if (Character.isDigit(ch) && (ch == 48 || ch == 49))
            b=1;
        else
        {
            JOptionPane.showMessageDialog(null, "Please enter a binary number (1 , 0)");
        }
    }
}
while(b != 1);

【讨论】:

  • 如果我删除 do while 循环,那么选项窗格将出现我输入错误数字的次数,,,没有帮助:(
  • 去掉do while,加上“break;”在 showMessageDialog 之后
  • 如果我在 do while 中添加 break 怎么办??
  • 您仍然会重复收到消息对话框。 do while 循环是错误的
  • 它可以工作,但它也会抛出异常,这里是快照link的链接
猜你喜欢
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
相关资源
最近更新 更多