【问题标题】:Scanner with GUI带图形用户界面的扫描仪
【发布时间】:2015-07-16 20:47:40
【问题描述】:

我想使用带有 java GUI 的单字母密码来制作程序密码。 但是当我点击按钮进行加密时,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();
} 

【问题讨论】:

  • 当它“崩溃”时,控制台上是否会打印一些结果或异常堆栈跟踪?
  • 请列出所有详细信息,实际的异常字符串,注意引发异常的行,以及您为扫描仪提供的输入.....
  • 请提供来自崩溃的错误消息详细信息/堆栈跟踪

标签: java swing awt jbutton


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-21
    • 2020-11-18
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2012-08-08
    相关资源
    最近更新 更多