質問編集履歴
1
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,549 +1,281 @@
|
|
1
1
|
# 発生した問題と行いたいこと
|
2
|
-
|
3
2
|
ご覧いただきありがとうございます。
|
4
|
-
|
5
3
|
現在、ZXingとJavaFXを使用した、文字列からQRコードを生成するプログラムを作成しています。
|
6
|
-
|
7
4
|
試作してみたプログラムをEclipseで実行し、対象をjarファイルにエクスポートして実行するところまでは確認できていました。
|
8
|
-
|
9
5
|
ですが、本日稼働を行ったところ、実行ができなくなりました。
|
10
|
-
|
11
6
|
原因を探ったところ、PCからLibericaをアンインストールしたことが原因であると判明いたしました。(Libericaを入れなおしたところ、稼働しました)
|
12
7
|
|
13
|
-
|
14
|
-
|
15
8
|
本プログラムをLibericaを使用しないで実行したいのですが、どの部分において問題であるか見当がつなかかったため、こちらに投稿させていただきました。
|
16
9
|
|
17
|
-
|
18
|
-
|
19
10
|
# 使用環境
|
20
11
|
|
21
|
-
|
22
|
-
|
23
12
|
OS:Windows10
|
24
|
-
|
25
13
|
Eclipse:Version:2021-09 (4.21.0)
|
26
|
-
|
27
14
|
java -version
|
28
|
-
|
29
15
|
openjdk version "17.0.1" 2021-10-19 LTS
|
30
|
-
|
31
16
|
OpenJDK Runtime Environment (build 17.0.1+12-LTS)
|
32
|
-
|
33
17
|
OpenJDK 64-Bit Server VM (build 17.0.1+12-LTS, mixed mode, sharing)
|
34
18
|
|
35
|
-
|
36
|
-
|
37
19
|
# 構成とEclipseで作成したソースコード
|
38
20
|
|
39
|
-
|
40
|
-
|
41
21
|
QRcodeapp
|
42
|
-
|
43
22
|
├─src
|
44
|
-
|
45
23
|
├─├─application
|
46
|
-
|
47
24
|
├─├─├─Main.java
|
48
|
-
|
49
25
|
├─├─├─QRcreator.java
|
50
|
-
|
51
26
|
├─├─├─application.css
|
52
|
-
|
53
27
|
├─├─├─Main.fxml
|
54
|
-
|
55
28
|
├─├─ctrl
|
56
|
-
|
57
29
|
├─├─├─Controller.java
|
58
|
-
|
59
30
|
├─module-info.java
|
60
31
|
|
61
32
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
33
|
```java
|
66
|
-
|
67
34
|
//Main.java
|
68
|
-
|
69
35
|
package application;
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
36
|
+
|
74
37
|
|
75
38
|
import javafx.application.Application;
|
76
|
-
|
77
39
|
import javafx.fxml.FXMLLoader;
|
78
|
-
|
79
40
|
import javafx.scene.Scene;
|
80
|
-
|
81
41
|
import javafx.scene.layout.VBox;
|
82
|
-
|
83
42
|
import javafx.stage.Stage;
|
84
43
|
|
85
|
-
|
86
|
-
|
87
44
|
public class Main extends Application {
|
88
|
-
|
89
45
|
@Override
|
90
|
-
|
91
46
|
public void start(Stage primaryStage) {
|
92
|
-
|
93
47
|
try {
|
94
|
-
|
95
48
|
VBox root = (VBox)FXMLLoader.load(getClass().getResource("Main.fxml"));
|
96
|
-
|
97
49
|
Scene scene = new Scene(root,600,450);
|
98
|
-
|
99
50
|
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
|
100
|
-
|
101
51
|
primaryStage.setScene(scene);
|
102
|
-
|
103
52
|
primaryStage.setTitle("QRコードに変換");
|
104
|
-
|
105
53
|
primaryStage.show();
|
106
|
-
|
107
54
|
} catch(Exception e) {
|
108
|
-
|
109
55
|
e.printStackTrace();
|
110
|
-
|
111
56
|
}
|
112
|
-
|
113
57
|
}
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
58
|
+
|
59
|
+
|
119
60
|
public static void main(String[] args) {
|
120
|
-
|
121
61
|
launch(args);
|
122
|
-
|
123
62
|
}
|
124
|
-
|
125
63
|
}
|
126
64
|
|
127
|
-
|
128
|
-
|
129
|
-
```
|
65
|
+
```
|
130
|
-
|
131
|
-
|
132
66
|
|
133
67
|
```java
|
134
|
-
|
135
68
|
//QRcreator.java
|
136
|
-
|
137
69
|
package application;
|
138
70
|
|
139
|
-
|
140
|
-
|
141
71
|
import java.awt.image.BufferedImage;
|
142
|
-
|
143
72
|
import java.util.Hashtable;
|
144
73
|
|
145
|
-
|
146
|
-
|
147
74
|
import com.google.zxing.BarcodeFormat;
|
148
|
-
|
149
75
|
import com.google.zxing.EncodeHintType;
|
150
|
-
|
151
76
|
import com.google.zxing.WriterException;
|
152
|
-
|
153
77
|
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
154
|
-
|
155
78
|
import com.google.zxing.common.BitMatrix;
|
156
|
-
|
157
79
|
import com.google.zxing.qrcode.QRCodeWriter;
|
158
|
-
|
159
80
|
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
|
160
81
|
|
161
|
-
|
162
|
-
|
163
82
|
//BufferedImageの画像データをjavaFXのImageに変換する
|
164
|
-
|
165
83
|
import javafx.embed.swing.SwingFXUtils;
|
166
|
-
|
167
84
|
import javafx.fxml.FXML;
|
168
|
-
|
169
85
|
import javafx.scene.image.Image;
|
170
86
|
|
171
|
-
|
172
|
-
|
173
87
|
public class QRcreator {
|
174
88
|
|
175
|
-
|
176
|
-
|
177
|
-
@FXML
|
89
|
+
@FXML
|
178
|
-
|
179
90
|
private Image FXimage;
|
180
91
|
|
181
92
|
|
182
93
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
94
|
public Image rtnQrImg(String txtFld){
|
188
|
-
|
189
95
|
try {
|
190
|
-
|
191
96
|
String contents = txtFld;
|
192
|
-
|
193
97
|
BarcodeFormat format = BarcodeFormat.QR_CODE;
|
194
|
-
|
195
98
|
int width = 160;
|
196
|
-
|
197
99
|
int height = 160;
|
198
100
|
|
199
|
-
|
200
|
-
|
201
101
|
Hashtable hints = new Hashtable();
|
202
|
-
|
203
102
|
//日本語を扱うためにシフトJISを指定
|
204
|
-
|
205
103
|
hints.put(EncodeHintType.CHARACTER_SET, "Shift_JIS");
|
206
|
-
|
207
104
|
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
|
208
105
|
|
209
|
-
|
210
|
-
|
211
106
|
QRCodeWriter writer = new QRCodeWriter();
|
212
|
-
|
213
107
|
BitMatrix bitMatrix = writer.encode(contents, format, width, height, hints);
|
214
|
-
|
215
108
|
BufferedImage image = MatrixToImageWriter.toBufferedImage(bitMatrix);
|
216
|
-
|
217
109
|
FXimage = SwingFXUtils.toFXImage(image, null);
|
218
110
|
|
219
|
-
|
220
|
-
|
221
111
|
}
|
222
|
-
|
223
112
|
|
224
|
-
|
225
113
|
catch (WriterException e) {
|
226
|
-
|
227
114
|
e.printStackTrace();
|
228
|
-
|
229
115
|
}
|
230
|
-
|
231
116
|
return FXimage;
|
232
|
-
|
233
117
|
}
|
234
|
-
|
235
118
|
}
|
236
|
-
|
237
|
-
```
|
119
|
+
```
|
238
|
-
|
239
120
|
```java
|
240
|
-
|
241
121
|
//Controller.java
|
242
|
-
|
243
122
|
package ctrl;
|
244
123
|
|
245
|
-
|
246
|
-
|
247
124
|
import java.net.URL;
|
248
|
-
|
249
125
|
import java.util.ResourceBundle;
|
250
126
|
|
251
|
-
|
252
|
-
|
253
127
|
import application.QRcreator;
|
254
|
-
|
255
128
|
import javafx.event.ActionEvent;
|
256
|
-
|
257
129
|
import javafx.fxml.FXML;
|
258
|
-
|
259
130
|
import javafx.fxml.Initializable;
|
260
|
-
|
261
131
|
import javafx.scene.control.Button;
|
262
|
-
|
263
132
|
import javafx.scene.control.TextField;
|
264
|
-
|
265
133
|
import javafx.scene.image.Image;
|
266
|
-
|
267
134
|
import javafx.scene.image.ImageView;
|
268
135
|
|
269
|
-
|
270
|
-
|
271
136
|
/* module-infoに「opens ctrl to javafx.fxml;」を追加することで、
|
272
|
-
|
273
137
|
* このファイルがjavafxを利用できるようになる*/
|
274
138
|
|
275
|
-
|
276
|
-
|
277
139
|
public class Controller implements Initializable {
|
278
|
-
|
279
|
-
|
280
|
-
|
140
|
+
|
281
141
|
public QRcreator qr;
|
282
|
-
|
283
142
|
private String txtFld;
|
284
|
-
|
285
|
-
|
286
|
-
|
143
|
+
|
287
144
|
/** テキストフィールド */
|
288
|
-
|
289
|
-
@FXML
|
145
|
+
@FXML
|
290
|
-
|
291
146
|
private TextField textBox;
|
292
147
|
|
293
|
-
|
294
|
-
|
295
148
|
/** ボタン */
|
296
|
-
|
297
|
-
@FXML
|
149
|
+
@FXML
|
298
|
-
|
299
150
|
private Button button;
|
300
|
-
|
301
|
-
|
302
|
-
|
151
|
+
|
303
|
-
@FXML
|
152
|
+
@FXML
|
304
|
-
|
305
153
|
private ImageView qrimage;
|
306
|
-
|
307
|
-
|
308
|
-
|
154
|
+
|
309
|
-
@FXML
|
155
|
+
@FXML
|
310
|
-
|
311
156
|
private Image rtnQrImage;
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
157
|
+
|
316
158
|
|
317
159
|
@Override
|
318
|
-
|
319
160
|
public void initialize(URL location, ResourceBundle resources) {
|
320
|
-
|
321
161
|
// 処理なし
|
322
|
-
|
323
162
|
}
|
324
163
|
|
325
|
-
|
326
|
-
|
327
|
-
@FXML
|
164
|
+
@FXML
|
328
|
-
|
329
165
|
public void onClick(ActionEvent event) {
|
330
|
-
|
331
166
|
// テキストボックスに文字列をセットする
|
332
|
-
|
333
167
|
txtFld = textBox.getText();
|
334
|
-
|
335
|
-
qr = new QRcreator();
|
168
|
+
qr = new application.QRcreator();
|
336
|
-
|
337
169
|
rtnQrImage = qr.rtnQrImg(txtFld);
|
338
|
-
|
339
170
|
qrimage.setImage(rtnQrImage);
|
340
|
-
|
341
171
|
}
|
342
172
|
|
343
|
-
|
344
|
-
|
345
173
|
}
|
346
|
-
|
347
|
-
```
|
174
|
+
```
|
348
|
-
|
349
|
-
|
350
175
|
|
351
176
|
```Java
|
352
|
-
|
353
177
|
//module-info.java
|
354
|
-
|
355
178
|
module QRcodeapp {
|
356
|
-
|
357
179
|
exports application;
|
358
|
-
|
359
180
|
exports ctrl;
|
360
181
|
|
361
|
-
|
362
|
-
|
363
182
|
requires javafx.base;
|
364
|
-
|
365
183
|
requires javafx.controls;
|
366
|
-
|
367
184
|
requires javafx.fxml;
|
368
|
-
|
369
185
|
requires javafx.graphics;
|
370
|
-
|
371
186
|
requires java.desktop;
|
372
|
-
|
373
187
|
requires com.google.zxing;
|
374
|
-
|
375
188
|
requires com.google.zxing.javase;
|
376
|
-
|
377
189
|
requires javafx.swing;
|
378
|
-
|
379
|
-
|
380
|
-
|
190
|
+
|
381
191
|
opens ctrl to javafx.fxml;
|
382
|
-
|
383
192
|
}
|
384
|
-
|
385
|
-
```
|
193
|
+
```
|
386
|
-
|
387
|
-
|
388
194
|
|
389
195
|
# jarファイルの構成
|
390
196
|
|
391
|
-
|
392
|
-
|
393
197
|
jarファイルは起動構成を「Main.java」の「Main」に設定し、「QRapp.jar」という名称でエクスポートしました。
|
394
|
-
|
395
198
|
jarファイルは以下の構成で実行しています。
|
396
199
|
|
397
|
-
|
398
|
-
|
399
200
|
jartest
|
400
|
-
|
401
201
|
├─lib
|
402
|
-
|
403
202
|
├─├─core-3.4.0.jar
|
404
|
-
|
405
203
|
├─├─javafx.base.jar
|
406
|
-
|
407
204
|
├─├─javafx.controls.jar
|
408
|
-
|
409
205
|
├─├─javafx.fxml.jar
|
410
|
-
|
411
206
|
├─├─javafx.graphics.jar
|
412
|
-
|
413
207
|
├─├─javafx.media.jar
|
414
|
-
|
415
208
|
├─├─javafx.swing.jar
|
416
|
-
|
417
209
|
├─├─javafx.web.jar
|
418
|
-
|
419
210
|
├─├─javafx-swt.jar
|
420
|
-
|
421
211
|
├─├─javase-3.4.0.jar
|
422
|
-
|
423
212
|
├─├─org.eclipse.fx.ide.css.jfx8_3.7.0.202010120832.jar
|
424
|
-
|
425
213
|
├─actjar.bat
|
426
|
-
|
427
214
|
├─QRapp.jar
|
428
215
|
|
429
|
-
|
430
|
-
|
431
216
|
actjar.batでは、VM引数を設定してjarファイルを実行しています。
|
432
|
-
|
433
217
|
```bat
|
434
|
-
|
435
218
|
@echo off
|
436
|
-
|
437
219
|
@set hensu=%~dp0
|
438
|
-
|
439
220
|
@set JAVA_FX=%hensu%lib
|
440
|
-
|
441
221
|
java --module-path %JAVA_FX% --add-modules=javafx.controls,javafx.fxml -jar Qrapp.jar
|
442
|
-
|
443
|
-
```
|
222
|
+
```
|
444
|
-
|
445
|
-
|
446
223
|
|
447
224
|
実行すると、以下のようになります。
|
448
|
-
|
449
225
|
![実行結果](3005f0730198df3e0f0d92bb583d1a6f.png)
|
450
226
|
|
451
|
-
|
452
|
-
|
453
227
|
# Liberica及びエラー画面について
|
454
228
|
|
455
|
-
|
456
|
-
|
457
229
|
[Libericaはここから持って来てインストールしました。](https://bell-sw.com/pages/downloads/#/java-17-lts%20/%20current)
|
458
|
-
|
459
230
|
「Liberica Full JDK 17.0.1+12 x86 64 bit for Windows」をMSIで落としています。
|
460
231
|
|
461
|
-
|
462
|
-
|
463
232
|
Libericaをアンインストールし、再びjarファイルを実行すると、以下のようなエラーが表示されます。
|
464
|
-
|
465
233
|
```error
|
466
|
-
|
467
234
|
Graphics Device initialization failed for : d3d, sw
|
468
|
-
|
469
235
|
Error initializing QuantumRenderer: no suitable pipeline found
|
470
|
-
|
471
236
|
java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
|
472
|
-
|
473
237
|
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:283)
|
474
|
-
|
475
238
|
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:254)
|
476
|
-
|
477
239
|
at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:264)
|
478
|
-
|
479
240
|
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291)
|
480
|
-
|
481
241
|
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163)
|
482
|
-
|
483
242
|
at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659)
|
484
|
-
|
485
243
|
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:410)
|
486
|
-
|
487
244
|
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364)
|
488
|
-
|
489
245
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
490
|
-
|
491
246
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
|
492
|
-
|
493
247
|
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
494
|
-
|
495
248
|
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
|
496
|
-
|
497
249
|
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
|
498
|
-
|
499
250
|
Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
|
500
|
-
|
501
251
|
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:95)
|
502
|
-
|
503
252
|
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
|
504
|
-
|
505
253
|
at java.base/java.lang.Thread.run(Thread.java:833)
|
506
|
-
|
507
254
|
Exception in thread "main" java.lang.reflect.InvocationTargetException
|
508
|
-
|
509
255
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
510
|
-
|
511
256
|
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
|
512
|
-
|
513
257
|
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
514
|
-
|
515
258
|
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
|
516
|
-
|
517
259
|
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
|
518
|
-
|
519
260
|
Caused by: java.lang.RuntimeException: No toolkit found
|
520
|
-
|
521
261
|
at javafx.graphics/com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:276)
|
522
|
-
|
523
262
|
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:291)
|
524
|
-
|
525
263
|
at javafx.graphics/com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:163)
|
526
|
-
|
527
264
|
at javafx.graphics/com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:659)
|
528
|
-
|
529
265
|
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:410)
|
530
|
-
|
531
266
|
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364)
|
532
|
-
|
533
267
|
... 5 more
|
534
268
|
|
535
|
-
|
536
|
-
|
537
|
-
```
|
269
|
+
```
|
538
|
-
|
539
|
-
|
540
270
|
|
541
271
|
こちらのエラーはEclipse上では発生せず、エクスポートしたjarファイルの実行時に発生しています。
|
542
|
-
|
543
272
|
エラー内容からして、Libericaに同梱されていたjavaFXに対して別途処理が必要な気がするのですが、様々な方法を実行した結果、エラー解決に至らず、こちらに投稿させていただきました。
|
544
273
|
|
545
|
-
|
546
|
-
|
547
274
|
長文の投稿やお見苦しい点が多いかと思いますが、何卒ご支援の程をいただければ幸いです。
|
548
|
-
|
549
275
|
よろしくお願いいたします。
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
|