解决方案 »
- 构造方法问题,子类main()方法有new对象,main()方法外也有new对象,运行时出错了
- 希望有经验的人帮我大一下,谢谢大家
- jar 包class动态加载问题 ,请高手指教 !
- 关于float类型和int类型
- PHP的crypt()生成的密文,我用java怎么验证?
- 关于类的继承出了问题!
- 刚看到一篇所谓的精华文章,关于package和classpath的,在下觉得有话要说,来着有分!
- vj++打开Form1.java的时候,出现错误:"java.lang.IllegalAccessError: com/ms/wfc/util/Debug$Switch"
- 关于applet,求救!!! 在线等!!!
- 高手请进!
- url.openStream()和url.openConnection().getInputStream()两者区别
- 在线等JOptionPane.showMessageDialog(null, stroutput)对齐?
public static void main(String[] args) {
JXFrame frame = new JXFrame("test", true);
JXBusyLabel label = new JXBusyLabel();
frame.add(label);
frame.setSize(200, 300);
//...
label.setBusy(true);
frame.setVisible(true);
}你那个多线程去看下CountDownLatch。
下面是我以前项目里和你的需求一样的BusyDialog bd = new BusyDialog();
ExecutorService executor = Executors
.newCachedThreadPool(); CountDownLatch latch = new CountDownLatch(1);
CopyWorker w1 = new CopyWorker(latch, "CopyWorker",
file, des);
LodingWorker loading = new LodingWorker(latch, bd); executor.execute(w1);
executor.execute(loading);
executor.shutdown();
问题就是不能显示在父窗口的上方,这一句我理解有点偏差,可以的话楼主发个图。。我的理解是这种效果么?
是的 弹出的框不能显示在主界面上方 弹窗是在父线程中完成的 但是弹窗后马上new Thread了一个新线程来执行一些耗时的代码同是父线程阻塞住 等带新开线程中任务执行完后父线程再执行。
现在的问题就是在不新开线程的情况下能正常弹窗,但是在新开线程后弹窗就人在主窗口下面了 怎么也显示不出来
可以从图中明显看到弹出框是有的 就是不能显示在上面
谢谢 CountDownLatch挺好用的比我手动notify方便多了 但是我的问题是弹窗还是不能显示在主界面上方
谢谢 CountDownLatch挺好用的比我手动notify方便多了 但是我的问题是弹窗还是不能显示在主界面上方
我弹窗是直接定义好了位置的,
x,y,w,h
setBounds(300, 300, 400, 400);
可以的话楼主可以试一试先获取父类的x,y,然后算出弹窗应该所在的x,y,然后设置到弹窗类中
在新建一个子窗口的时候就在构造方法里面把父窗口传进去
public ChildFrame(JFrame parantFrame){
this.parantFrame = parantFrame;
}public void initComponent() {
Point p = parantFrame.getLocation();
this.setLocation(p.getX(),p.getY()-100);
...}
大概这么写
新的Jframe我也设置了setAlwaysOnTop 就是不能显示在主界面上方
新的Jframe我也设置了setAlwaysOnTop 就是不能显示在主界面上方javax.swing.Timer 是推荐的方式,自己用其他线程维护动画,几乎可以肯定有线程安全问题或者违反EDT法则的地方。如果是为了显示动画,我会选择用 glass pane。具体到你的问题,最好不要在一个程序里出现多于一个 JFrame,用 modal 的 JDialog。
新的Jframe我也设置了setAlwaysOnTop 就是不能显示在主界面上方javax.swing.Timer 是推荐的方式,自己用其他线程维护动画,几乎可以肯定有线程安全问题或者违反EDT法则的地方。如果是为了显示动画,我会选择用 glass pane。具体到你的问题,最好不要在一个程序里出现多于一个 JFrame,用 modal 的 JDialog。
谢谢提醒 的确是和线程有关的问题 但是我换回用Timer的方式了 情况还是一样 现在就是在父线程生成loading效果的弹框,然后new一个新的线程执行一耗时任务,并在执行完后将父线程中生成的loading弹框关掉。
问题来了:如果主线程在生成弹框后的代码中没有类似sleep,wait,await这样的阻塞代码,能达到我要的显示效果。
但是这个不符合我的逻辑呀,父线程中后面的代码需要用到子线程中任务的结果,不等待子线程完成的话会有空指针。但是一旦采用阻塞父线程来等待子线程完成然后唤醒父线程的方式,弹窗又出不来。很纠结