Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在线程内进行验证_Java_Multithreading_Exception - Fatal编程技术网

Java 如何在线程内进行验证

Java 如何在线程内进行验证,java,multithreading,exception,Java,Multithreading,Exception,好的,首先,这可能是一个愚蠢的想法,我试图验证线程中的名称,以便在线程的run方法中编写的代码中有一个数字时可以撤消用户所做的操作 if(!jTextField1.getText().isEmpty()) { for(int s=0;s<jTextField1.getText().length();s++) { if(Character.isDigit(jTextField1.getText().charAt(jTextF

好的,首先,这可能是一个愚蠢的想法,我试图验证线程中的名称,以便在线程的run方法中编写的代码中有一个数字时可以撤消用户所做的操作

  if(!jTextField1.getText().isEmpty())
    {
        for(int s=0;s<jTextField1.getText().length();s++)
        {
            if(Character.isDigit(jTextField1.getText().charAt(jTextField1.getText().length()-1)))
            {
                jTextField1.setText(new StringBuilder(jTextField1.getText()).deleteCharAt(jTextField1.getText().length()-1).toString() );
                showMessageDialog(null, "you cant add digts for names");
                jTextField1.setCaretPosition(jTextField1.getText().length());
            }
        }

    }
if(!jTextField1.getText().isEmpty())
{

对于(int s=0;s,由于您在单独的线程中运行此代码,因此在执行此代码时,jTextField1.getText()的内容可能会更改。例如,用户可能会在获得字符串长度后但在访问该位置的字符之前删除文本字段中的内容,从而导致索引越界异常


一种解决方案是只在这段代码之前将字符串从文本字段中取出一次,这样您就可以始终使用同一字符串,即使在代码执行时字符串可能会过时。您的setCaretPosition()不过,调用可能仍会引发异常。另一种可能是捕获索引越界异常,将其视为输入字段已更改的信号,然后重新执行整个操作。

在我回答时,您在id卡上添加了第二个问题。我建议您将id卡上的部分放在单独的问题中。
 int y=-1;
    if(!jTextField4.getText().equals(""))
    {
        if(jTextField4.getText().endsWith("v"))
        {




            if(jTextField4.getText().length()<11)
            {
                jLabel11.setText(Integer.toString(10-jTextField4.getText().length()));
                for(int x=0;x<jTextField4.getText().length()-1;x++)//testing if there are any letters in the middle
                {

                    if(!Character.isDigit(jTextField4.getText().charAt(x)))
                    {
                            y=x;
                    }

                    if(y!=-1)
                    {
                        showMessageDialog(null,jTextField4.getText().charAt(x) );
                        jTextField4.setText(new StringBuilder(jTextField4.getText()).deleteCharAt(y).toString());
                        jTextField4.setCaretPosition(x);
                        showMessageDialog(null, "this should be a number");
                    }

                        y=-1;
                }





            }
            else 
            {
                jTextField4.setText(new StringBuilder(jTextField4.getText()).deleteCharAt(jTextField4.getText().length()-2).toString());
                showMessageDialog(null, "no more than 10 chars");
                jTextField4.setCaretPosition(jTextField4.getDocument().getLength()-1);

            }

        }
        else if(!jTextField4.getText().endsWith("v"))
        {
            showMessageDialog(null, "it should be ended with v");
            jTextField4.setText(jTextField4.getText()+"v");
            jTextField4.setCaretPosition(jTextField4.getDocument().getLength()-1);
        }    



    }