java - Having troubles making a second thread -
i trying make small programm clicks left mouse button in intervall, time. problem can't solve able stop loop whenever want, before timer runs out. have found out 1 should run loop in worker thread, , stop button should interrupt thread somehow, can't manage it. hope can me code.
import java.awt.awtexception; import java.awt.robot; import java.awt.event.*; import java.util.logging.level; import java.util.logging.logger; import javax.swing.*; public class keyrepeater_v2 extends javax.swing.jframe { robot robot; boolean stop; double time; double time_milli; public keyrepeater_v2() throws awtexception { this.robot = new robot(); initcomponents(); } /** * method called within constructor initialize form. * warning: not modify code. content of method * regenerated form editor. */ @suppresswarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="generated code"> private void initcomponents() { jbutton1 = new javax.swing.jbutton(); jbutton2 = new javax.swing.jbutton(); jtextfield1 = new javax.swing.jtextfield(); jlabel1 = new javax.swing.jlabel(); setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close); jbutton1.settext("start"); jbutton1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jbutton1actionperformed(evt); } }); jbutton2.settext("stop"); jbutton2.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jbutton2actionperformed(evt); } }); jtextfield1.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { jtextfield1actionperformed(evt); } }); jlabel1.settext("timer"); javax.swing.grouplayout layout = new javax.swing.grouplayout(getcontentpane()); getcontentpane().setlayout(layout); layout.sethorizontalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(javax.swing.grouplayout.alignment.trailing, layout.createsequentialgroup() .addcontainergap(javax.swing.grouplayout.default_size, short.max_value) .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(layout.createsequentialgroup() .addcomponent(jtextfield1, javax.swing.grouplayout.preferred_size, 137, javax.swing.grouplayout.preferred_size) .addgap(18, 18, 18) .addcomponent(jbutton1) .addgap(18, 18, 18) .addcomponent(jbutton2, javax.swing.grouplayout.preferred_size, 57, javax.swing.grouplayout.preferred_size)) .addcomponent(jlabel1)) .addcontainergap()) ); layout.setverticalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addgroup(javax.swing.grouplayout.alignment.trailing, layout.createsequentialgroup() .addgap(41, 41, 41) .addcomponent(jlabel1, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, short.max_value) .addpreferredgap(javax.swing.layoutstyle.componentplacement.related) .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addcomponent(jbutton2, javax.swing.grouplayout.alignment.trailing, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, short.max_value) .addcomponent(jtextfield1, javax.swing.grouplayout.alignment.trailing) .addcomponent(jbutton1, javax.swing.grouplayout.alignment.trailing, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, short.max_value)) .addcontainergap()) ); pack(); }// </editor-fold> private void jbutton2actionperformed(java.awt.event.actionevent evt) { stop = true; //setfocusable (true); //joptionpane.showmessagedialog(null, stop, "test titel", joptionpane.ok_cancel_option); } private void jbutton1actionperformed(java.awt.event.actionevent evt) { stop = false; robot.delay(5000); //in milliseconds { leftclick(); robot.delay(1500); time_milli = time_milli - 1700; } while (time_milli > 0); } private void jtextfield1actionperformed(java.awt.event.actionevent evt) { time = double.parsedouble(jtextfield1.gettext()); //system.out.print(time); time_milli = time * 1000; } /** * @param args command line arguments */ public static void main(string args[]) throws awtexception { /* set nimbus , feel */ //<editor-fold defaultstate="collapsed" desc=" , feel setting code (optional) "> /* if nimbus (introduced in java se 6) not available, stay default , feel. * details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { (javax.swing.uimanager.lookandfeelinfo info : javax.swing.uimanager.getinstalledlookandfeels()) { if ("nimbus".equals(info.getname())) { javax.swing.uimanager.setlookandfeel(info.getclassname()); break; } } } catch (classnotfoundexception ex) { java.util.logging.logger.getlogger(keyrepeater_v2.class.getname()).log(java.util.logging.level.severe, null, ex); } catch (instantiationexception ex) { java.util.logging.logger.getlogger(keyrepeater_v2.class.getname()).log(java.util.logging.level.severe, null, ex); } catch (illegalaccessexception ex) { java.util.logging.logger.getlogger(keyrepeater_v2.class.getname()).log(java.util.logging.level.severe, null, ex); } catch (javax.swing.unsupportedlookandfeelexception ex) { java.util.logging.logger.getlogger(keyrepeater_v2.class.getname()).log(java.util.logging.level.severe, null, ex); } //</editor-fold> /* create , display form */ java.awt.eventqueue.invokelater(() -> { try { new keyrepeater_v2().setvisible(true); } catch (awtexception ex) { logger.getlogger(keyrepeater_v2.class.getname()).log(level.severe, null, ex); } }); } private void leftclick() { robot.mousepress(inputevent.button1_mask); robot.delay(100); robot.mouserelease(inputevent.button1_mask); robot.delay(100); } // variables declaration - not modify private javax.swing.jbutton jbutton1; private javax.swing.jbutton jbutton2; private javax.swing.jlabel jlabel1; private javax.swing.jtextfield jtextfield1; // end of variables declaration }
quite code generated netbeans... don't know how make new thread, , don't know how make textfield (for timer) , buttons communicate thread either..... hope can me :d
you want @ timers. basically, it's here facilitate usage of threading. didn't want modify code provide sample replaces while loop using (it's official timer's javadoc).
actionlistener taskperformer = new actionlistener() { public void actionperformed(actionevent evt) { { system.out.println("left click"); leftclick(); robot.delay(1500); time_milli = time_milli - 1700; } while (time_milli > 0); } }; new timer(5000, taskperformer).start(); please note explicitely left console print check called on action performed every 5 secondes ; timers keeps gui being freezed when click on start button more user-friendly.
Comments
Post a Comment