質問編集履歴

1

2022/01/13 13:00

投稿

kuritake
kuritake

スコア14

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
+