スレッドを開始したスレッドからステータスを設定したいスレッドがあります。私はこのコードを持っている:スレッドを制御する変数に割り当てる
public static AnimationThread animThread;
public static void main(String args[]) {
animThread = new AnimationThread();
}
public synchronized static void restart() {
animThread.setDead();
}
私はちょうどスレッドが終了する原因になりますブールフラグを設定されてsetDeadメソッドを呼び出すと、私はNULLポインタを取得しています。 デバッグでは、animThread変数が決して割り当てられていないことがはっきり分かります。
ご迷惑をおかけして申し訳ありません。 おかげ
public class Manager {
public static Graph graph = new Graph();
public static Gui gui;
public static AnimationThread animThread;
private static boolean forcedNew = false;
public static void main(String args[]) {
gui = new Gui();
gui.launch();
animThread = new AnimationThread();
}
public synchronized static void restart() {
forcedNew = true;
if (EventQueue.getAnimationCounter() != 0) {
EventQueue.insertEvent(EventQueue.getAnimationCounter()+1, new EndOfAlgo());
}
animThread.setDead();
EventQueue.resetEventQueue();
animThread = new AnimationThread();
gui.killGUI();
gui = new Gui();
graph = new Graph();
gui.launch();
forcedNew = false;
}
public static boolean getForcedStatus() {
return forcedNew;
}
}
これは私が(上記)からスレッドを制御するクラスです
スタックトレース:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at animation.main.Manager.restart(Manager.java:27)
at animation.gui.Gui$ListenMenuNew.actionPerformed(Gui.java:112)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)`
これは明らかに機能するはずなので、残りのコードで何か他のことが起こっているはずです。 NullPointerExceptionを示すスタックトレースと共に、コードをさらに投稿できますか? – ziesemer
このコードで何か問題はありません。問題を実証するためにできるだけ小さなテストをしてから、完全な例を投稿してください。 – erickson
投稿するSSCCE(http://sscce.org/) – nebula