JFrame中的多线程

时间:2009-07-31 14:36:53

标签: java

我希望以一种同时逐个显示的方式在JFrame上显示一些图像。我已经实现了它但不能以正确的方式执行它。是否有任何人可以帮助我解决这个问题,以便在图像的某些部分之后显示一些文本然后图像然后文本直到我的要求但在单个JFrame中。 日Thnx

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Show1 extends JFrame implements Runnable
{
ImageIcon i1;
JLabel j1;
Thread t;
JTextField jt;
boolean value=true;
 Show1()
 {

  setSize(1100,800);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().setBackground(Color.black);
setLayout(null);
i1=new ImageIcon("Sunset.jpg");
j1=new JLabel("",i1,JLabel.CENTER);

jt=new JTextField(50);
jt.setBounds(250,750,100,50);
t=new Thread(this,"Main");
/*   try
     {
       SwingUtilities.invokeLater(
        new Runnable()
         {
           public void run()
            {
              makeGUI();
    makeGSI();
             }
         });
     }
    catch(Exception exc)
     {
       System.out.println("can't create because of"+exc);
      }
   }

private void makeGUI()
{*/


while(!value)
{
new Thread(this,"Image").start;

public void run()
{
int i,j;
try
{
for(i=-50;i<=500;i+=50)
{
j1.setBounds(200,100,700,i);
add(j1);
Thread.sleep(1000);
}
}
catch(InterruptedException e)
{
System.out.println(e);
}
}
}




public void makeGSI()
{
t1=new Thread(this,"Message");
t1.setPriority(4);
t1.start();
}
public void run()
{
try
{
String msg[]={"Customer"," Care"," Services"};
int x=msg.length;
for(int i=0;i<=x-1;i++)
{
jt.setText(msg[i]);
Thread.sleep(1000);
}
}
catch(InterruptedException e)
{
System.out.println(e);
}
}
}
class Show
{
public static void main(String args[])
{
Show1 sh=new Show1();

}}

2 个答案:

答案 0 :(得分:3)

无论你想做什么(我仍然不太明白究竟是什么),Swing不允许从多个线程更新UI。您必须确保只有AWT事件调度程序线程才会更新到UI。

SwingUtilities中有辅助方法,例如invokeAndWait(Runnable)invokeLater(Runnable)来帮助解决此问题。

答案 1 :(得分:2)

您可能希望使用SwingWorker

  • 将图片加载到一个帖子中,然后
  • 在AWT线程上设置您的框架。

Here is another article描述了SwingWorker。