2016-01-04 3 views
1

У меня мало опыта в кодировании, я сделал только одно очень маленькое (действительно крошечное) приложение, перед которым было использовано для копирования файлов из местоположения A в местоположение B, а затем сбросить каталог A и Я не сталкивался с этим вопросом.Действие кнопки задерживается или выполняется после выхода

сейчас я работаю над приложением, которое ищет базу данных для данных и отправляет их на принтер для печати этикеток.

все работает как предусмотрено, за исключением кнопки, которая выполняет печать; когда я нажимаю кнопку «Печать», ничего не происходит, если я нажимаю ее несколько раз (обычно 3), принтер начинает печатать 3 раза, а после этого ничего не происходит до закрытия приложения (GUI) с помощью кнопки X. (Этот вопрос не существует, если я печатать непосредственно с помощью кода)

код довольно прост, пожалуйста, обратите внимание:

GUI screenshot

Кнопка Код:

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); 


     } 
     } 




} 

Многозначительный.

+0

Возможно, вам понадобится очистить и закрыть «PrintStream». Посмотрите на [Заявление о попытках с ресурсами] (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) для некоторых дополнительных идей. – MadProgrammer

ответ

0

Может возникнуть ряд причин для вашей проблемы, наиболее очевидным является то, что для работы с базой данных требуется некоторое время, чтобы подключать, запускать и возвращать результат, чтобы было сложно дать вам один ответ.

С вашего вопроса неясно, может ли один щелчок на кнопке когда-либо печатать что-либо?

Я предлагаю отладить ваше приложение, чтобы помочь изолировать проблему, или, по крайней мере, добавить некоторые записи, которые помогут вам.

Кроме того, вы всегда должны закрывать и освобождать свои потоки, подключения к базе данных, заявления и результаты.

+0

Да, когда я нажимаю один раз, ничего не происходит, скажем Я нажимаю 10 раз, принтер начинает печатать только после 3-го щелчка (3 раза), в то время как остальные 7 запросов на печать не будут печататься до тех пор, пока я не выйду из приложения. – TheWaitingMan

+0

, закрывая соединение с БД и результаты, решили эту проблему для меня, спасибо. – TheWaitingMan

Смежные вопросы