Желаемая функциональность: прослушивание штрих-кодов с линейной разверткой (строка символов). Для каждой пары (всегда сканируемой в том же порядке, один длиннее другого), сравните два для равенства. Если они одинаковы, отобразите изображение. Если они разные, отобразите другое изображение. Повторяйте бесконечно, пока окно не будет закрыто.Сравнение двух строк и отображение изображения на основе результата
В моей голове есть два модуля для этой программы. Один из них постоянно зацикливается, принимает строки, сравнивает и отправляет результат (== or! =). Другой просто ждет результата, отображает соответствующее изображение и ждет следующего результата сравнения.
Код, который у меня есть, ниже, и я не могу окутать голову, как заставить repaint() работать должным образом в конце каждого цикла (как только результат сравнения известен). Я попытался вытолкнуть результат в класс MyFrame и перерисовать() там, и я попытался вызвать repaint() в цикле, но это тоже не сработает.
ScannerCompare Class работает сам по себе в консоли, но это не будет очень полезно для моей предполагаемой реализации. Если бы были только снимки System.out.println («ОК») и («NG»)!
Большое спасибо!
package BarcodeVerification;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class MyFrame extends JFrame {
private Image ngImage = null;
private Image okImage = null;
public MyFrame(String ngFilename, String okFilename) {
setTitle("MyWindow");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(800, 600);
this.ngImage = new ImageIcon(ngFilename).getImage();
this.okImage = new ImageIcon(okFilename).getImage();
Container container = getContentPane();
container.setLayout(new BorderLayout());
}
@Override
public void paint(Graphics g) {
super.paint(g);
if (m.getResult()) {
g.drawImage(okImage, 0, 0, okImage.getWidth(null), okImage.getHeight(null), null);
}
else {
g.drawImage(ngImage, 0, 0, ngImage.getWidth(null), ngImage.getHeight(null), null);
}
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
MyFrame frame = new MyFrame("src/NG.png","src/OK/png");
ScannerCompare m = new ScannerCompare();
frame.setVisible(true);
}
});
}
}
package BarcodeVerification;
import java.util.Scanner;
public class ScannerCompare {
public Boolean ok;
public String scan1, scan2, injectorExtract;
public ScannerCompare(){
Scanner in = new Scanner(System.in);
while (true) {
System.out.println("Scan the paper");
scan1 = in.nextLine();
System.out.println("Scan the Injector QR Code");
scan2 = in.nextLine();
injectorExtract = scan2.substring(19);
if (scan1.compareTo(injectorExtract) != 0) {
System.out.println("NG");
ok = false;
repaint();
} else {
System.out.println("OK");
ok = true;
repaint()
}
}
}
public boolean getResult(){
return ok;
}
}
Какое подключение 'ScannerCompare' к' MyFrame'? Как «ScannerCompare» влияет на любой экземпляр «MyFrame»? – MadProgrammer
Не переопределяйте 'paint' контейнеров верхнего уровня, таких как' JFrame', вместо этого начинайте с такого компонента, как 'JPanel', и вместо этого переопределите его как метод paintComponent. См. [This] (http://stackoverflow.com/questions/13734069/how-can-i-set-in-the-midst/13734319#13734319) по крайней мере по одной причине, почему вы не должны переопределять 'paint' of контейнер верхнего уровня – MadProgrammer
Возможно, вы также захотите посмотреть [Рабочие потоки и SwingWorker] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html) – MadProgrammer