Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的线程不工作_Java_Multithreading_Swing_Thread Safety_Eclipse Luna - Fatal编程技术网

java中的线程不工作

java中的线程不工作,java,multithreading,swing,thread-safety,eclipse-luna,Java,Multithreading,Swing,Thread Safety,Eclipse Luna,上一个相同的线程在JavaEclipseLuna中运行,但是出现了中断。我改为JavaEEIDE,上一个在luna中运行的线程现在没有在JavaEEIDE中运行,这里是 public void clockTime(){ Thread clock=new Thread(){ public void run(){ try { for(;;){

上一个相同的线程在JavaEclipseLuna中运行,但是出现了中断。我改为JavaEEIDE,上一个在luna中运行的线程现在没有在JavaEEIDE中运行,这里是

public void clockTime(){
        Thread clock=new Thread(){
            public void run(){
                try {
                    for(;;){
                        Calendar cald=new GregorianCalendar();
                         day=cald.get(Calendar.DAY_OF_MONTH);
                         month=cald.get(Calendar.MONTH);
                        year=cald.get(Calendar.YEAR);


                         seconds=cald.get(Calendar.SECOND);
                         minutes=cald.get(Calendar.MINUTE);
                         hours=cald.get(Calendar.HOUR);
                         lblClock.setText("<html>"+hours+":"+minutes+":"+seconds+"<br>"+day+"/"+month+"/"+year+"</html>");
                    sleep(1000);
                    }
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        };
        clock.start();

        }   
public void clockTime(){
线程时钟=新线程(){
公开募捐{
试一试{
对于(;;){
日历计算=新的公历日历();
day=cald.get(日历,每月的第天);
月=计算获取(日历月);
年=计算获取(日历年);
秒=计算获取(日历秒);
分钟=计算获取(日历分钟);
小时=计算获取(日历小时);
lblClock.setText(“+hours+”:“+minutes+”:“+seconds+”
“+day+”/“+month+”/“+year+”); 睡眠(1000); } }捕捉(中断异常e){ //TODO自动生成的捕捉块 e、 printStackTrace(); } } }; clock.start(); }
谁能帮我一下吗??。
调用构造函数的方法我在这里没有看到,但是如果我删除线程,该方法将被执行,因为它会根据需要显示时间和日期,但不会因为没有循环和永久循环而更改。

如果这是一个Swing应用程序,则:

  • 通过调用
    SwingUtilities.invokeLater(Runnable),确保在Swing事件线程上启动应用程序在该可运行模式下启动GUI的位置
  • 您正在对上面代码中的Swing事件线程(EDT)执行一个键Swing调用off,即
    lblClock.setText(…)
    调用。这也应该只在Swing事件线程上调用,方法与上面的点相同
  • 或者可以使用,然后在发布/处理方法对中进行setText调用
  • 或者(这就是我要做的),扔掉上面所有的代码,使用一个。这要简单得多,而且您不必担心on/off Swing事件,因为所有调用都在事件线程上
如果您选择Swing定时器路径,您将在其构造函数中构造一个等于所需延迟的int,这里是1000毫秒。计时器的ActionListener被反复调用,这样您就可以得到时间值,然后使用它创建一个字符串,并将其传递给JLabel

例如,大致如下:

int timerDelay = 1000;
Timer timer = new Timer(timerDelay, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // calculations to get time Strings
        String text = ..... // use calculations above
        lblClock.setText(text);
    }   
});
timer.start();

请注意,尚未测试代码

如果这是一个Swing应用程序,则:

  • 通过调用
    SwingUtilities.invokeLater(Runnable),确保在Swing事件线程上启动应用程序在该可运行模式下启动GUI的位置
  • 您正在对上面代码中的Swing事件线程(EDT)执行一个键Swing调用off,即
    lblClock.setText(…)
    调用。这也应该只在Swing事件线程上调用,方法与上面的点相同
  • 或者可以使用,然后在发布/处理方法对中进行setText调用
  • 或者(这就是我要做的),扔掉上面所有的代码,使用一个。这要简单得多,而且您不必担心on/off Swing事件,因为所有调用都在事件线程上
如果您选择Swing定时器路径,您将在其构造函数中构造一个等于所需延迟的int,这里是1000毫秒。计时器的ActionListener被反复调用,这样您就可以得到时间值,然后使用它创建一个字符串,并将其传递给JLabel

例如,大致如下:

int timerDelay = 1000;
Timer timer = new Timer(timerDelay, new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // calculations to get time Strings
        String text = ..... // use calculations above
        lblClock.setText(text);
    }   
});
timer.start();

请注意,代码尚未测试

您的问题不清楚,您应该对其进行编辑以改进其风格并便于理解。您的问题不清楚,您应该对其进行编辑以改进其风格并便于理解。