2016-04-07 10 views
0

başarısız olursa bir 'tarih' doğrulamak burada Java - koşulu

Ben bir Java istemci var .. Biliyorum bu soru ben gitmek burada ama ne kadar temel tahmin edebilirsiniz yazma gibi bir program akışının başlangıcına geri dön Kullanıcı tarafından girilen girdi ve geçerliyse başka yerlerde de iletir. Giriş iletişim kutusunu göstermek için JOptionPane kullanıyorum.

Temelde kullanıcı tarafından geçersiz bir tarih biçimi girildiğinde programım çıkar ve kullanıcının programı yeniden başlatması gerekir. Bunun yerine Pop-up InputDialog kutu yine bu kod satırı geçiş kontrolü için en iyi yol olacağını nasıl bir mesaj görüntülenir "Girilen 'Geçersiz Tarih. Sonra gösterilmesini istedi?

import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.util.Properties; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 

import javax.swing.JOptionPane; 

public class Client { 

    static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 

    public static void main(String[] args) throws IOException, ParseException { 

    Properties prop = new Properties(); 
    InputStream IP = null; 
    // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 

    try { 

     IP = new FileInputStream("Client.properties"); 
     prop.load(IP); 
     String host = prop.getProperty("ServerIP"); 
     String port = prop.getProperty("Port"); 
     int port1 = Integer.parseInt(port); 

     Socket s = new Socket(host, port1); 
     String reportDate = JOptionPane.showInputDialog("Enter Date:"); 
     PrintWriter out = new PrintWriter(s.getOutputStream(), true); 

     /** 
     * User Input Validation 
     */ 
     if (reportDate.matches("^((19|20)\\d\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$")) { 

     out.println(reportDate); 
     s.close(); 

     System.exit(0); 
     } //if 
     else { 
     String Error = "INCORRECT date format entered!"; 
     JOptionPane.showMessageDialog(null, Error); 
     } //else 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } finally { 
     if (IP != null) { 
     try { 
      IP.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     } 
    } 
    } 
} 
+0

doğrudan ilişkili, ancak deneyin kullanmayın Değil giriş ve soketinizi oluşturmak için kaynaklar. “Sonunda” kalıbını (ve şu anda soketi kapatmayacağınız durumlarda) kaldırır. –

+1

Çıkış koşulunun doğru biçimlendirilmiş bir Tarih olduğu bir döngü oluşturun. – marcellorvalle

+1

Do-while döngülerinin nasıl kullanıldığını biliyor musunuz? Bunu açıklamak için en iyi ben değilim, ama kesinlikle senin problemini çözeceklerdi. –

cevap

4

siz kullandıkça . başarı durumunda System.exit(0), sadece

+3

... 'return' (veya 'break', bir kez bir döngüye sahip olduğunuzda) 'System.exit (0) 'dan daha iyi olabilir. –

0

while (true) { } ile sonsuz bir döngü içinde kodunuzu sarın böyle bir şey (yalancı kod) yapın: Bunun doğrudan aradığınız yanıtı ilişkili değildir biliyorum

String reportDate = "badDate"; 
while (!reportDate.matches("^((19|20)\\d\\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])$")) 
{ 
//do all the things that are currently in your if statement 
} 
0

Aslında doğrudan Sorunuza nswer bir döngü kullanın ve beklediğiniz gibi çalışacaktır. Ancak, tarih seçmek için bunu yapmak isterseniz, Java SwingX'u kullanmayı düşünün.

SwingX kütüphane enter image description here

0

ben bu almaya yardımcı olabilir düşünüyorum mükemmel tarih seçici dahil iyi bileşenlerin bir yeri vardır Date geçerli:

Date reportDate; 
do { 
    try { 
     String str = JOptionPane.showInputDialog("Enter Date:"); 
     reportDate = new SimpleDateFormat("yyyy-MM-dd").parse(str); 
     break;// loop break when got a valid date e.g. 2016-09-16 
    } catch (Exception mistake) { 
     System.err.println("Invalid input: " + mistake); 
    } 
} while (true);