У меня мало опыта в кодировании, я сделал только одно очень маленькое (действительно крошечное) приложение, перед которым было использовано для копирования файлов из местоположения A в местоположение B, а затем сбросить каталог A и Я не сталкивался с этим вопросом.Действие кнопки задерживается или выполняется после выхода
сейчас я работаю над приложением, которое ищет базу данных для данных и отправляет их на принтер для печати этикеток.
все работает как предусмотрено, за исключением кнопки, которая выполняет печать; когда я нажимаю кнопку «Печать», ничего не происходит, если я нажимаю ее несколько раз (обычно 3), принтер начинает печатать 3 раза, а после этого ничего не происходит до закрытия приложения (GUI) с помощью кнопки X. (Этот вопрос не существует, если я печатать непосредственно с помощью кода)
код довольно прост, пожалуйста, обратите внимание:
Кнопка Код:
private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
PrintLabel p = new PrintLabel(jTextField1.getText());
if (ONtoggle.isSelected()) {
try {
p.labelPrint(jTextField2.getText(), jTextField3.getText(), "MMC");
} catch (FileNotFoundException | SQLException ex) {
Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
}
}
else {
try {
p.labelPrint(jTextField2.getText(), jTextField3.getText(), "MMT");
} catch (FileNotFoundException | SQLException ex) {
Logger.getLogger(MainWindow.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Печать класса :
public class PrintLabel {
private final String port;
public PrintLabel(String port) {
this.port = port;
}
public void labelPrint (String number, String copies, String cut) throws FileNotFoundException, SQLException {
String DBurl = "jdbc:oracle:thin:@[DB hostname]/[DB Service Name]"; //DB login info.
String DBuser = "user";
String DBpass = "pass";
Connection DBcon = DriverManager.getConnection(DBurl, DBuser, DBpass); // DB connection
Statement statement = DBcon.createStatement(); //class used to make statements.
ResultSet rs = statement.executeQuery([SELECT STATEMENT]);
if (rs.next()) {
String name = rs.getString("name");
String nationality = rs.getString("nationality");
String sex = rs.getString("sex");
String birthDate = rs.getString("birthdate");
FileOutputStream os = new FileOutputStream(port);
PrintStream ps = new PrintStream (os);
String commands =
"^XA" + //begin ZPL command.
"^" + cut + "" + //kiosk cut mode, needed for cutting. MMC for cutting and MMT for tear-off.
"^PQ" + copies + ",0,0,n,y" + //first number indicates number of copies.
//Line 1
"^FO100,20" + //X and Y axis alignment.
"^A0N,20,20" + //font width and hight in dots.
"^FB350,2,5,L,0" + //max lines set to 2 for long names.
"^FDName: " + name + "^FS" + //print text command start and end.
//Line 2
"^FO100,70" +
"^A0N,20,20" +
"^FD File: " + number + "^FS" +
"^FO420,70" +
"^A0N,20,20" +
"^FD" + sex + "^FS" +
//Line 3
"^FO100,100" +
"^A0N,20,20" +
"^FD Date of Birth: " + birthDate + "^FS" +
//Line 4
"^FO100,130" +
"^A0N,20,20" +
"^FD Nationality: " + nationality + "^FS" +
//Line 5
"^FO100,150 ^BY2,1.0,50" + //Barcode Field Width, ratio and height.
"^B3N,50,n,n" + //Barcode code-39.
"^FD" + number + "^FS" +
"^XZ"; //end ZPL command.
ps.println(commands);
}
}
}
Многозначительный.
Возможно, вам понадобится очистить и закрыть «PrintStream». Посмотрите на [Заявление о попытках с ресурсами] (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) для некоторых дополнительных идей. – MadProgrammer