23. marts 2009 - 17:11Der er
13 kommentarer og 1 løsning
Java Applet sleep()
Hejsa,
Jeg skal præsentere en masse billeder i min java applet, hvilket får fint med labels og icons osv... Men indimellem hvert billede præsenteres skal der været et andet billede (et fixation point om man vil "+"). Den skal være der i 1 sekund. Jeg har forsøgt mig uden held med at lade tråden sove, og er gået videre til at prøve med at idle (busywaite) i et antal sekunder på følgende måde:
stimulu.setIcon(null); stimulu.setText("+++"); stimulu.repaint(); long now = System.currentTimeMillis(); while(System.currentTimeMillis()<now+wait){ // idle }
Nu er det noget tid siden jeg har kodet java sidst så har sikkert set mig blind på noget. Men det sjove er at den faktisk venter et sekund med at præsentere det næste billede, men den tegner ikke noget nyt imens - hvilket undrer mig, da jeg kalder repaint inden jeg idler.
Jeg gætter på at du stagigvæk kaldet sleep fra event tråden. Det duer ikke.
Når bruger klikke på next button eller whatever, så starter du en tråd som først bruger invokeLater til at vise pausebillede, sleeper 1 sekun dog så bruger invokeLater til at vise det rigtige billede.
public class Paging extends JFrame implements ActionListener { private JTextField txt; private JButton btn; public Paging() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout()); txt = new JTextField(); txt.setText(""); getContentPane().add(txt, BorderLayout.CENTER); btn = new JButton("Vis nyt billede"); btn.addActionListener(this); getContentPane().add(btn, BorderLayout.SOUTH); this.setSize(300, 300); } public void load(String s) { txt.setText(s); } public void actionPerformed(ActionEvent ev) { if (ev.getSource() == btn) { T t = new T(this); t.start(); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Paging f = new Paging(); f.setVisible(true); } }); }
}
class T extends Thread { private static int n = 0; private Paging pag; public T(Paging dn) { this.pag = dn; } public void run() { SwingUtilities.invokeLater(new Runnable() { public void run() { pag.load("Nu viser vi billede af nogle pausefisk"); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { } SwingUtilities.invokeLater(new Runnable() { public void run() { n++; pag.load("Nu viser vi et rigtigt billede nummer " + n); } }); } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.