For a personal project I am working on a way to recognize a String through a JOptionPane. Now my goal is to also have it recognized when I put it in the console as well and then close the JOptionPane. For achieving this I was trying to implement a Thread which was supposed to work parallel. So when the JOptionPane would open also the console should be able to get commands and react to them using a Scanner. However it doesn’t work at all. The Thread is not working parallel to the program but it seems it isn’t reacting.
It doesn’t matter if I put the Scanner for the console commands into the Thread or the JOptionPane itself. Also the order of what I call first (either the Thread or the Scanner) doesn’t matter at all. The result is always the same that never the JOptionPane is showing but instead the program only waits for the input into the console. Only after that the JOptionPane will show up but all input there is ignored and overwritten by the former input into the console.
In the meantime I tried to implement several different attempts on how to solve this but none of them works. I feel like I am missing something essential here and since I don’t have anyone to ask I hope you can help me instead. Since I am out of ideas I need the help of someone who has more experience then I do. Please help me how to fix this.
Here are the code examples I have tried so far:
First try:
import javax.swing.JOptionPane;
public class NameConsole extends Thread {
public String answer = "";
public void run(){
answer = (String)JOptionPane.showInputDialog(
null,
"Please chose the reference. n",
"choice of name",
JOptionPane.PLAIN_MESSAGE,
null,
null,
"");
}
}
public class SelectName {
public static String setManualname() {
try (Scanner sc = new Scanner(System.in)) {
NameConsole nameconsole = new NameConsole();
String name = "";
while (sc.nextLine().equals("")) {
nameconsole.run();
if (!nameconsole.answer.equals(""))
name = nameconsole.answer;
else if (sc.nextLine() != null)
name = sc.nextLine();
}
}
}
}
Second try:
package engine.managers.collectors.identifier.nameconsole;
import javax.swing.JOptionPane;
public class NameConsole extends Thread {
public String answer = "";
public void run(){
answer = (String)JOptionPane.showInputDialog(
null,
"Please chose the reference. n",
"choice of name",
JOptionPane.PLAIN_MESSAGE,
null,
null,
"");
}
}
public class SelectName {
public static String setManualname() {
try (Scanner sc = new Scanner(System.in)) {
String name = sc.nextLine();
NameConsole nameconsole = new NameConsole();
nameconsole.run();
while (name.equals("")) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!nameconsole.answer.equals(""))
name = nameconsole.answer;
else if (name != null)
break;
}
}
}
}
Third try:
package engine.managers.collectors.identifier.nameconsole;
import java.util.Scanner;
public class NameConsole extends Thread {
Scanner sc = new Scanner(System.in);
public String answer = "";
public void run(){
answer = sc.nextLine();
}
}
public class SelectName {
public static String setManualname() {
String name = "";
String panelline = (String)JOptionPane.showInputDialog(
null,
"Please chose the reference. n",
"choice of name",
JOptionPane.PLAIN_MESSAGE,
null,
null,
"");
NameConsole nameconsole = new NameConsole();
nameconsole.run();
while (name.equals("")) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (panelline != null)
name = panelline;
else if (!nameconsole.answer.equals(""))
name = nameconsole.answer;
}
}
}