Aqui está o código:
package mscontroller;
import javax.swing.*;
import com.apple.eawt.Application;
public class Main {
public static void main(String[] args)
{
Application app = new Application();
app.setEnabledAboutMenu(true);
AMEListener listener = new AMEListener();
app.addApplicationListener(listener);
JFrame mainFrame = new JFrame("Application Menu Example");
mainFrame.setSize(500, 500);
mainFrame.setVisible(true);
}
}
aqui está o erro:
Exception in thread "main" java.lang.Error: Unresolved compilation
problems: Access restriction: The type 'Application' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Access restriction: The constructor 'Application()' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Access restriction: The type 'Application' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Access restriction: The method
'Application.setEnabledAboutMenu(boolean)' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
AMEListener cannot be resolved to a type AMEListener cannot be
resolved to a type
at mscontroller.Main.main(Main.java:9)
eclipse diz o seguinte:
Restrição de acesso: o tipo 'Aplicativo' não é API (restrição na biblioteca necessária '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Respostas:
Isso aconteceu comigo também, e as respostas dadas aqui já não eram satisfatórias, então fiz minha própria pesquisa.
Fundo: Restrições de Acesso do Eclipse
O Eclipse possui um mecanismo chamado restrições de acesso para impedir o uso acidental de classes que, segundo o Eclipse, não fazem parte da API pública. Geralmente, o Eclipse está certo sobre isso, nos dois sentidos: geralmente não queremos usar algo que não faz parte da API pública. E o Eclipse geralmente está certo sobre o que é e o que não faz parte da API pública.
Problema
Agora, pode haver situações em que você deseja usar a Não API pública, como
sun.misc
(você não deveria, a menos que saiba o que está fazendo). E pode haver situações em que o Eclipse não está realmente certo (foi o que aconteceu comigo, eu só queria usarjavax.smartcardio
). Nesse caso, obtemos esse erro no Eclipse.Solução
A solução é alterar as restrições de acesso.
javax/smartcardio/**
", para você pode ser "com/apple/eawt/**
".fonte
Eu estava tendo o mesmo problema. Quando criei o projeto java inicialmente no Eclipse, especifiquei o JRE 8. Quando entrei no caminho de construção do projeto e editei a Biblioteca do Sistema JRE, o ambiente de execução do Java 8 foi selecionado. Quando eu escolhi usar um "Alernate JRE" (ainda java 8), ele corrigiu o erro para mim.
fonte
Adicionando permissão acessível javafx no eclipse oxygen, vá para projeto> propriedades> caminho de construção java> bibliotecas> expanda as bibliotecas e clique duas vezes em> Regras de acesso, onde você define a permissão Resolução: Padrão de regra acessível: javafx / **
fonte
Para começar ( e não relacionado ), instanciar a
Application
classe por si mesmo não parece ser o uso pretendido. Pelo que se pode ler de sua origem , espera-se que você use a instância estática retornada porgetApplication()
.Agora vamos ao relatório de erros do Eclipse. Eu corri para um problema semelhante recentemente:
Access restriction: The method ... is not API (restriction on required project)
. Chamei o método em questão como o método de um objeto que herdou esse método de uma superclasse. Tudo o que eu precisava fazer era adicionar o pacote em que a superclasse estava nos pacotes importados pelo meu plugin.No entanto, existem muitas causas diferentes para erros com base na "restrição no projeto / biblioteca necessário ". Semelhante ao problema descrito acima, o tipo que você está usando pode ter dependências para pacotes que não são exportados pela biblioteca ou podem não ser exportados por si. Nesse caso, você pode tentar rastrear os pacotes ausentes e exportá-los por conta própria, como sugerido aqui , ou tentar Regras de Acesso. Outros cenários possíveis incluem:
Isso acabou sendo mais uma mistura de questões relacionadas a restrições do que uma resposta real. Mas como a restrição de projetos necessários é um erro tão versátil a ser relatado, a receita perfeita provavelmente ainda será encontrada.
fonte
Eu tive esse problema porque a faceta do projeto associada ao meu projeto era a versão java errada.
Para corrigir isso, fiz o seguinte:
Isso reconstruirá seu projeto e, esperançosamente, o erro será resolvido.
fonte
Tivemos que mudar nosso aplicativo para compilar com o JDK 1.8 usando Window-> Preferences-> Java-> Installed JREs . No entanto, após alterar isso, a Biblioteca do Sistema JRE especificada no Project Explorer ainda estava incorreta. Para corrigir isso, clique com o botão direito do mouse em "Biblioteca do sistema JRE [errado-jre-aqui]" e altere do ambiente Execution: para "Padrão do espaço de trabalho (padrão do yer-aqui)"
fonte
Funcionou: Propriedades do Projeto -> ProjectFacets -> Runtimes -> jdk1.8.0_45 -> Aplicar
fonte
Na barra de menus superior do Eclipse:
fonte
Se você está tendo esse mesmo problema usando o Spring Tool Suite:
O IDE subjacente do Spring Tool Suite é, de fato, o Eclipse. Eu recebi esse erro agora mesmo tentando usar algumas
com.sun.net
classes. Para remover esses erros e impedir que eles apareçam na plataforma Eclipse Luna SR1 (4.4.2) do STS:Você está pronto para ir.
fonte
Teve o mesmo problema. Aqui está como eu resolvi: Vá para o Package Explorer. Clique com o botão direito do mouse em JRE System Library e acesse Propriedades. No Contêiner do Caminho de Classe> Selecionar JRE para o caminho de construção do projeto, selecione a terceira opção (JRE padrão da Área de Trabalho).
Fonte: https://thenewboston.com/forum/topic.php?id=3917
fonte
Vá para a seguinte configuração:
Janela -> Preferências -> Referência do Java-Compiler-Erros / Avisos-Descontinuada e Restrita à API Proibida (regras de acesso)
Defina como
Warning
ouIgnore
.fonte
Usamos o IBM Rational Application Developer (RAD) e tivemos o mesmo problema.
Mensagem de erro:
Restrição de acesso: O tipo 'JAXWSProperties' não é API (restrição na biblioteca necessária 'C: \ IBM \ RAD95 \ jdk \ jre \ lib \ rt.jar')
Solução:
vá para o caminho de construção java e, na guia Biblioteca, remova a Biblioteca do sistema JRE. Em seguida, novamente Adicionar Biblioteca -> Biblioteca do Sistema JRE
fonte
No Eclipse Mars.2 Release (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
selecione JRE ... e pressione Editar: Alterne para o Workspace JRE (jdk1.8.0_77)
Funciona para mim.
fonte
Eu tenho eclipse JRE 8.112, não tenho certeza se isso importa, mas o que eu fiz foi isso:
Isso resolveu meu problema.
fonte
Simplesmente adiciono o clip (e) no mercado do eclipse. Fácil e Simples
fonte
Estou usando o eclipse neon 3. Eu só queria usar javafx.application.Application, então segui a resposta de Christian Hujer acima e funcionou. Apenas algumas dicas: as regras de acesso são muito semelhantes à declaração de importação. Para mim, as regras de acesso que adicionei foram "javafx / application / **". Apenas substitua o ponto na declaração de importação por barra e essa é a regra. Espero que ajude.
fonte
Eu tive um pequeno problema diferente. Na biblioteca Projeto - Propriedades - Bibliotecas - JRE, a versão lib do JRE estava errada. Remova e defina o atual e pronto - todos os
Access restriction...
avisos estão ausentes.fonte
Mesmo que seja uma pergunta antiga, para mim no Eclipse, clique com o botão direito do mouse na pasta Src e nas propriedades (Alt + Enter) e verifique se
Ignore optional compile problems
o erro foi removido.fonte
Se alguém está tendo esse problema apenas na sua ferramenta de IC enquanto executa o maven, o que fez o truque para mim foi definir explicitamente o ambiente de execução no seu
MANIFEST.MF
.No meu caso, fiz isso inserindo a seguinte linha no meu arquivo de manifesto do pacote configurável OSGi:
fonte