带GUI的扫描仪

时间:2015-05-06 15:38:54

标签: java swing awt jbutton

我想使用带有java GUI的monoaphabetic密码制作一个程序密码。 但是,当我单击按钮进行加密时,textfield2将不会显示结果并使程序崩溃。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   Scanner sc = new Scanner(System.in);
   String en =  doEncryption(sc.next().toLowerCase());
   jTextField1.setT![enter image description here][1]ext(en);
   jTextField2.setText(doDecryption(en));
   sc.close();
} 

1 个答案:

答案 0 :(得分:1)

不要将事件驱动的GUI与Scanner sc = new Scanner(System.in);混合使用。说真的,不要这样做。这就是GUI的用途,这样做而不考虑线程将使您的程序无用。理解sc.next()是一个阻塞调用,一个阻塞当前线程直到它完成的调用,并且在Swing事件线程上进行此调用将阻止GUI,冻结它。但是,为什么要通过GUI,通过一个JTextField或JTextArea来获取用户输入呢?

所以不要这样:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   Scanner sc = new Scanner(System.in);
   String en =  doEncryption(sc.next().toLowerCase());
   jTextField1.setText(en);
   jTextField2.setText(doDecryption(en));
   sc.close();
}

考虑做:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   // Scanner sc = new Scanner(System.in);

   // assuming entryTextArea is a JTextArea for user input:
   String en =  entryTextArea.getText().toLowerCase());
   jTextField1.setText(en);
   jTextField2.setText(doDecryption(en));
   // sc.close();
}