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);
}
}
}
