Ошибка при импорте AWTUtilities

Я пытаюсь использовать AWTUtilities, если они включены, поэтому я использую способы

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.*;


public class MenuPrincipal extends Llaves{

    JFrame Frame=new JFrame();

    }; 

    public MenuPrincipal() {

        try {Class.forName("com.sun.awt.AWTUtilities"); } catch (Exception e) {}
        Frame.setSize(600, 500);
        Frame.setResizable(false);
        Frame.setUndecorated(true);
        Frame.setLayout(null);
        Frame.setLocationRelativeTo(null);
        Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Frame.getContentPane().setBackground(Color.WHITE);
        try {AWTUtilities.setWindowOpaque(Frame, false); } catch (Exception e) {}
    }

поэтому он показывает ошибку, когда я пытаюсь скомпилировать с NetBeans

try {AWTUtilities.setWindowOpaque(Frame, false); } catch (Exception e) {}

но если я использую этот импорт, проблема решена

import com.sun.awt.AWTUtilities;

но когда я запускаю jar на ПК без AWTUtilities, он выдает ошибку при импорте

import com.sun.awt.AWTUtilities;

Я не могу добавить try catch() в импорт, что мне делать?

1 ответ

Решение

Обращая внимание на "другие" проблемы компилятора с примером кода, NetBeans или, что более важно, Java выводит 2 предупреждения

C:\Users\Shane Whitehead\Documents\NetBeansProjects\JavaApplication28\src\javaapplication28\MenuPrincipal.java:8: warning: AWTUtilities is internal proprietary API and may be removed in a future release
import com.sun.awt.AWTUtilities;
C:\Users\Shane Whitehead\Documents\NetBeansProjects\JavaApplication28\src\javaapplication28\MenuPrincipal.java:30: warning: AWTUtilities is internal proprietary API and may be removed in a future release
            AWTUtilities.setWindowOpaque(Frame, false);
            ^
2 warnings

Они пытаются сказать вам, что вы использовали частный API, API, который может быть удален в будущем и который на самом деле больше не нужен, если вы используете Java 7+

См. Как создать полупрозрачные и фасонные окна для более подробной информации.

обновленный

Теперь, основываясь на вашем примере, ваш код будет компилироваться, но может не работать на версиях Java ниже 6u10. Вы должны рассмотреть возможность использования небольшого отражения, чтобы преодолеть ситуацию, когда API (AWTUtilities) не существует, например...

public static void setOpaque(Window window, boolean opaque) {

    try {

        Class<?> awtUtilsClass = Class.forName("com.sun.awt.AWTUtilities");
        if (awtUtilsClass != null) {

            Method method = awtUtilsClass.getMethod("setWindowOpaque", Window.class, boolean.class);
            method.invoke(null, window, opaque);

        }

    } catch (Exception exp) {
    }

}

Вы также можете использовать что-то вроде...

public static boolean supportsPerAlphaPixel() {

    boolean support = false;

    try {

        Class<?> awtUtilsClass = Class.forName("com.sun.awt.AWTUtilities");
        support = true;

    } catch (Exception exp) {
    }

    return support;

}

Чтобы определить, доступна ли поддержка прозрачности, и принять решение о том, будете ли вы работать или нет... в качестве примера

Обновлено на основе отзывов

Exception in thread "main" java.lang.UnsupportedClassVersionError: DoraditosPatt y/main : Unsupported major.minor version 51.0      
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620) 

Это означает, что...

  1. Классы, которые вы пытаетесь включить в свой проект при компиляции, были скомпилированы с более высокой версией Java (была скомпилирована с Java 7, но вы пытаетесь скомпилировать их в Java 6)
  2. Вы скомпилировали свой проект с использованием Java 7, но пытаетесь запустить его под Java 6

Или некоторые такие, например

Другие вопросы по тегам