27. september 2010 - 11:47
Der er
6 kommentarer og 1 løsning
DoEvent i java
Goddag eksperter jeg sidde lige og leger med lidt java og er løbet ind i et problem jeg har en loop der fryser det hele og håber på at man kan lave et kald som i Visual Basic som DoEvent der giver alt andet kode lov til at køre indimellem. her er koden der fryser i grove træk. boolean _run = true; while (_run) { ... ... } mvh Huutt.
Annonceindlæg fra GlobalConnect
27. september 2010 - 12:00
#1
Hejsa, Jeg forstår godt at dit program "fryser" din while løkke kører konstant også selvom den har udført al koden. Hvad du kan gøre at at du kan oprette et par tråde, på den måde kan du kører flere processer samtidig uden at programmet fryser.
27. september 2010 - 12:13
#2
spørger jeg dumt når jeg siger hvad mener du enligt helt præcist med tråde ?
27. september 2010 - 12:44
#3
En tråd i java er en proces der kan kører for sig selv, så beregninger osv kan overlappe hinanden uden at sløve. Hus h = new Hus(); Beboer b = new Beboer(); Thread th = new Thread(h); Thread tb = new Thread(b); du skal huske at alle dine klasser du skal køre i tråde SKAL implementerer Runnable.
27. september 2010 - 14:36
#4
ok, nu er jeg med igen. smid et svar
27. september 2010 - 14:40
#5
Løsningen er helt klat tråde. Der er ikke nogen god DoEvents i Java. DU kunne naturligvis prøve med: Thread.yield(); men det er noget hø. Eksempel med tråd: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class NewDynNum extends JFrame implements ActionListener { private JTextField txt; private JButton btn; private int n; public NewDynNum() { n = 0; setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout()); txt = new JTextField(); txt.setText(Integer.toString(n)); getContentPane().add(txt, BorderLayout.CENTER); btn = new JButton("Count 10 up"); btn.addActionListener(this); getContentPane().add(btn, BorderLayout.SOUTH); pack(); } public void incr() { n++; txt.setText(Integer.toString(n)); } 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() { NewDynNum f = new NewDynNum(); f.setVisible(true); } }); } } class T extends Thread { private NewDynNum dn; public T(NewDynNum dn) { this.dn = dn; } public void run() { for (int i = 0; i < 10; i++) { SwingUtilities.invokeLater(new Runnable() { public void run() { dn.incr(); } }); try { Thread.sleep(1000); } catch (InterruptedException e) { } } } }
27. september 2010 - 17:58
#6
Det er et ganske udemærket eksempel arne kommer med her. men det korte og det lange er at du skal have den while(true) i klassens run() som kommer ved implementering af Runnable. Her er et svar.
27. september 2010 - 20:07
#7
takker for ideen arne men bonussen ryger til darco da han kom med Thread først.
Kurser inden for grundlæggende programmering