我写了一个小的java应用程序。有一个带有3个滑块的GUI。它们显示了arduino传感器的3个加速度值。但是一切都应该脱机工作(文件中的值)。
File is looking like this:
10 10 10
11 12 12
15 11 11
...
如果我使用我的菜单并决定“从文件读取”,则actionlistener将启动ReadFromFile ...我的选定文件逐行读取。 System.out 工作正常。滑块应该像3个有效光束一样移动,但它们没有。
public void ReadFromFile(File file) {
System.out.print("\n Datei= " + file);
if(file.exists()){
try {
Scanner scn = new Scanner(file);
while(scn.hasNextLine()){
try {
System.out.print("\n x= " + Integer.parseInt(scn.next()));
System.out.print("\n y= " + Integer.parseInt(scn.next()));
System.out.print("\n z= " + Integer.parseInt(scn.next()));
x_slider.setValue(Integer.parseInt(scn.next()));
y_slider.setValue(Integer.parseInt(scn.next()));
z_slider.setValue(Integer.parseInt(scn.next()));
Thread.sleep(500);
} catch (InterruptedException e) {}
}
scn.close();
}
catch (FileNotFoundException e) {e.printStackTrace();}
}
}
班级的整个代码
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JSlider;
import com.fazecast.jSerialComm.*;
public class AccelerometerGUI extends Frame implements ActionListener{
private static final long serialVersionUID = 1L;
PortInitial portselect;
Kalibrieren cali;
static SerialPort chosenport = null;
static int[] werte = {0, 0, 0}; // format x_wert, y_wert, z_wert
static int[] minmax = {0, 0, 0, 1024, 1024, 1024}; // format x_min, y_min, z_min, x_max, y_max, z_max
Scanner s = new Scanner(System.in);
Component aComponent;
JSlider x_slider = new JSlider();
JSlider y_slider = new JSlider();
JSlider z_slider = new JSlider();
public static void main (String[] args)
{
@SuppressWarnings("unused")
AccelerometerGUI GUI = new AccelerometerGUI();
}
public AccelerometerGUI () {
JFrame window = new JFrame("Accelerometer GUI"); // Fenster mit Namen erstellen
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MenuBar DasMenu = new MenuBar(); // Menü erstellen
window.setMenuBar(DasMenu);
Menu File = new Menu("Datei"); // Menüpunkt Datei
DasMenu.add(File);
Menu Settings = new Menu("Einstellungen"); // Menüpunkt Einstellungen
DasMenu.add(Settings);
MenuItem Start = new MenuItem("Start"); // Unter-Menüpunkt Start
Start.addActionListener(this);
File.add(Start);
MenuItem WriteFile = new MenuItem("In Datei schreiben"); // Unter-Menüpunkt In Datei schreiben
WriteFile.addActionListener(this);
File.add(WriteFile);
MenuItem ReadFile = new MenuItem("Aus Datei lesen"); // Unter-Menüpunkt Aus Datei lesen
ReadFile.addActionListener(this);
File.add(ReadFile);
MenuItem Exit = new MenuItem("Beenden"); // Unter-Menüpunkt Beenden
Exit.addActionListener(this);
File.add(Exit);
MenuItem Sensorkali = new MenuItem("Sensor kalibrieren"); // Unter-Menüpunkt Sensor kalibrieren
Sensorkali.addActionListener(this);
Settings.add(Sensorkali);
Panel sliderpanel = new Panel(); // Panel für Slider erstellen
sliderpanel.setLayout(new GridLayout(3,1));
x_slider.setEnabled(true);
x_slider.setMajorTickSpacing(100);
x_slider.setMinorTickSpacing(10);
x_slider.setPaintTicks(true);
x_slider.setPaintLabels(true);
y_slider.setEnabled(true);
y_slider.setMajorTickSpacing(100);
y_slider.setMinorTickSpacing(10);
y_slider.setPaintTicks(true);
y_slider.setPaintLabels(true);
z_slider.setEnabled(true);
z_slider.setMajorTickSpacing(100);
z_slider.setMinorTickSpacing(10);
z_slider.setPaintTicks(true);
z_slider.setPaintLabels(true);
// Sliderpanel bestücken
sliderpanel.add(x_slider);
sliderpanel.add(y_slider);
sliderpanel.add(z_slider);
sliderpanel.setPreferredSize(new Dimension(500, 200));
window.setLayout(new GridLayout(1,1)); // Fenster-Layout erstellen
window.add(sliderpanel);
window.pack();
window.setVisible(true);
SetSliderMinMax();
//SelectPort();
//ReadData();
}
public void actionPerformed(ActionEvent e) {
String Befehl = e.getActionCommand();
/* MenüPunkt-Start */
if(Befehl.equals("Start")){
if(chosenport != null){ // Prüfung ob Port bereits ausgewählt
System.out.println("Startet");
SetSliderMinMax();
ReadData();
}
else{
NoPortSelected(); // Aufforderung Port auswählen
}
}
/* MenüPunkt-In Datei schreiben */
if(Befehl.equals("In Datei schreiben")){
if(chosenport != null){ // Prüfung ob Port bereits ausgewählt
System.out.println("In Datei schreiben");
//Create a file chooser
final JFileChooser fc = new JFileChooser();
//In response to a button click:
int returnVal = fc.showOpenDialog(aComponent);
System.out.println(aComponent);
System.out.println(returnVal);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would open the file.
System.out.println("Opening: " + file.getName());
WriteToFile(file);
} else {
System.out.println("Open command cancelled by user.");
}
}
else{
NoPortSelected(); // Aufforderung Port auswählen
}
}
/* MenüPunkt-Aus Datei lesen */
if(Befehl.equals("Aus Datei lesen")){
System.out.println("Aus Datei lesen");
//Create a file chooser
final JFileChooser fc = new JFileChooser();
//In response to a button click:
int returnVal = fc.showOpenDialog(aComponent);
System.out.println(aComponent);
System.out.println(returnVal);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
//This is where a real application would open the file.
System.out.println("Opening: " + file.getName());
ReadFromFile(file);
} else {
System.out.println("Open command cancelled by user.");
}
}
/* MenüPunkt-Beenden */
if(Befehl.equals("Beenden")){
System.out.println("Anwendung beendet");
System.exit(0);
}
/* MenüPunkt-Sensor kalibrieren */
if(Befehl.equals("Sensor kalibrieren")){
System.out.println("Sensor kalibrieren");
if(portselect != null) // Prüfung ob Port bereits ausgewählt wurde
{
if (cali == null){
cali = new Kalibrieren(this, "Sensor kalibrieren");
}
cali.setVisible(true);
System.out.println("Kalibrierte Werte: " + minmax[0] + " " + minmax[1] + " " + minmax[2] + " " + minmax[3] + " " + minmax[4] + " " + minmax[5]);
SetSliderMinMax(); // Slider MinMAx auf kalibrierte Werte aktualisieren
}
else{ // Es wurde noch kein Port ausgewählt - Warnung
NoPortSelected();
}
}
}
void SelectPort(){ portselect = new PortInitial(this, "Port wählen");
portselect.setVisible(true);
if (portselect.getResult())
{
chosenport = portselect.getThePort();
System.out.println("Ausgewählter Port: "+ chosenport.getSystemPortName());
}
else {
System.out.println("Port auswählen abgebrochen");
}
}
/* Methode: SetSliderMinMax() setzt das Minimum und Maximum der Slider */
void SetSliderMinMax() {
x_slider.setMinimum(minmax[0]);
y_slider.setMinimum(minmax[1]);
z_slider.setMinimum(minmax[2]);
x_slider.setMaximum(minmax[3]);
y_slider.setMaximum(minmax[4]);
z_slider.setMaximum(minmax[5]);
}
/* Methode: WriteToFile() Legt Werte in Datei ab */
public void WriteToFile(File file) {
if(file.exists()){
try {
Scanner scn = new Scanner(file);
while(scn.hasNextLine()){
try {
werte[0] = Integer.parseInt(scn.next());
werte[1] = Integer.parseInt(scn.next());
werte[2] = Integer.parseInt(scn.next());
Thread.sleep(500); // Wartezeit 500 Millisekunden
} catch (InterruptedException e) {}
Showdata();
}
scn.close();
}
catch (FileNotFoundException e) {e.printStackTrace();}
}
}
/* Methode: ReadFromFile() legt Werte-Input auf Datei */
public void ReadFromFile(File file) {
System.out.print("\n Datei= " + file);
if(file.exists()){
try {
Scanner scn = new Scanner(file);
while(scn.hasNextLine()){
try {
String x = scn.next();
String y = scn.next();
String z = scn.next();
System.out.print("\n x= " + Integer.parseInt(x));
System.out.print("\t y= " + Integer.parseInt(y));
System.out.print("\t z= " + Integer.parseInt(z));
x_slider.setValue(Integer.parseInt(x));
y_slider.setValue(Integer.parseInt(y));
z_slider.setValue(Integer.parseInt(z));
System.out.print("\n X= " + x_slider.getValue());
System.out.print("\t Y= " + y_slider.getValue());
System.out.print("\t Z= " + z_slider.getValue());
Thread.sleep(500); // Wartezeit 500 Millisekunden
} catch (InterruptedException e) {}
/*
System.out.print("\n x= " + werte[0]);
System.out.print("\t y= " + werte[1]);
System.out.print("\t z= " + werte[2]);
x_slider.setValue(werte[0]);
y_slider.setValue(werte[1]);
z_slider.setValue(werte[2]);
*/
//Showdata();
}
scn.close();
}
catch (FileNotFoundException e) {e.printStackTrace();}
}
}
/* Methode: ReadData() öffnet Port und liest Werte ein und stellt diese dar */
public void ReadData() {
chosenport = portselect.getThePort();
if(chosenport.openPort()){
System.out.println("Port erfolgreich geöffnet");
chosenport.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);
Scanner data = new Scanner(chosenport.getInputStream());
while(data.hasNextLine()){
try {
werte[0] = Integer.parseInt(data.next());
werte[1] = Integer.parseInt(data.next());
werte[2] = Integer.parseInt(data.next());
} catch(Exception ee){}
Showdata();
}
s.close();
data.close();
}
else {
PortSelectFail();
}
}
/* Methode: NoPortSelected() zeigt Popup mit Aufforderung Port zu wählen */
void NoPortSelected() {
JFrame alert = new JFrame();
JOptionPane.showMessageDialog(alert,"Es ist kein Port ausgewählt\n\nTipp: Settings > Port einstellen\n", "Warnung", JOptionPane.WARNING_MESSAGE);
}
/* Methode: PortSelectFail() zeigt Popup mit erneuten Aufforderung Port zu wählen */
static void PortSelectFail() {
JFrame alert = new JFrame();
JOptionPane.showMessageDialog(alert,"Port öffnen fehlgeschlagen\n\nTipp: Überprüfen Sie den Port und versuchen Sie es erneut\n", "Warnung", JOptionPane.WARNING_MESSAGE);
}
/* Methode: Showdata() Werte werden auf Slider und Konsole dargestellt */
public void Showdata() {
x_slider.setValue(werte[0]);
y_slider.setValue(werte[1]);
z_slider.setValue(werte[2]);
}
答案 0 :(得分:0)
确定你的JSliders把这个计时器和这些arraylists这样的
JSlider x_slider = new JSlider();
JSlider y_slider = new JSlider();
JSlider z_slider = new JSlider();
Timer timer;
ArrayList<String> xs = new ArrayList<String>();
ArrayList<String> ys = new ArrayList<String>();
ArrayList<String> zs = new ArrayList<String>();
然后为你的方法做这样的,原因是因为你使用Thread.sleep(500)并且弄乱了摆动Jframe,你必须使用一个计时器
public void ReadFromFile(File file) {
System.out.print("\n Datei= " + file);
if(file.exists()){
try {
final Scanner scn = new Scanner(file);
while(scn.hasNextLine()){
String x = scn.next();
String y = scn.next();
String z = scn.next();
xs.add(x);
ys.add(y);
zs.add(z);
}
scn.close();
}
catch (FileNotFoundException e) {e.printStackTrace();}
}
timer = new Timer(500, new ActionListener(){
int c = 0;
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
//System.out.print("\n x= " + Integer.parseInt(x));
// System.out.print("\t y= " + Integer.parseInt(y));
// System.out.print("\t z= " + Integer.parseInt(z));
x_slider.setValue(Integer.parseInt(xs.get(c)));
y_slider.setValue(Integer.parseInt(ys.get(c)));
z_slider.setValue(Integer.parseInt(zs.get(c)));
c++;
if(c == xs.size()){
timer.stop();
}
}
});
timer.start();
}