Avatar billede bolmer Nybegynder
12. februar 2005 - 15:13 Der er 5 kommentarer og
1 løsning

Min kode fungere kun i én ud af 3 editorer!

Jeg har en simpel kode som skal starte en tråd der viser et ur når en bruger indtaster "start clock" i konsollen (System.in).

På den samme maskine har jeg kørt denne kode i eclipse og i drjava. I eclipse kommer uret først frem når man har skrevet "start clock" efter fulgt at et eller flere nye input. I drjava fryser konsollen når man vælger "Run".

I drjava på en anden maskine fungere det fint! Kan det virkelig være så stor forskel på hvordan kode bliver kørt?

Her er tråden:

import java.util.*;
import javax.swing.*;

public class clockThread extends Thread {
    JFrame frame;
    JLabel label;
    String currentTime;

    public clockThread(String str) {
        super(str);
    }

    private void createFrameAndShowTime() {
        frame = new JFrame(getName());
        label = new JLabel(currentTime);
        frame.getContentPane().add(label);
        frame.pack();
        frame.setVisible(true);
    }

    private void updateTime() {
        label.setText(currentTime);
    }

    private void destroyFrame() {
        frame.setVisible(false);
        frame.dispose();
    }


    public void run() {
        Date myTime = new java.util.Date();
        myTime.setTime(System.currentTimeMillis());
        currentTime = myTime.toString();
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    createFrameAndShowTime();

                    }
                }
            );}
        catch (Exception e) {}
       

    Runnable timeUpdater = new Runnable() {
    public void run() {
        updateTime();
  }
    };

while ( true ) {
    try {
        sleep(1000);}
    catch (InterruptedException e) {}
   
    myTime.setTime(System.currentTimeMillis());
    currentTime = myTime.toString();
    try {
        SwingUtilities.invokeAndWait(timeUpdater);}
    catch (Exception e) {}

}
    }

}


Her er den klasse hvor tråden bliver startet i hvis input er korrekt:

public class Command {
    private clockThread clk;
    private String clock_ID;

   
    public Command(clockThread clock) {
        clk = clock;
        clock_ID = clock.getName();
    }


    public void start (String name) {
        if (name.equals(clock_ID)){
            clk.start();
            System.out.println("ID : "+clock_ID);
            }
        else {
          System.out.println("No such Thread");
        }

        }
    }

Her er klassen med mainmetoden som indlæser input fra System.in:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;


public class RunThreads {

    public static void main(String[] args) {
        String word = null;
        String id = null;
        StringTokenizer toke;
        clockThread clock = new clockThread("clock");
        Command com = new Command(clock);

        System.out.println("List of commands :\n Start <name>\n suspend <id>\n resume <id>\n stop <id>\n list");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        try {
            while((word = br.readLine()) != null){
            toke = new StringTokenizer(word);
           
           
            if (toke.countTokens() == 2){ //use switch instead
                word = toke.nextToken();
                id = toke.nextToken();


            //Starting a Thread
                if (word.equals("start")){
                    com.start(id);
                }
            }
                else {
                  System.out.println("Error in input");
                }
            }

        }
        catch (IOException e) {
          System.out.println("IO error trying to read command");
          System.exit(1);
        }
    }
}
Avatar billede arne_v Ekspert
12. februar 2005 - 15:19 #1
Muligvis stresser du IDE'en lidt meget ved at køre både console og Swing samtidigt.

Det vigtige må være om den virker udenfor IDE'en.
Avatar billede arne_v Ekspert
12. februar 2005 - 15:24 #2
Umiddelbart vil jeg da iøvrigt mene at Eclipses opførsel er korrekt.

skriv start clock -> kald clk.start -> clockThread.run kører -> createFrameAndShowTime kaldes -> frame.setVisible(true)
Avatar billede bolmer Nybegynder
12. februar 2005 - 15:41 #3
Jo det burde vel du, men af en eller anden grund skal jeg i Eclipse give noget mere input efter jeg har skrevet "start clock" før den kommer frem (fx trykke på enter en eller to gange)!

Det er den eneste måde jeg kan få uret frem på.
Avatar billede arne_v Ekspert
12. februar 2005 - 15:47 #4
Altså du skal selvfølgelig taste:

start clock<retur>

men du skal taste retur flere gange ?
Avatar billede bolmer Nybegynder
12. februar 2005 - 15:49 #5
Jep. Nogen gange skal jeg trykke return én gang og andre gange 2 gange før uret dukker op. Men det er som sagt kun i Eclipse, men der er sku da pænt underligt.
Avatar billede bolmer Nybegynder
06. maj 2005 - 20:57 #6
Fandt ikke en løsning, men i andre editorer har jeg ikke problemet
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester