Многопоточность в JFrames - PullRequest
1 голос
/ 31 июля 2009

Я хочу отображать изображение и текст на моем 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 ]

3 голосов
/ 31 июля 2009

Что бы вы ни пытались сделать там (я до сих пор не совсем понимаю, что именно это такое ), Swing не позволяет обновлять пользовательский интерфейс из нескольких потоков. Вы должны убедиться, что только поток диспетчера событий AWT будет обновляться до пользовательского интерфейса.

В SwingUtilities есть вспомогательные методы, такие как invokeAndWait (Runnable) или invokeLater (Runnable) , чтобы помочь с этим.

2 голосов
/ 31 июля 2009

Возможно, вы захотите использовать SwingWorker до

  • загрузить изображение в одну ветку, а затем
  • установить вашу рамку видимой в ветке AWT.

Вот еще одна статья , описывающая SwingWorker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...