我想使用带有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();
}
答案 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();
}