Я в процессе создания приложения на Java, которое загружает и отображает X3D-модель, и я загрузил все правильные jars
и поместил их в проект, и я могу видеть каждый из классов, который содержит каждый из jars
. Тем не менее, когда я запускаю мой код в NetBeans, я получаю следующее сообщение об ошибке:java.lang.IllegalAccessError при запуске кода
No skin defined in xj3d-skin.properties
Producing default properties.
Exception in thread "main" java.lang.IllegalAccessError: tried to access method org.j3d.aviatrix3d.ViewEnvironment.<init>()V from class org.j3d.aviatrix3d.surface.BaseRenderingProcessor
at org.j3d.aviatrix3d.surface.BaseRenderingProcessor.<init>(BaseRenderingProcessor.java:223)
at org.j3d.aviatrix3d.surface.RenderingProcessor.<init>(RenderingProcessor.java:49)
at org.j3d.aviatrix3d.surface.SimpleAWTSurface.<init>(SimpleAWTSurface.java:95)
at org.web3d.ogl.browser.X3DBrowserJPanel.<init>(X3DBrowserJPanel.java:264)
at org.web3d.ogl.browser.X3DOGLBrowserFactoryImpl.createComponent(X3DOGLBrowserFactoryImpl.java:249)
at org.web3d.x3d.sai.BrowserFactory.createX3DComponent(BrowserFactory.java:252)
at xj3dtest.Xj3DTest.<init>(Xj3DTest.java:43)
at xj3dtest.Xj3DTest.main(Xj3DTest.java:59)
C:\Users\matt\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
код Java, что у меня есть для проекта на момент времени показана ниже:
package xj3dtest;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import static java.lang.Boolean.TRUE;
import javax.swing.JFrame;
import org.web3d.x3d.sai.Browser;
import org.web3d.x3d.sai.BrowserFactory;
import org.web3d.x3d.sai.X3DComponent;
import org.web3d.x3d.sai.X3DScene;
import java.util.HashMap;
public class Xj3DTest extends JFrame {
public Xj3DTest(String title) {
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Setup browser parameters
HashMap requestedParameters=new HashMap();
requestedParameters.put("Antialiased",TRUE);
requestedParameters.put("TextureQuality","MEDIUM");
requestedParameters.put("PrimitiveQuality","MEDIUM");
requestedParameters.put("Xj3D_InterfaceType","SWING");
requestedParameters.put("Xj3D_NavbarShown",TRUE);
requestedParameters.put("Xj3D_NavbarPosition","TOP");
requestedParameters.put("Xj3D_LocationShown",TRUE);
requestedParameters.put("Xj3D_LocationPosition","TOP");
requestedParameters.put("Xj3D_LocationReadOnly",TRUE);
requestedParameters.put("Xj3D_ShowConsole",TRUE);
requestedParameters.put("Xj3D_OpenButtonShown",TRUE);
requestedParameters.put("Xj3D_ReloadButtonShown",TRUE);
requestedParameters.put("Xj3D_StatusBarShown",TRUE);
requestedParameters.put("Xj3D_FPSShown",TRUE);
requestedParameters.put("Xj3D_ContentDirectory","CurrentDirectory");
requestedParameters.put("Xj3D_AntialiasingQuality","LOW");
requestedParameters.put("Xj3D_Culling_Mode", "frustum");
System.setProperty("x3d.sai.factory.class", "org.web3d.ogl.browser.X3DOGLBrowserFactoryImpl");
X3DComponent x3dComponent = BrowserFactory.createX3DComponent(requestedParameters);
Browser browser = x3dComponent.getBrowser();
Component browserComponent = (Component) x3dComponent.getImplementation();
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
cp.add(browserComponent, BorderLayout.CENTER);
X3DScene scene = browser.createX3DFromURL(new String[] {"test.x3dv"});
browser.replaceWorld(scene);
}
public static void main(String[] args) {
Xj3DTest frame = new Xj3DTest("Xj3D test");
frame.setSize(640, 480);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Как вы можете видеть из сообщения об ошибке, которое я получаю, я получаю исключение, которое составляет java.lang.IllegalAccessError
, и мне интересно, как я буду исправлять его. Благодарю.
EDIT
В следующем списке все банки, которые я использую.
aviatrix3d-all
aviatrix3d-all_2.2.0
aviatrix3d-core
aviatrix3d-glsl
aviatrix3d-utils
dis-enums
gnu-redexp-1.0.8
httpclient
j3d-org-all_3.0.0-nps
jogl_old
uri
vecmath
vlc_uri
xj3d-common_2.0.0
xj3d-config_
xj3d-core_2.0.0
xj3d-ecmascript_2.0.0
xj3d-external-sai_2.0.0
xj3d-j3d
xj3d-java-sai_2.0.0
xj3d-jaxp_2.0.0
xj3d-net
xj3d-norender_2.0.0
xj3d-ogl
xj3d-parser_2.0.0
xj3d-render_2.0.0
xj3d-runtime
xj3d-runtime_2.0.0
xj3d-sai_2.0.0
xj3d-sav_2.0.0
xj3d-script-base
xj3d-script-base_2.0.0
xj3d-xml_2.0.0
EDIT # 2
Я сделал изменения, и я скачал xj3d-2.1 installer
и поместить его в библиотеку и поместить его в проект. И мой код выглядит следующим образом.
package xj3dtest;
import java.awt.BorderLayout;
import java.awt.Container;
import static java.lang.Boolean.TRUE;
import javax.swing.JFrame;
import org.web3d.x3d.sai.Browser;
import org.web3d.x3d.sai.BrowserFactory;
import org.web3d.x3d.sai.X3DComponent;
import org.web3d.x3d.sai.X3DScene;
import java.util.HashMap;
public class Xj3DTest extends JFrame {
public Xj3DTest(String title) {
super(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Setup browser parameters
HashMap requestedParameters=new HashMap();
requestedParameters.put("Antialiased",TRUE);
requestedParameters.put("TextureQuality","MEDIUM");
requestedParameters.put("PrimitiveQuality","MEDIUM");
requestedParameters.put("Xj3D_InterfaceType","SWING");
requestedParameters.put("Xj3D_NavbarShown",TRUE);
requestedParameters.put("Xj3D_NavbarPosition","TOP");
requestedParameters.put("Xj3D_LocationShown",TRUE);
requestedParameters.put("Xj3D_LocationPosition","TOP");
requestedParameters.put("Xj3D_LocationReadOnly",TRUE);
requestedParameters.put("Xj3D_ShowConsole",TRUE);
requestedParameters.put("Xj3D_OpenButtonShown",TRUE);
requestedParameters.put("Xj3D_ReloadButtonShown",TRUE);
requestedParameters.put("Xj3D_StatusBarShown",TRUE);
requestedParameters.put("Xj3D_FPSShown",TRUE);
requestedParameters.put("Xj3D_ContentDirectory","CurrentDirectory");
requestedParameters.put("Xj3D_AntialiasingQuality","LOW");
requestedParameters.put("Xj3D_Culling_Mode", "frustum");
System.setProperty("x3d.sai.factory.class", "org.xj3d.ui.awt.browser.ogl.X3DOGLBrowserFactoryImpl");
X3DComponent x3dComponent = BrowserFactory.createX3DComponent(requestedParameters);
Browser browser = x3dComponent.getBrowser();
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
cp.add((javax.swing.JPanel)x3dComponent, BorderLayout.CENTER);
X3DScene scene = browser.createX3DFromURL(new String[] {"test.x3dv"});
browser.replaceWorld(scene);
}
public static void main(String[] args) {
Xj3DTest frame = new Xj3DTest("Xj3D test");
frame.setSize(640, 480);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
И ошибка времени выполнения, что я получаю сейчас:
Feb 27, 2016 10:00:03 PM java.util.prefs.WindowsPreferences <init>
WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
Exception in thread "main" java.lang.IllegalArgumentException: BrowserConfig: PrimitiveQuality must be low, medium or high
at org.xj3d.sai.BrowserConfig.initialize(BrowserConfig.java:355)
at org.xj3d.sai.BrowserConfig.<init>(BrowserConfig.java:240)
at org.xj3d.ui.awt.browser.ogl.X3DOGLBrowserFactoryImpl.createComponent(X3DOGLBrowserFactoryImpl.java:211)
at org.web3d.x3d.sai.BrowserFactory.createX3DComponent(BrowserFactory.java:263)
at xj3dtest.Xj3DTest.<init>(Xj3DTest.java:42)
at xj3dtest.Xj3DTest.main(Xj3DTest.java:56)
C:\Users\matt\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
Когда вы говорите «все правильные банки», какие именно JARs вы имеете в виду? Сообщение об исключении в вашем вопросе подсказывает мне, что ваши версии JAR непоследовательны. Измените свой вопрос, чтобы включить список всех JAR, которые вы используете, вместе со своими версиями. –
@ LukeWoodward Я только что обновил вопрос. – smitthy
Я просмотрел некоторые из aviatrix3d и Xj3D JAR, которые я смог найти, и я не могу найти какие-либо классы в пакете 'org.j3d.aviatrix3d.surface'. Я также не вижу результатов поиска Google для таких классов. Знаете ли вы, какие из ваших JAR-файлов содержат, например, класс «BaseRenderingProcessor», который появляется в вашем стеке? Среди ваших JAR у вас есть номера без номера версии и некоторые с тем же именем и номером версии (например, 'aviatrix3d-all' и' aviatrix3d-all-2.2.0'). Возможно ли, что те, у кого нет суффикса, являются старыми версиями? –