In another topic I already asked about how to make it that my Java program can recognize a string input parallel either from the console or from a JOptionPane (see here for reference: Parallel string recognition in console and JOptionPane). The comments there told me to use a Thread.
Sadly this went nowhere and after several tries I am completely lost on what to do anymore.
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.
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 mess. Here are the code examples I have tried:
First 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)) {
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;
}
}
}