Написать в приложении JFX холст из другой темы - PullRequest
0 голосов
/ 26 августа 2018

Запустите приложение и поговорите с ним через другие классы (не инициированные в момент запуска). Я хочу создать мультиприложение с несколькими окнами и взаимодействующим потоком одно за другим.

Я объясню свою проблему сне слишком общий вопрос.У меня есть ApplicationPane Application 1: как создать экземпляр GUI с аргументами объекта?Это первая часть вопроса.В целом, когда я работаю над проектом, у меня, естественно, есть внешний интерфейс (здесь GUI JavaFX) и внутренний интерфейс (один или несколько потоков, на которые ссылается объект «Бэкэнд».

public static void main(String... args) {

    SampleDrawingProcessor sampleDrawingProcessor = new SampleDrawingProcessor();


    Oscillator os1 = new Oscillator(440, SoundProductionSystem.Waveform.SIN);

    os1.getOutProcessors().put("Drawing samples", sampleDrawingProcessor);


    ApplicationPane applicationPane = new ApplicationPane(sampleDrawingProcessor);


    os1.start();

    sampleDrawingProcessor.start();

}
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
 at be.manudahmen.mylittlesynth.processor.AudioViewer.render(AudioViewer.java:71)
 at be.manudahmen.mylittlesynth.processor.AudioViewer$CanvasRedrawTask.handle(AudioViewer.java:201)
 at javafx.animation.AnimationTimer$AnimationTimerReceiver.lambda$handle$485(AnimationTimer.java:57)
 at java.security.AccessController.doPrivileged(Native Method)
 at javafx.animation.AnimationTimer$AnimationTimerReceiver.handle(AnimationTimer.java:56)
 at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:357)
 at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:267)
 at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:514)
 at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:498)
 at com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:491)
 at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$403(QuantumToolkit.java:319)
 at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
 at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
 at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
 at java.lang.Thread.run(Thread.java:748)
public static void testOscillator() {
    ApplicationPane.main();
}

public static void main(String ... args)
{
    ApplicationPane applicationPane = new ApplicationPane();

    SampleDrawingProcessor sampleDrawingProcessor = new SampleDrawingProcessor(applicationPane);

    Oscillator os1 = new Oscillator(440, SoundProductionSystem.Waveform.SIN);
    os1.getOutProcessors().put("Drawing samples", sampleDrawingProcessor);
    os1.start();

    sampleDrawingProcessor.start();
}

Кажется, проблема в ссылке на приложение после new ApplicationPane(), кажется, null или холст, созданный при запуске, null.

   if(app==null)
        System.exit(-1);
    Canvas drawingZone = app.
            getDrawingZone();
    if(drawingZone==null)
        System.exit(-2);
    GraphicsContext context2D = drawingZone.getGraphicsContext2D();
"C:\Program Files\Java\jdk1.8.0_171\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.6\lib\idea_rt.jar=57668:C:\Program Files\JetBrains\IntelliJ IDEA 2017.1.6\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_171\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_171\lib\javafx-mx.jar;C:\Users\Win\IdeaProjects\MyLittleSynth\out\production\MyLittleSynth;C:\Users\Win\IdeaProjects\MyLittleSynth\lib\empty3-64.jar;C:\Users\Win\IdeaProjects\MyLittleSynth\lib\xuggler-3.4.jar" be.manudahmen.mylittlesynth.processor.apps.ApplicationPane

Process finished with exit code -2
    GraphicsContext context2D = drawingZone.getGraphicsContext2D();

1 Ответ

0 голосов
/ 26 августа 2018

Ну, теперь я понимаю, что приложение не может быть создано с новым ключевым словом.Я помещаю задачу в метод start (Stage), создавая ссылки на другие потоки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...