Java 线程:无法创建新线程并终止/中断旧线程

Java Threads: Unable to create new Thread and killing / interrupting old Thread

我是 java 线程的新手,我只是 运行 遇到了一个小组项目的问题:

//编辑:该程序是一个 JFrame,需要一种 "relaunch" 来加载属性文件更改。

我们有一个程序,您可以在其中更改某些属性。 为了使更改生效,程序需要使用新的 JVM 重新启动/重新启动(在我看来?)

问题如下:

我已经创建了一个线程,它实际上启动了我们的程序,稍后,更改将触发程序创建一个新线程。这是有效的,但我无法终止旧线程。如果我尝试这样做("X" 或以编程方式),我会同时杀死两个实例。 所以实际上没有 2 个线程? - 否则他们应该分开对待,不是吗?

另一方面,当使用 Thread.currentThread().interrupt() 时,两个实例都将保留,但我无法执行任何操作。

主题发起人:

public static void createNewInstance() {
prog = new Runnable() {
        @Override
        public void run() {
            try {
                 //loading propertie data into String[] array..
                 Start.main(String[] array);
                 while (true)  {
                        if (!isRunning) {
                            currentThread().interrupt();
                            createNewInstance();
                            isRunning = !isRunning;
                        }
                 }
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
            }
        }
    };
    new Thread(prog).start();
}

并且在更改事件中:

        MyThread.isRunning = false;
        Thread.currentThread().interrupt();

因为这对我来说是新的,我无法弄清楚我应该如何实现这一目标,我感谢您提供的任何建议和迄今为止我所犯的任何错误。 (抱歉有任何错误 - 我不是母语人士)

提前致谢!

----解决方法:----

在我的例子中,属性更改与新语言设置有关:DE ->EN
我的消息:
public class Messages { private static String bundle_name = "com.ttr.language.messages" + new PropertiesClass().getProperty("lang"); //$NON-NLS-1$ private static ResourceBundle resource_bundle = ResourceBundle.getBundle(bundle_name);

然后我将这个方法添加到消息 class:

public static void updateProperties(String language) { bundle_name = "com.ttr.language.messages" + language; resource_bundle = ResourceBundle.getBundle(bundle_name); }

并在我的程序中使用了它:

props.setProperty("lang", "EN"); <- 示例 Messages.updateProperties(props.getProperty("lang"));
//dispose window and start login

假设 XThread 是实现您的 functionality.When 的线程,您可以调用 terminateThread() 来停止前一个 运行ning 线程并调用 getInstance() 来运行 具有新属性的新线程。

 class XThread implements Runnable{

        private static Thread rT = null;
        private XThread()
        {}
        public static void terminateThread()
        {
            rT = null;
        }

        public static Thread getInstance()
        {
            if(rT==null)
            {
                rT = new Thread(new XThread());
            }
            return rT;
        }

        public void run()
        {
         //whatever functionality you want to add
        }
    }

希望对您有所帮助:)