Как использовать MessageDialog.open () с QUESTION_WITH_CANCEL?

Достаточно легко читать подпись файла класса и получить эти значения без стороннего API. Все, что необходимо сделать, читается первые 8 байтов.

ClassFile {
    u4 magic;
    u2 minor_version;
    u2 major_version;

Для версии файла 51.0 класса (Java 7), вводные байты:

CA FE BA BE 00 00 00 33

..., где 0xCAFEBABE являются волшебными байтами, 0x0000 является вспомогательной версией, и 0x0033 является основной версией.

import java.io.*;

public class Demo {
  public static void main(String[] args) throws IOException {
    ClassLoader loader = Demo.class.getClassLoader();
    try (InputStream in = loader.getResourceAsStream("Demo.class");
        DataInputStream data = new DataInputStream(in)) {
      if (0xCAFEBABE != data.readInt()) {
        throw new IOException("invalid header");
      }
      int minor = data.readUnsignedShort();
      int major = data.readUnsignedShort();
      System.out.println(major + "." + minor);
    }
  }
}

каталоги Обхода ( Файл ) и архивы ( JarFile) поиск файлов класса тривиален.

Oracle блог Joe Darcy перечисляет версия класса к отображениям версии JDK до Java 7:

Target   Major.minor Hex
1.1      45.3        0x2D
1.2      46.0        0x2E
1.3      47.0        0x2F
1.4      48.0        0x30
5 (1.5)  49.0        0x31
6 (1.6)  50.0        0x32
7 (1.7)  51.0        0x33
8 (1.8)  52.0        0x34
9        53.0        0x35

8
задан DJ. 10 November 2009 в 23:27
поделиться

2 ответа

Вы не можете использовать статический метод MessageDialog.open (набор параметров) , вам нужно будет создать диалог и вызвать нестатический open () самостоятельно, чтобы проверить его возвращаемое значение.

    MessageDialog dg = new MessageDialog(
            window.getShell(),
            "My title",
            null,
            "My question",
            MessageDialog.QUESTION_WITH_CANCEL, 
            new String[]{
                IDialogConstants.YES_LABEL, 
                IDialogConstants.NO_LABEL, 
                IDialogConstants.CANCEL_LABEL},
            0
            );
    switch(dg.open()) {
    case 0: 
        //yes
        System.out.println("yes");
        break;
    case 1:
        //no
        System.out.println("no");
        break;
    case 2:
        //cancel
        System.out.println("cancel");
        break;
    }
14
ответ дан 5 December 2019 в 12:10
поделиться

Глядя на JavaDoc , я считаю, что Нет и Отмена имеют одинаковый эффект: false

Returns:
    true if the user presses the OK or Yes button, false otherwise
0
ответ дан 5 December 2019 в 12:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: