cypher256 / pleiades.io

Pleiades による Eclipse などの IDE 製品翻訳や JetBrains 製品のオンラインヘルプ日本語サイト https://pleiades.io や https://spring.pleiades.io の誤訳や問題を管理します。
https://willbrains.jp/
27 stars 2 forks source link

2020-03 で Swing を使ったアプリが実行時エラーとなる #52

Closed jun-mitani closed 4 years ago

jun-mitani commented 4 years ago

Java Windows 64bit Full Edition にて、 2019-12のEclipseでは、問題なく動作したSwingを使ったアプリ(たとえば、次のような、フレームを1つ表示するだけのもの)が、2020-03 のEclipseでは実行時エラーが生じるようになりました(JRE システム・ライブラリーは標準のjava11)。

import javax.swing.JFrame;

public class SWTest {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,300);
        frame.setVisible(true);
    }
}

具体的には次のようなエラーがでます。awt.dll で問題が生じているように見受けられます。

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffa6a78fa16, pid=18968, tid=128
#
# JRE version: OpenJDK Runtime Environment (11.0.6+10) (build 11.0.6+10)
# Java VM: OpenJDK 64-Bit Server VM (11.0.6+10, mixed mode, tiered, compressed oops, g1 gc, windows-amd64)
# Problematic frame:
# C  [awt.dll+0x8fa16]

コマンドラインで、

pleiades-2020-03-java-win-64bit-jre_20200322\pleiades\java\11\bin\java SWTest

とすれば問題なく動作し、Swingのフレームが表示されます。

なお、Pleiades にて日本語化されていない標準の Eclipse 2020-03 (java11使用)では、問題なく動作することを確認しました。

2019-12 から 2020-03 に移行したことによる影響として、どのようなことが考えられるでしょうか。

cypher256 commented 4 years ago

Java 11、UTF-8 での実行に問題があるようです。

素の Eclipse では、MS932 になっています。 Pleiades All in One のデフォルトは UTF-8 です。 以下のいずれかを UTF-8 ではなく、MS932 にしてみてください。 設定優先度の高い順に記載しています。

  1. 実行構成 > 共通 > エンコーディング
  2. プロジェクト・プロパティー > リソース > テキスト・ファイル・エンコーディング
  3. 設定 > 一般 > ワークスペース > テキスト・ファイル・エンコーディング
jun-mitani commented 4 years ago

回答ありがとうございます。 Pleiades をいつもありがたく使わせていただいており、感謝しています。

ご指摘の通り、エンコーディングを MS932 にすることでエラーが発生しなくなりました。 逆に、素のEclipse 2020-03 で UTF-8 にすると、同様のエラーが生じることを確認しました。

さしあたってはこれで構わないのですが、2019-12 では UTF-8 で問題なく動作していたようなので、2020-03ではダメなのはなぜなのか不思議です。 でも、この疑問は素のEclipseでの問題であって、Pleiades のサポート範囲を超えていますね。

ありがとうございました!