jrubyfx 1.1.0-java → 2.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,143 +0,0 @@
1
- =begin
2
- JRubyFX - Write JavaFX and FXML in Ruby
3
- Copyright (C) 2013 The JRubyFX Team
4
-
5
- Licensed under the Apache License, Version 2.0 (the "License");
6
- you may not use this file except in compliance with the License.
7
- You may obtain a copy of the License at
8
-
9
- http://www.apache.org/licenses/LICENSE-2.0
10
-
11
- Unless required by applicable law or agreed to in writing, software
12
- distributed under the License is distributed on an "AS IS" BASIS,
13
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- See the License for the specific language governing permissions and
15
- limitations under the License.
16
- =end
17
- #:nodoc: all
18
-
19
- # Due to certain bugs in JRuby 1.7 (namely some newInstance mapping bugs), we
20
- # are forced to re-create the Launcher if we want a pure ruby wrapper
21
- # I can't wait to delete this. The _ONLY_ code that should use this is
22
- # JRubyFX::Application.launch. Do _NOT_ use this code anywhere else.
23
- module JavaFXImpl #:nodoc: all
24
- java_import 'com.sun.javafx.application.PlatformImpl'
25
- java_import 'javafx.stage.Stage'
26
-
27
- #JRuby, you make me have to create real classes!
28
- class FinisherInterface
29
- include PlatformImpl::FinishListener
30
-
31
- def initialize(&block)
32
- @exitBlock = block
33
- end
34
-
35
- def idle(someBoolean)
36
- @exitBlock.call
37
- end
38
-
39
- def exitCalled()
40
- @exitBlock.call
41
- end
42
- end
43
-
44
- class Launcher
45
- java_import 'java.util.concurrent.atomic.AtomicBoolean'
46
- java_import 'java.util.concurrent.CountDownLatch'
47
- java_import 'java.lang.IllegalStateException'
48
- java_import 'com.sun.javafx.application.ParametersImpl'
49
-
50
- @@launchCalled = AtomicBoolean.new(false) # Atomic boolean go boom on bikini
51
-
52
- def self.launch_app(application_class, *args)
53
- #prevent multiple!
54
- if @@launchCalled.getAndSet(true)
55
- throw IllegalStateException.new "Application launch must not be called more than once"
56
- end
57
-
58
- begin
59
- #create a java thread, and run the real worker, and wait till it exits
60
- count_down_latch = CountDownLatch.new(1)
61
- thread = Java.java.lang.Thread.new do
62
- begin
63
- launch_app_from_thread(application_class, args)
64
- rescue => ex
65
- puts "Exception starting app:"
66
- p ex
67
- p ex.backtrace
68
- end
69
- count_down_latch.countDown #always count down
70
- end
71
- thread.name = "JavaFX-Launcher"
72
- thread.start
73
- count_down_latch.await
74
- rescue => ex
75
- puts "Exception launching JavaFX-Launcher thread:"
76
- p ex
77
- puts ex.backtrace
78
- end
79
- end
80
-
81
- def self.launch_app_from_thread(application_class, args)
82
- #platformImpl startup?
83
- CountDownLatch.new(1).tap do |latch|
84
- PlatformImpl.startup { latch.countDown }
85
- latch.await
86
- end
87
-
88
- begin
89
- launch_app_after_platform(application_class, args)
90
- rescue => ex
91
- puts "Error running Application:"
92
- p ex
93
- puts ex.backtrace
94
- end
95
-
96
- PlatformImpl.tkExit # kill the toolkit and exit
97
- end
98
-
99
- def self.launch_app_after_platform(application_class, args)
100
- #listeners - for the end
101
- finished_latch = CountDownLatch.new(1)
102
-
103
- # register for shutdown
104
- PlatformImpl.addListener(FinisherInterface.new {
105
- # this is called when the stage exits
106
- finished_latch.countDown
107
- })
108
-
109
- application = application_class.new
110
-
111
- unless application.is_a? Java::javafx.application.Application
112
- raise "Invalid type: cannot launch non-Application"
113
- end
114
-
115
- ParametersImpl.registerParameters(application, ParametersImpl.new(args))
116
-
117
- application.init
118
-
119
- error = false
120
- #RUN! and hope it works!
121
- PlatformImpl.runAndWait do
122
- begin
123
- stage = Stage.new
124
- stage.impl_setPrimary(true)
125
- application.start(stage)
126
- # no countDown here because its up top... yes I know
127
- rescue => ex
128
- puts "Exception running Application:"
129
- p ex
130
- puts ex.backtrace
131
- error = true
132
- finished_latch.countDown # but if we fail, we need to unlatch it
133
- end
134
- end
135
-
136
- #wait for stage exit
137
- finished_latch.await
138
-
139
- # call stop on the interface
140
- application.stop unless error
141
- end
142
- end
143
- end