効果を実現します:
クラッシュするスレッドマン:(単一のスレッド)
メインスレッドが画像を更新するリクエストを処理している場合、他のリクエストを受け入れることができないため、ブロッキングデッドループ状態に分類されます。
写真を描きます
java.awt.graphics; Import java.awt.image; Import java.awt.toolkit; import javax.swing.jpanel; public class cartonperson extends jpanel img [] = new image [6]; int index = 0; int speed(int cartonperson(int index = 0; {this.speed = speed; img [0] = toolkit.getDefaultToolkit()。getImage( "1.png"); img [1] = toolkit.getDefaultToolkit()。 "3.png"); img [3] = toolkit.getDefaultToolkit()。getImage( "4.png"); img [4] = toolkit.getDefaultToolkit() run(){while(true){try {repaint(); shood.sleep(100);} catch(arturnedexception e){e.printstacktrace();}}@overridepublic void paintcomponent(graphics g){// todo auto-jerated method stubponed(g); paintupont(g); getWidth()、getheight()、this); // system.out.println(index); if(index == 5){index = 0;} else {index ++;}}}}}}シングルスレッドフォームレイアウト
java.awt.event.actionevent;インポートjava.awt.event.actionlistener;インポートjavax.swing.jbutton; import javax.swing.jframe; public class singlethreadcarton extends jframe {cartonperson p1; jbutton bsattton(jbutton( "; jbutton"; jbutton) jbutton( "wait"); jbutton brew = new jbutton( "continue"); singlethreadcarton(){init(); this.settitle( "breaking threadman"); this.setsize(600、 500); this.SetSizable(true); this.setLocationRelativeto(null); this.setDefaultCloseoperation(exit_on_close); this.setVisible(true);} void init(){this.setlayout(null); p1 = new cartonpers(0); p1.setbound(260、100、100、100、100。 160); bstart.setbounds(260、280、80、30); bpause.setbounds(260、320、80、30); bresume.setbounds(260、360、80、30); 360、80、30); bresume.setbounds(260、360、80、30); bresume.addactionlistener(260、360、80、30); bresume.addactionlistener(bc);} class buttonclick click click exprence actionlistener {@overridebublic boid everformed(actionperformed(action-ristener) stubif(e.getSource()== bstart){p1.run();} else if(e.getsource()== bpause){} else if(e.getsource()== bresume){}}} public static void main(string [] args){new singleThreadcarton();}}}実行結果:
[開始]ボタンをクリックした後、プログラムはクラッシュします。
マルチスレッドフォームレイアウト
java.awt.event.actionevent;インポートjava.awt.event.actionlistener;インポートjavax.swing.jbutton; import javax.swing.jframe; public class multithreadcarton extends jframe {cartonperson p1; thread t1; jbutton = new jbutton(jbutton ") jbutton( "wait"); jbutton brew = new jbutton( "continue"); multithreadcarton(){init(); this.settitle( "running threadman"); this.setsize(600、 500); this.SetSizable(true); this.setLocationRelativeto(null); this.setDefaultCloseoperation(exit_on_close); this.setVisible(true);} void init(){this.setlayout(null); p1 = new cartonpers(0); p1.setbound(260、100、100、100、100。 160); bstart.setbounds(260、280、80、30); bpause.setbounds(260、320、80、30); bresume.setbounds(260、360、80、30); 360、80、30); bresume.setbounds(260、360、80、30); bresume.addactionlistener(260、360、80、30); bresume.addactionlistener(260、360、80、30); 30); BRESUME.ADDACTIONLISTENER(260、360、80、30); bresume.addactionListener(260、360、80、30); bresume.addactionListener(260、360、80、30); 30); BRESUME.ADDACTIONLISTENER(260、360、80、30); bresume.AddActionListener(260、360、ButtonClickはActionListener {@OverridePublic void Actionporformed(ActionEvent e){// Todo auto-jerated method Stubif(e.getSource()== bstart){// p1.run(); t1.start();} else if(e.getSource()== bpause){t1.suspend();} else if(e.getsource()== bresume){t1.resume(); multithreadcarton();}}実行結果:上図に示されているように。
上記は、今回JavaでSwingで走ることができるスレッドヒーローの例の説明です。 wulin.comへのご支援ありがとうございます。
この記事は、https://www.idaobin.com/archives/841.htmlで複製されています