我有以下Applet课程:

public class Marquee extends Applet {
    Label label1 = new Label("Testing");

    public void pushUpdate( String text ) {
        System.out.println( "receiving: " + text );
        label1.setText( text );
        repaint();
    }

    public void init() {
        ScrollText_2 scrollObj = new ScrollText_2( "Applet test" );
        scrollObj.setApplet(this);
        add( label1 );
        scrollObj.run();
    }
}

ScrollText2类实现Runnable并具有scroll()方法。 现在,所有滚动方法所做的就是返回对象包含的String。 此类的run()方法如下所示:

while(true) {
    try {
        marquee.pushUpdate( scroll() );
        Thread.sleep( 2000 );
    }
    catch (InterruptedException e) {}
}

问题是运行小程序时,如果调用.run()方法,则字幕上的标签将永远不会显示。 我已经尝试过repaint(),只是label.setText(),updateUI()和redraw()来尝试使小程序显示更新,但是没有用。

任何建议将不胜感激。

谢谢!

===============>>#1 票数:3 已采纳

您不调用Thread或Runnable的run() 您在线程或包含Runnable的线程上调用start() 另外,您将需要注意在GUI线程上更新GUI组件。 对于Swing来说,这意味着使用SwingUtilities.invokeLater(someRunnable) ,我怀疑可以用AWT来完成。

顺便说一句,为什么要使用AWT而不是Swing?

===============>>#2 票数:3

您没有创建新的Thread来运行scrollObj 当您在Marquee.init()调用scrollObj.run()时, scrollObj劫持您的applet线程。 这意味着永远不会到达您的主要Marquee更新循环,其中包括paint() 调用repaint()也不保证会调用paint() 因此,您的Marquee永远不会画。

当您替换scrollObj.run();时,您的代码工作正常scrollObj.run();

new Thread(scrollObj).start();

===============>>#3 票数:1

小程序中的字幕示例,例如移动某些东西的线程

import java.applet.*;
import java.awt.*;
/**<applet code="Marquee" height=768 width=1024></applet>*/
public class Marquee extends Applet implements Runnable {
  Color clr[] = { Color.red, Color.green, Color.cyan, Color.blue, Color.orange };
  int xx = 0;
  int x = 100;
  int a = 200;
  Thread t = new Thread(this);

  public void start() {
    t.start();
  }

  public void paint(Graphics g) {
    g.setFont(new Font("Times New Roman", Font.BOLD, 28));
    xx++;
    if (xx == 3) {
      xx = 0;
    }
    g.setColor(clr[xx]);
    g.fillOval(200, 200, x, a);
    g.drawString("Vinay", x, 200);
    g.drawString("Mayur", a, 300);
    x += 1;
    a -= 1;
  }

  public void run() {
    try {
      System.out.println("sdd");
      for (int i = 0; i < 200; i++) {
        Thread.sleep(10);
        repaint();
      }
    } catch (Exception e) {
      System.out.println("Error:-->" + e);
    }
  }
}

  ask by Mike Caputo translate from so

未解决问题?本站智能推荐:

1回复

Java应用程序不会显示,但是解决方案必须在主类之外具有可运行的功能

我正在尝试制作一个简单的Java俄罗斯方块游戏。 我正在关注GameDev.net上的教程。 我想通过将可运行的Frame类保留在主类之外,而不是像本教程中所说的那样将所有内容都放在一个类中(如果我这样做的话,代码将起作用),从而超出本教程的范围。 这段代码是我尝试执行以下操作(以下)
1回复

小程序中未显示按钮

以下是我的applet游戏的简明代码: 我的游戏按预期运行。 但是,当用户按下Esc我想暂停游戏并显示选项按钮。 问题是,当我按Esc它会按预期暂停游戏。 但是,它不会在屏幕上显示按钮。 我试图寻找无济于事的解决方案。 到底是什么情况?
3回复

Java多线程使用synchronized不是线程安全的

具有同步的简单多线程测试。 我想如果它是“同步的”,其他线程会等待。 我错过了什么? 我认为这会显示如下: 但它的实际输出: 和其他类似的变化。 它应该显示每个增量(即0,1,2,3)不按顺序...
1回复

使用单独的线程更新JTable

该应用程序的目的是查询表,并获取该信息并更新JTable。 现在ThreadTask()能够查询表并获取信息。 我的问题是如何使用从数据库获得的信息更新JTable GUI对象?
1回复

如何在Java中的循环中使用多线程

这就是我想要做的。 我正在一段while loop记录来自不同传感器的数据,直到用户停止记录为止。 我想每秒记录尽可能多的数据。 传感器需要不同的时间来返回值,介于200ms和3秒之间。 因此,不能连续调用传感器。 依次调用传感器如下所示: 根据传感器的不同,读取数据看起来
3回复

使用java.util.concurrent API结束的线程

我正在使用线程,因此决定使用最现代的API(java.util.concurrent包)。 这是我想做的(伪代码): 我想在某个日期运行任务,并重复执行直到一定时间。 时间过去后,任务结束。 我唯一的问题是如何以线程结尾?
2回复

使用线程的Java jsoup无法正常工作

我喜欢这样的页面: 我正在使用库jsoup并使用Thread同时连接到每个页面: 每个任务都以这种方式连接到页面并解析HTML: 获得大量这些例外: jsoup是否同时仅允许1个线程? 还是我做错了什么? 关于如何更快地连接到我的页面的任何建议,因为一个接一个
4回复

Java Multithreading:如何使用Runnable接口创建线程?

有人可以解释这段代码的作用吗? new Thread(new X()).start(); 其余代码:
1回复

使用Runnable或Thread出现Java线程问题

我正在尝试使用合并排序实现多线程。 我在将数组切成两半的位置制作了新线程。 数组的排序取决于:[数组的大小] vs [我创建新线程的次数]例如:如果我让它仅在大小为70的数组上创建两个线程,则该数组将被排序。让它创建6,它将不归类返回。 我认为可能是一件事,就是线程未同步,但是我使用了t
1回复

Java线程不会终止

单击两个三角形时,我正在尝试为一个三角形制作动画。 一旦我单击它们两次,三角形0就开始移动,直到moveX达到20,而while(moveX <20),但是然后它似乎没有达到终止状态,因此它没有进入内部:if(t.getState() == Thread.State.TERMINATED