Java 通知弹出窗口不';不能使用单个实例运行

Java 通知弹出窗口不';不能使用单个实例运行,java,swing,single-instance,Java,Swing,Single Instance,我想在用户第二次尝试运行应用程序时显示弹出的通知,所以我创建NotificationPop obj并调用该方法在我的单实例类中显示对话框,但是,当应用程序第二次运行时,它不会显示弹出窗口。我的NotificationPop窗口没有问题。它功能正常。但是,当我在单个实例中调用它时,它不会显示。在Netbeans的“输出”窗口中,它显示的对话框也已关闭。我有没有错过任何一步 import java.io.File; import java.io.IOException; import java.io

我想在用户第二次尝试运行应用程序时显示弹出的通知,所以我创建NotificationPop obj并调用该方法在我的单实例类中显示对话框,但是,当应用程序第二次运行时,它不会显示弹出窗口。我的NotificationPop窗口没有问题。它功能正常。但是,当我在单个实例中调用它时,它不会显示。在Netbeans的“输出”窗口中,它显示的对话框也已关闭。我有没有错过任何一步

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class SingleInstance {

    public static File f;
    public static FileChannel channel;
    public static FileLock lock;
    public static TrayCon trayobj;
    public static boolean checkstatus;
    public static NotificationPop obj;

    public static void main(String args[]) throws IOException {
        try {
            f = new File("key");
            if (f.exists()) {
                f.delete();
            }
            channel = new RandomAccessFile(f, "rw").getChannel();
            lock = channel.tryLock();
            if (lock == null) {
                obj = new NotificationPop();
                obj.displaypopupmessage();
                System.exit(0);
                channel.close();
                throw new RuntimeException("Only 1 instance can run");
            }

            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {

                    trayobj = new TrayCon();
                    trayobj.CreateTrayCon(trayobj);
                }
            });

        } catch (IOException ex) {
        }
    }
}

好的,我已经添加了线程睡眠6秒,修复了这个问题

        if (lock == null) {

        obj = new NotificationPop();
        obj.proragramstatuswarning();
        Thread.sleep(6000);
        System.exit(0);
        channel.close();
        throw new RuntimeException("Only 1 instance can run");


    }

为什么要删除该文件(特别是在锁定部分之外)?您的意思是,如果是片段,让我将其添加到那里,我确信我在这里发布了两个(-3)个不同的代码,它们以SSCCE/MCVE格式(最重要)表示单实例文件IO/Socket/???,从你的代码是不可能的建议something@mad如果文件夹中已经存在文件,程序员应避免重复应用此问题可能对您有用: