当前位置: 代码迷 >> Eclipse >> SWT/JFace 对象调用和线程等相关有关问题
  详细解决方案

SWT/JFace 对象调用和线程等相关有关问题

热度:144   发布时间:2016-04-23 13:57:53.0
SWT/JFace 对象调用和线程等相关问题

源代码一创建创建窗体线程:package Poem;


public class Start{


public static void main(String[] args){

FirstwinThread firstwin=new FirstwinThread();
firstwin.start();


}
}
源代码二创建窗体和创建关闭窗体的线程:package Poem;

public class FirstwinThread extends Thread {

public static Paint demo;
public void run() {

demo = new Paint(null);
demo.setBlockOnOpen(true);
ForOneShuThread OneShu=new ForOneShuThread();
OneShu.start();
demo.open();
 

}}
源代码三创建窗体类的源代码:package Poem;

import java.awt.Dimension;
import java.awt.Toolkit;

import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Paint extends ApplicationWindow {

Display display = new Display();
  Shell shell=new Shell();
public Paint(Shell arg0) {
super(arg0);
}

// 主窗体
protected void configureShell(Shell shell) {
// 窗体属性

shell.setText("诗赋");
Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
int w = d.width; // 获取屏幕宽度
int h = d.height; // 获取屏幕高度
shell.setSize(580, 320); // 规定窗口大小
shell.setLocation(w / 2 - 208, h / 2 - 220); // 设置窗口显示的位置
shell.setSize(416, 440);



// 窗体背景
new GC(shell);
shell.addPaintListener(new org.eclipse.swt.events.PaintListener() {
public void paintControl(PaintEvent e) {
Image im = new Image(display, "F:/java/Poem/src/Poem/wm.jpg");
final Rectangle bounds = im.getBounds();
int wi = bounds.width; // 图片宽
int hi = bounds.height; // 图片高
e.gc.drawImage(im, 0, 0, wi, hi, 0, 0, 400, 400);
}
});





}

protected void constrainShellSize() {

Rectangle bounds = shell.getBounds();
Rectangle constrained = getConstrainedShellBounds(bounds);
if (!bounds.equals(constrained)) {
shell.setBounds(constrained);
}}}

源代码四创建延迟关闭窗体的线程:package Poem;

public class ForOneShuThread extends Thread{
public void run() {
TestTimerTask tasted=new TestTimerTask();
tasted.strun();
}

}
源代码五实现延迟和关闭的类 :package Poem;


import java.util.Timer;
import java.util.TimerTask;




public class TestTimerTask extends TimerTask{

   

public void run() { 
System.out.print("ok");
FirstwinThread.demo.close();
}
public void strun(){

FirstwinThread.demo.open(); 
Timer timer = new Timer();
TimerTask task = new TestTimerTask();
timer.schedule(task,100);



}

}

图片没出来

上面程序想实现的是创建窗体后 可以手动关闭或者一段时间后自动关闭 源代码五本来是用来实现一段时间自动关闭的类 但是总是执行不到关闭的方法 就是好像是源代码五不认创建的这个窗体 现在我的问题是 一 我这个程序的问题在哪里 是线程的问题 还是 值传递的问题 二 我该如何去改 三 实现我这个流程还有什么其他方法没有 请高手指教 能帮助改代码的帮助改改代码 不能帮助改代码的 提供个方法思路也十分感谢 路过的帮顶的也谢了 真心求教 


------解决方案--------------------
楼主,首先我整理了半天才把你的程序跑通,因为我不明白你想执行的是什么意思,运行出来什么效果,我也就勉强修改运行了下,下面是源码:
Java code
package Poem;import org.eclipse.swt.widgets.Display;public class FirstwinThread extends Thread{  public static Paint demo;  public void run()  {    Display.getDefault().syncExec(new Runnable()    {      @Override      public void run()      {        demo = new Paint(null);      }    });    demo.setBlockOnOpen(true);    ForOneShuThread OneShu = new ForOneShuThread();    OneShu.start();    demo.open();  }}