I need help with the command save() and begin/endRecord()

Greetings,

I have a problem, where Processing won’t save a pdf/jpg-file, after I especially asked it for this.

I at first used the both commands save() and begin/endRecord() in my main sketch with no problems, then moved them into a class and now they won’t be executed, but everything else in the class executes as whished.
This class opens a second window, where something should be drawn and after that saved.

(The printlns were used for diagnosing)

Problematic code part:

class ChildApplet extends PApplet {
  //JFrame frame;

  public ChildApplet() {
    super();
    PApplet.runSketch(new String[]{this.getClass().getName()}, this);
  }

  void settings() {
    size(794, 1123);
    smooth();
  }
  void setup() { 
    surface.setTitle("Rechnungssicherung (Dieses Fenster einfach minimieren)");
    Logo = loadImage("images/Getraenkemarkt_Logo_klein.jpg");
    frameRate(60);
  }

  void draw() {
    background(255);
    if(rechnung_erstellen == true){
      println("Helo");
      
      for(int s = 0; s < 2; s++){
        println("h");
        if(s == 0){
          println("Speicherst du was ?");
          beginRecord(PDF, "rechnungen/RNr_" + aktuelle_Rechnungsnummer + "__" + day() + "_" + month() + "_" + year() +".pdf");
        }
        
        image(Logo, 25, 40);
      
        textAlign(CORNER);                                                                          //Rechnungs-Bereich
        fill(0);
        rechnungssumme = 0;
        for(int i = 0; Rechnung[3][i] != 0; i++){
          text((i + 1) + ".", 110, i * 25 + 400);
          text(Artikel_name[0][i], 135, i * 25 + 400);
          text(round(Rechnung[0][i]), 315, i * 25 + 400);
          text(round(Rechnung[1][i]), 360, i * 25 + 400);
          text(Rechnung[2][i] + "€", 405, i * 25 + 400);
          text(Rechnung[3][i] + "€", 490, i * 25 + 400);
        
          rechnungssumme = rechnungssumme + Rechnung[3][i];
        }
        rechnungssumme = rechnungssumme * 100;                          //Konvertieren d. Rechnungssumme, um zu kleine Zahlen zu vermeiden
        rechnungssumme = round(rechnungssumme);
        int converter = int(rechnungssumme);
        rechnungssumme = converter;
        rechnungssumme = rechnungssumme / 100;
      
        line(100, 705, 550, 705);
        line(100, 377.5, 550, 377.5);
        text(rechnungssumme + "€", 490, 720);                           //Beschriftung Rechnungsbereich
        text("Gesamt:", 115, 720);
        text("Nr.:", 105, 370);
        text("Getränk:", 135, 370);
        text("Flas.:", 315, 370);
        text("Kast.:", 360, 370);
        text("Pfand:", 405, 370);
        text("Zwsumme:", 490, 370);
      
        textSize(20);
        text("Rechnung:", 50, 320);
        strokeWeight(1.5);
        line(50, 325, 150, 325);
        strokeWeight(1);
        textSize(12);
      
        fill(220);
        if(s == 0){
          rect(610, 347.5, 210, 90);
        }else{
          rect(715, 390, 210, 90);
        }
        fill(0);
        
        text("Rechnungsnummer: " + aktuelle_Rechnungsnummer, 620, 370);
        text("Datum: " + day() + "." + month() + "." + year(), 620, 395);
        text("Zeit: " + hour() + ":" + minute(), 620, 420);
        if(s == 1){
          save("temp/temp_Rechnung.jpg");
        }else{
          endRecord();
          println("Helo2");
        }
      }
    }
  }
}

Rest of the code:

import controlP5.*;

import processing.pdf.*;
import java.io.*;
import java.io.FileInputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;

import java.io.FileInputStream;
import java.io.IOException;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;

ChildApplet child;

boolean klicked = false;
int mWheelGlobal = 0;
Table csv;

int position_csv = 0;
float auswahl_preis = 0;
float auswahl_pfand = 0;
String auswahl_name = "--";
boolean auswahl = false;

int anzahl_flaschen = 0;
int anzahl_kaesten = 0;
int anzahl_kaesten_leer = 0;
float verschiebung = 0;
float pfand_flaschen = 0;
float pfand_kaesten = 0;
float pfand_kaesten_leer = 0;
float zwischensumme = 0;

float [][] Rechnung = new float[4][20];                      //Werte d. Rechnungspositionen
String [][] Artikel_name = new String[1][20];                //Namen d. Rechnungspositionen
int rechnungsposition = 0;
float gesamtpfand_zw = 0;
Table csv_Rechnungsnummer;
Table csv_Rechnungsnummer_neu;
Table csv_Rechnungsnummer_erst;
float rechnungssumme = 0;

long aktuelle_Rechnungsnummer;

boolean fertig = false;
boolean rechnung_erstellen = false;

PImage Logo;
ControlP5 ddm;                                               //ddm = Dropdown-Menü
float druck_ausw = 0;

Table Beleg_Drucker;

void settings() {
  size(1000, 800);
}

void setup(){
  frameRate(60);
  
  child = new ChildApplet();
  
  surface.setTitle("Flapfa v0.6.8");
  //surface.setResizable(true);
  background(255);
  rectMode(CENTER);
  csvToTable();
  Logo = loadImage("images/Getraenkemarkt_Logo_klein.jpg");
  
  println(new File(dataPath("") + "/Beleg_Drucker.csv").isFile()); 
  if(new File(dataPath("") + "/Beleg_Drucker.csv").isFile() == false) {         //Erstellen der Drucker-Datei, falls nicht vorhanden
    drucker_datei_sicherung(3);
  }
  if(new File(dataPath("") + "/aktuelle_Rechnungsnummer.csv").isFile() == false) {         //Erstellen der Rechnungsnummer-Datei, falls nicht vorhanden
    csv_Rechnungsnummer_erst = new Table();                                                  //Rechnungsnummer wird um 1 erhöht
    csv_Rechnungsnummer_erst.addColumn("aktuelle Rechnungsnummer");
    TableRow newRow = csv_Rechnungsnummer_erst.addRow();
    newRow.setLong("aktuelle Rechnungsnummer", 1);
    saveTable(csv_Rechnungsnummer_erst, "data/aktuelle_Rechnungsnummer.csv");
  }
  
  Beleg_Drucker = loadTable("data/Beleg_Drucker.csv", "header, csv");
  
  druck_ausw = Beleg_Drucker.getInt(2, 0);             //Beleg-Drucker wird ins System geladen
  
  dropdown_zeichnen();                                 //ddm-Methode wird aufgerufen

}




void draw(){
  //println(width);
  //println(height);
  textAlign(CENTER);
  fill(0);
  stroke(0);
  background(255);
  //println(mouseX);
  //println(mouseY);
  //println(mousePressed);
  
  
  mouseWheel();
  for(int i = 0; i < 10; i++){
    line(50, i * 30 + 450, 450, i * 30 + 450);
  }
  for(int i = 0; i < 10; i++){                                          //Getränke-Auswahl-Bereich
    if(i + mWheelGlobal < csv.getRowCount()){
      textAlign(CORNER);
      fill(0);
      text(csv.getString(i + mWheelGlobal, 0), 50, i*30 + 470);
      text(csv.getString(i + mWheelGlobal, 1)+ "€", 250, i*30 + 470);
      text(csv.getString(i + mWheelGlobal, 2) + "€", 300, i*30 + 470);
      uebernahme_zeich_pruef(423, 467.5+30*i, 423, 462.5+30*i, 428, 465+30*i, 425, 465+30*i, 20, 20);
      if(klicked == true){
        position_csv = i + mWheelGlobal;
        println("Position in der CSV-Datei: " + position_csv);
        auswahl = true;
      }
      klicked = false;
    }
  }
  text("Getränk:", 50, 440);
  text("(pro Flasche)", 255, 422.5);
  text("Preis:", 250, 440);
  text("Pfand:", 300, 440);
  
  textAlign(CENTER);
  
  /*knopf_zeich_pruef(250, 200, 54, 54, "Hallo", true, 0, 12);            //Test-Knopf
  if(klicked == true){
    klicked = false;
  }*/
  
  fill(0, 0, 200);                                        //Logo
  textSize(90);
  text("Flapfa", 250, 200);
  stroke(0);
  strokeWeight(5);
  noFill();
  rect(250, 172.5, 300, 100, 0, 90, 90, 90);
  textSize(12);
  strokeWeight(1);
  
  fill(220);
  rect(725, 600, 450, 350);                               //Auswahl- und Informationsbereich
  line(500, 585, 950, 585);
  fill(0);
  textAlign(CORNER);
  text("Name des Getränks:", 515, 450);
  text("Preis:", 515, 480);
  text("Pfand pro Flasche:", 515, 510);
  text("Pfand pro Kasten:", 515, 540);
  text("Flaschen pro Kasten:", 515, 570);
  if(auswahl == true){
    text(csv.getString(position_csv, 0), 650, 450);
    text(csv.getString(position_csv, 1) + "€", 650, 480);
    text(csv.getString(position_csv, 2) + "€", 650, 510);
    text(csv.getFloat(position_csv, 2) * csv.getFloat(position_csv, 3) + csv.getFloat(position_csv, 4) + "€" + "    (Kastenpfand: " + csv.getFloat(position_csv, 4) + "€)", 650, 540);
    text(csv.getInt(position_csv, 3) + " Stück", 650, 570);
    
    text("Anzahl der Flaschen:", 515, 605);                  //Erhöhen/Verringern d. (losen) Flaschenanzahl
    text(anzahl_flaschen, 650, 605);
    knopf_zeich_pruef(685, 600, 20, 20, "+", true, 0, 12);
    if(klicked == true){
      anzahl_flaschen++;
      println("Anzahl_Flaschen: " + anzahl_flaschen);
      klicked = false;
    }
    knopf_zeich_pruef(715, 600, 20, 20, "-", true, 0, 12);
    if(klicked == true){
      anzahl_flaschen--;
      println("Anzahl_Flaschen: " + anzahl_flaschen);
      klicked = false;
    }
    if(anzahl_flaschen < 0){
      anzahl_flaschen = 0;
    }else if(anzahl_flaschen > 60){
      anzahl_flaschen = 30;
    }
    
    textAlign(CORNER);
    fill(0);
    text("Anzahl der Kästen:", 515, 632.5);                     //Erhöhen/Verringern d. Kastenenanzahl d. vollen Kästen
    if(csv.getFloat(position_csv, 4) > 0){
      text("(voll)", 890, 632.5);
    }
    text(anzahl_kaesten, 650, 632.5);
    knopf_zeich_pruef(685, 627.5, 20, 20, "+", true, 0, 12);
    if(klicked == true){
      anzahl_kaesten++;
      println("Anzahl Kästen: " + anzahl_kaesten);
      klicked = false;
    }
    knopf_zeich_pruef(715, 627.5, 20, 20, "-", true, 0, 12);
    if(klicked == true){
      anzahl_kaesten--;
      println("Anzahl Kästen: " + anzahl_kaesten);
      klicked = false;
    }
    if(anzahl_kaesten < 0){
      anzahl_kaesten = 0;
    }else if(anzahl_kaesten > 10){
      anzahl_kaesten = 10;
    }
    
    if(csv.getFloat(position_csv, 4) > 0){
      verschiebung = 27.5;
      textAlign(CORNER);
      fill(0);
      text("Anzahl der Kästen:", 515, 632.5 + verschiebung);                     //Erhöhen/Verringern d. Kastenenanzahl d. leeren Kästen
      text("(leer)", 890, 632.5 + verschiebung);
      text(anzahl_kaesten_leer, 650, 632.5 + verschiebung);
      knopf_zeich_pruef(685, 627.5 + verschiebung, 20, 20, "+", true, 0, 12);
      if(klicked == true){
        anzahl_kaesten_leer++;
        println("Anzahl Kästen: " + anzahl_kaesten_leer);
        klicked = false;
      }
      knopf_zeich_pruef(715, 627.5 + verschiebung, 20, 20, "-", true, 0, 12);
      if(klicked == true){
        anzahl_kaesten_leer--;
        println("Anzahl Kästen: " + anzahl_kaesten_leer);
        klicked = false;
      }
      if(anzahl_kaesten_leer < 0){
        anzahl_kaesten_leer = 0;
      }else if(anzahl_kaesten_leer > 10){
        anzahl_kaesten_leer = 10;
      }
    }else{
      verschiebung = 0;
    }
    
    textAlign(CORNER);                                        //Berechnung der Zwischensummen
    fill(0);
    line(500, 645 + verschiebung, 950, 645 + verschiebung);
    line(500, 648 + verschiebung, 950, 648 + verschiebung);
    
    pfand_flaschen = csv.getFloat(position_csv, 2) * anzahl_flaschen;
    
    pfand_flaschen = pfand_flaschen * 100;                        //Konvertieren d. Flaschenpfand-Zwischensumme, um zu kleine Zahlen zu vermeiden
    pfand_flaschen = round(pfand_flaschen);
    //println(pfand_flaschen);
    int converter = int(pfand_flaschen);
    pfand_flaschen = converter;
    pfand_flaschen = pfand_flaschen / 100;
    
    pfand_kaesten = ((csv.getFloat(position_csv, 2) * csv.getFloat(position_csv, 3)) * anzahl_kaesten + csv.getFloat(position_csv, 4) * anzahl_kaesten);
    
    pfand_kaesten = pfand_kaesten * 100;                          //Konvertieren d. Kaestenpfand-Zwischensumme, um zu kleine Zahlen zu vermeiden
    pfand_kaesten = round(pfand_kaesten);
    //println(pfand_kaesten);
    converter = int(pfand_kaesten);
    pfand_kaesten = converter;
    pfand_kaesten = pfand_kaesten / 100;
    
    text("Pfand: " + pfand_flaschen + "€", 750, 605);
    text("Pfand: " + pfand_kaesten + "€", 750, 632.5);
    if(csv.getFloat(position_csv, 4) > 0){
      
      pfand_kaesten_leer = csv.getFloat(position_csv, 4) * anzahl_kaesten_leer;
      
      text("Pfand: " + pfand_kaesten_leer + "€", 750, 632.5 + verschiebung);
    }
    
    gesamtpfand_zw = (csv.getFloat(position_csv, 2) * anzahl_flaschen) + ((csv.getFloat(position_csv, 2) * csv.getFloat(position_csv, 3)) * anzahl_kaesten + csv.getFloat(position_csv, 4) * anzahl_kaesten + csv.getFloat(position_csv, 4) * anzahl_kaesten_leer);
    
    gesamtpfand_zw = gesamtpfand_zw * 100;                        //Konvertieren d. Gesamtpfand-Zwischensumme, um zu kleine Zahlen zu vermeiden
    gesamtpfand_zw = round(gesamtpfand_zw);
    //println(gesamtpfand_zw);
    converter = int(gesamtpfand_zw);
    gesamtpfand_zw = converter;
    gesamtpfand_zw = gesamtpfand_zw / 100;
    
    text("Zwischensumme:", 515, 670 + verschiebung);
    zwischensumme = (csv.getFloat(position_csv, 1) * anzahl_flaschen + csv.getFloat(position_csv, 2) * anzahl_flaschen) + (csv.getFloat(position_csv, 1) * csv.getFloat(position_csv, 3) + csv.getFloat(position_csv, 2) * csv.getFloat(position_csv, 3)) * anzahl_kaesten + csv.getFloat(position_csv, 4) * anzahl_kaesten + (csv.getFloat(position_csv, 4) * anzahl_kaesten_leer);
    
    zwischensumme = zwischensumme * 100;                          //Konvertieren d. Zwischensumme, um zu kleine Zahlen zu vermeiden
    zwischensumme = round(zwischensumme);
    converter = int(zwischensumme);
    zwischensumme = converter;
    zwischensumme = zwischensumme / 100;
    text(zwischensumme + "€", 890, 670 + verschiebung);
    
    
    if(anzahl_flaschen > 0 || (anzahl_flaschen > 0 && anzahl_kaesten_leer > 0) || anzahl_kaesten > 0 && (anzahl_kaesten > 0 && anzahl_kaesten_leer == 0)){   //"Regeln" fürs hinzufügen von Rechnungspositionen
      knopf_zeich_pruef(725, 700 + verschiebung, 450, 30, "Zu Rechnung hinzufügen", true, 0, 12);
      if(klicked == true){
        
        Artikel_name[0][rechnungsposition] = csv.getString(position_csv, 0);                  //Speichern d. Rechnungpositionsdaten
        Rechnung[0][rechnungsposition] = anzahl_flaschen;
        Rechnung[1][rechnungsposition] = anzahl_kaesten;
        Rechnung[2][rechnungsposition] = gesamtpfand_zw;
        Rechnung[3][rechnungsposition] = zwischensumme;
        
        zwischensumme = 0;
        gesamtpfand_zw = 0;
        anzahl_kaesten = 0;
        anzahl_flaschen = 0;
        anzahl_kaesten_leer = 0;
        klicked = false; 
        rechnungsposition++;
      }
    }
  }
  
  textAlign(CORNER);                                                                          //Rechnungs-Bereich
  fill(220);                                              
  rect(725, 200, 450, 350);
  line(500, 355, 950, 355);
  fill(0);
  rechnungssumme = 0;
  for(int i = 0; Rechnung[3][i] != 0; i++){
    text((i + 1) + ".", 510, i * 25 + 50);
    text(Artikel_name[0][i], 535, i * 25 + 50);
    text(round(Rechnung[0][i]), 715, i * 25 + 50);
    text(round(Rechnung[1][i]), 760, i * 25 + 50);
    text(Rechnung[2][i] + "€", 805, i * 25 + 50);
    text(Rechnung[3][i] + "€", 890, i * 25 + 50);
    
    rechnungssumme = rechnungssumme + Rechnung[3][i];
  }
  rechnungssumme = rechnungssumme * 100;                          //Konvertieren d. Rechnungssumme, um zu kleine Zahlen zu vermeiden
  rechnungssumme = round(rechnungssumme);
  int converter = int(rechnungssumme);
  rechnungssumme = converter;
  rechnungssumme = rechnungssumme / 100;
  
  text(rechnungssumme + "€", 890, 370);                           //Beschriftung Rechnungsbereich
  text("Gesamt:", 515, 370);
  text("Nr.:", 505, 20);
  text("Getränk:", 535, 20);
  text("Flas.:", 715, 20);
  text("Kast.:", 760, 20);
  text("Pfand:", 805, 20);
  text("Zwsumme:", 890, 20);
  csv_Rechnungsnummer = loadTable("data/aktuelle_Rechnungsnummer.csv", "header, csv");
  aktuelle_Rechnungsnummer = csv_Rechnungsnummer.getLong(0,0);
      
  rechnung_erstellen = false;
  
  if(rechnungsposition > 0){
    if(fertig == true){
      text("Rechnung: " + (csv_Rechnungsnummer.getLong(0, 0) - 1), 620, 392.5);
    }else{
      text("Rechnung: " + csv_Rechnungsnummer.getLong(0, 0), 620, 392.5);
    }
    if(fertig == true){
      knopf_zeich_pruef(550, 387.5, 100, 25, "Neue Rechnung", true, 0, 12);
      if(klicked == true){
        neue_Rechnung();
        klicked = false;
        fertig = false;
      }
      knopf_zeich_pruef(900, 387.5, 100, 25, "Drucken", true, 0, 12);
      if(klicked == true){
        rechnung_drucken();
        klicked = false;
      }
    }
    if(fertig == false){
      knopf_zeich_pruef(550, 387.5, 100, 25, "Abbrechen", true, 0, 12);
      if(klicked == true){
        rechnungsvorgang_abbrechen();
        klicked = false;
      }
      fill(0);
      knopf_zeich_pruef(900, 387.5, 100, 25, "Fertig", true, 0, 12);
      if(klicked == true){
        rechnung_erstellen = true;
        rechnungsvorgang_beenden();
        klicked = false;
      }
    }
  }
}




void controlEvent(ControlEvent theEvent) {
  if (theEvent.isController()) {
    druck_ausw = theEvent.getValue();
    int druck_ausw2 = (int) druck_ausw;
    drucker_datei_sicherung(druck_ausw2);
  }
}






//Klassen Bereich:








class ChildApplet extends PApplet {
  //JFrame frame;

  public ChildApplet() {
    super();
    PApplet.runSketch(new String[]{this.getClass().getName()}, this);
  }

  void settings() {
    size(794, 1123);
    smooth();
  }
  void setup() { 
    surface.setTitle("Rechnungssicherung (Dieses Fenster einfach minimieren)");
    Logo = loadImage("images/Getraenkemarkt_Logo_klein.jpg");
    frameRate(60);
  }

  void draw() {
    background(255);
    if(rechnung_erstellen == true){
      println("Helo");
      
      for(int s = 0; s < 2; s++){
        println("h");
        if(s == 0){
          println("Speicherst du was ?");
          beginRecord(PDF, "rechnungen/RNr_" + aktuelle_Rechnungsnummer + "__" + day() + "_" + month() + "_" + year() +".pdf");
        }
        
        image(Logo, 25, 40);
      
        textAlign(CORNER);                                                                          //Rechnungs-Bereich
        fill(0);
        rechnungssumme = 0;
        for(int i = 0; Rechnung[3][i] != 0; i++){
          text((i + 1) + ".", 110, i * 25 + 400);
          text(Artikel_name[0][i], 135, i * 25 + 400);
          text(round(Rechnung[0][i]), 315, i * 25 + 400);
          text(round(Rechnung[1][i]), 360, i * 25 + 400);
          text(Rechnung[2][i] + "€", 405, i * 25 + 400);
          text(Rechnung[3][i] + "€", 490, i * 25 + 400);
        
          rechnungssumme = rechnungssumme + Rechnung[3][i];
        }
        rechnungssumme = rechnungssumme * 100;                          //Konvertieren d. Rechnungssumme, um zu kleine Zahlen zu vermeiden
        rechnungssumme = round(rechnungssumme);
        int converter = int(rechnungssumme);
        rechnungssumme = converter;
        rechnungssumme = rechnungssumme / 100;
      
        line(100, 705, 550, 705);
        line(100, 377.5, 550, 377.5);
        text(rechnungssumme + "€", 490, 720);                           //Beschriftung Rechnungsbereich
        text("Gesamt:", 115, 720);
        text("Nr.:", 105, 370);
        text("Getränk:", 135, 370);
        text("Flas.:", 315, 370);
        text("Kast.:", 360, 370);
        text("Pfand:", 405, 370);
        text("Zwsumme:", 490, 370);
      
        textSize(20);
        text("Rechnung:", 50, 320);
        strokeWeight(1.5);
        line(50, 325, 150, 325);
        strokeWeight(1);
        textSize(12);
      
        fill(220);
        if(s == 0){
          rect(610, 347.5, 210, 90);
        }else{
          rect(715, 390, 210, 90);
        }
        fill(0);
        
        text("Rechnungsnummer: " + aktuelle_Rechnungsnummer, 620, 370);
        text("Datum: " + day() + "." + month() + "." + year(), 620, 395);
        text("Zeit: " + hour() + ":" + minute(), 620, 420);
        if(s == 1){
          save("temp/temp_Rechnung.jpg");
        }else{
          endRecord();
          println("Helo2");
        }
      }
    }
  }
}
















//Methoden Bereich:






public void dropdown_zeichnen(){                                                               //Methode zum Erstellen des Dropdown-Menüs
  PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
  pras.add(new Copies(1));
  PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras);
  
  String[] printers = new String[pss.length];
  
  for(int i = 0; i < pss.length; i++){
    String zwischensp = " " + pss[i];
    String[] zwischenSpAr = split(zwischensp, " : ");
    printers[i] = zwischenSpAr[1];
  }
  
  ddm = new ControlP5(this);
  ddm.addScrollableList("Drucker")
     .setPosition(0, 0)
     .setSize(200, 200)
     .setBarHeight(20)
     .setItemHeight(20)
     .addItems(printers)
     .setColorBackground(color(60))
     .setColorActive(color(0, 0, 200))
     .setValue(druck_ausw)
     ;
}



public void knopf_zeich_pruef(float x, float y, float b, float h, String beschriftung, boolean rahmen_fuellung, int shape, int text_groesse){                        //Methode zum Erstellen und Überprüfen des Gedrücktseins von Knöpfen
  rectMode(CENTER);
  fill(255);
  if(mousePressed){
    if(mouseX > x - 0.5 * b && mouseX < x + 0.5 * b && mouseY > y - 0.5 * h && mouseY < y + 0.5 * h){
      fill(200);
      klicked = true;
    }
    delay(25);
  }
  if(rahmen_fuellung == false){
    noFill();
    noStroke();
  }
  if(shape == 0){
    rect(x, y, b, h);
  }else if(shape == 1){
    float x1 = x+0.5*b;
    float y1 = y+0.25*h;
    triangle(x1, y1, x1-0.5*b, y1-h, x1-b, y1);
  }
  textAlign(CENTER);
  fill(0);
  textSize(text_groesse);
  text(beschriftung, x, y+5);
  fill(255);
  stroke(0);
  textSize(12);
}




void mouseWheel(MouseEvent event) {                      //Methode zum Auslesen d. Mausrads
  mWheelGlobal = mWheelGlobal + event.getCount();
  if(mWheelGlobal > csv.getRowCount()-1){
    mWheelGlobal = 0;
  }else if(mWheelGlobal < 0){
    mWheelGlobal = csv.getRowCount()-1; 
  }
  println("Mausrad-Wert: " + mWheelGlobal);
}



void csvToTable(){                                      //Methode zum Einlesen d. CSV-Datei
  csv = loadTable("data/Sortiment.csv", "header, csv");
  println(csv.getRowCount());
  println(csv.getColumnCount());
}




public void uebernahme_zeich_pruef(float x1, float y1, float x2, float y2, float x3, float y3, float xh, float yh, float b, float h){      //Methode zum erstellen d. Übernahme-Knöpfe
  fill(255);
  if(mousePressed){
    if(mouseX > xh - 0.5 * b && mouseX < xh + 0.5 * b && mouseY > yh - 0.5 * h && mouseY < yh + 0.5 * h){
      fill(200);
      klicked = true;
    }
  }
  ellipse(xh, yh, b, h);
  fill(0);
  triangle(x1, y1, x2, y2, x3, y3);
}




public void rechnungsvorgang_abbrechen(){                 //Methode zum Abbrechen des Rechnungsvorgangs
  Rechnung = new float[4][20];
  Artikel_name = new String[1][20];
  rechnungsposition = 0;
  rechnungssumme = 0;
}




public void rechnungsvorgang_beenden(){                   //Methode zum Speichern der Rechnung
  fertig = true;
  csv_Rechnungsnummer_neu = new Table();                                                  //Rechnungsnummer wird um 1 erhöht
  csv_Rechnungsnummer_neu.addColumn("aktuelle Rechnungsnummer");
  TableRow newRow = csv_Rechnungsnummer_neu.addRow();
  newRow.setLong("aktuelle Rechnungsnummer", csv_Rechnungsnummer.getLong(0, 0) + 1);
  saveTable(csv_Rechnungsnummer_neu, "data/aktuelle_Rechnungsnummer.csv");
  //Hier wird die Rechnung selbst für das Finanzamt gesichert
}



public void drucker_datei_sicherung(int ausgew_drucker){                                 //Sicherung des gewählten Druckers
  PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
  pras.add(new Copies(1));
  PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras);
  
  Beleg_Drucker = new Table();                                                  
  Beleg_Drucker.addColumn("Drucker:");
  String Drucker = "";
  for(int i = 0; i < pss.length; i++){
    if(i > 0){
      Drucker = Drucker + " , " + pss[i] ;
    }else{
      Drucker = pss[i] + "" ;
    }
    //println(Drucker);
  }
  TableRow newRow = Beleg_Drucker.addRow();
  newRow.setString("Drucker:", Drucker);
  TableRow newRow2 = Beleg_Drucker.addRow();
  newRow2.setString("Drucker:", "Drucker auswaehlen (Stelle des Druckers in obiger Liste angeben(beginnend bei 0)):");
  TableRow newRow3 = Beleg_Drucker.addRow();
  newRow3.setInt("Drucker:", ausgew_drucker);
  saveTable(Beleg_Drucker, "data/Beleg_Drucker.csv");
}



public void rechnung_drucken(){                                                          //Methode zum Drucken der Rechnung
  try {
    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    pras.add(new Copies(1));

    PrintService pss[] = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras);
    println(PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.GIF, pras));

  if (pss.length == 0) throw new RuntimeException("No printer services available.");
    int druck_ausw2 = (int) druck_ausw;
    PrintService ps = pss[druck_ausw2];
    // PrintService ps = "Fax";
    System.out.println("Printing to " + ps);

    DocPrintJob job = ps.createPrintJob();

    FileInputStream fin = new FileInputStream(sketchPath() + "/temp/temp_Rechnung.jpg");
    Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.GIF, null);

    job.print(doc, pras);

    fin.close();
  } catch (IOException ie) {
    ie.printStackTrace();
  } catch (PrintException pe) {
    pe.printStackTrace();
  }
}



public void neue_Rechnung(){                                                            //Methode zum Beenden des Rechnungsvorgangs
  rechnungsvorgang_abbrechen();                                                          //Wird ausgeführt um Variablen und Rechnungsarray zurückzusetzen
}

Hi @Ld44hbxhkhr

As you said the rest works …
Does the temp directory already exists in the sketch folder ? Not sure it would be generated on the fly …

Cheers
— mnse

Hi mnse!

Yes, it does. I made it myself for temporal saving of the current bill (German: “Rechnung”)

Greetings,
Ld44.

I understand each naming of your code… :grinning:
Unfortunately, I can’t test your code now as I’m not at my desk, only mobile … But will have a look tomorrow…

Cheers
— mnse

PS: which pde you are using 3 or 4 ?

Nice xD.

I am using pde 3. Using the following link you can download a zip-file containing the programm and everything it needs to run:

Thanks again for trying to help me!

Note: You need to install the ControlP5 library through the library installer or it won’t work

Hi @Ld44hbxhkhr,

As promised … you need to set the correct sketchPath for the child sketch… :wink:

void setup(){
  frameRate(60);  
// change this
  child = new ChildApplet();
// to 
  child = new ChildApplet(this);

// and this
  public ChildApplet() {
    super();    
    PApplet.runSketch(new String[]{this.getClass().getName()}, this);
// to
  public ChildApplet(PApplet parent) {
    super();
    PApplet.runSketch(new String[]{"--sketch-path=" + parent.sketchPath(), this.getClass().getName()}, this);

… afterwards it will work!

Cheers and have a nice holiday
— mnse

1 Like

Thank you mnse!

It now works nice and as I wanted!

Have a nice holiday, too,
Ld44hbxhkhr.