我希望以一种同时逐个显示的方式在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();
}}
答案 0 :(得分:3)
无论你想做什么(我仍然不太明白究竟是什么),Swing不允许从多个线程更新UI。您必须确保只有AWT事件调度程序线程才会更新到UI。
SwingUtilities中有辅助方法,例如invokeAndWait(Runnable)或invokeLater(Runnable)来帮助解决此问题。
答案 1 :(得分:2)