Java 在Netbeans平台中打开窗口时,我将DB代码放在哪里?

Java 在Netbeans平台中打开窗口时,我将DB代码放在哪里?,java,netbeans,netbeans-platform,Java,Netbeans,Netbeans Platform,我有一个Netbeans平台应用程序。打开主框架后,我想用从数据库中提取的元素填充GUI表 哪里是拥有此代码的最佳位置?我已经尝试过ComponentOpen方法,但是我遇到了线程死锁。即使使用invokeLater,我也会遇到线程问题 @Override public void componentOpened() { SwingUtilities.invokeLater(new Runnable() { @Override public vo

我有一个Netbeans平台应用程序。打开主框架后,我想用从数据库中提取的元素填充GUI表

哪里是拥有此代码的最佳位置?我已经尝试过ComponentOpen方法,但是我遇到了线程死锁。即使使用invokeLater,我也会遇到线程问题

    @Override
public void componentOpened() {

    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {

            List<UserBO> al = UserDelegate.getInstance().getUsers();

            for (UserBO u : al) {

                System.out.println("User " + u);
            }
        }
    });

    // TODO add custom code on component opening
}

上述代码总是导致线程死锁。我不确定ComponentOpen是否正确的方法是使用此代码。

解决方案。将DB读取代码放入组件ie Top组件的构造函数中。然后使用Netbeans请求处理器

    public EditorTopComponent() {
    initComponents();
    setName(Bundle.CTL_EditorTopComponent());
    setToolTipText(Bundle.HINT_EditorTopComponent());

    RequestProcessor.getDefault().post(new Runnable () {
        @Override
        public void run() {


            List<UserBO> al = UserDelegate.getInstance().getUsers();

            System.out.println("Users dude ");

            for (UserBO u : al) {
                System.out.println("User " + u);
            }
        }
    });
}

这现在可以工作了

为什么不使用单独的SQL类与SQL交互?它位于每个集合的单个委托中的单独类中,代码/堆栈跟踪将帮助我们了解发生了什么情况如果您有线程死锁的困难使用swingWorker、Timer或ScheduledThreadPoolExecutor