Como posso resolver esse erro de tempo de execução que parece estar relacionado às caixas de diálogo?
Pergunta
(Intel Mac OS 10.4.11, NetBeans IDE 6.8, Soylatte 1.0.3)
Embora eu esteja atualmente fazendo um curso universitário em Java e meu código é baseado em algumas perguntas do meu livro de Java, gostaria de deixar perfeitamente claro que isso não é a lição de casa. Isso é auto-assinado para os fins de estudo e meu professor provavelmente nunca verá isso, muito menos classificá-lo. Independentemente disso, suspeito que este seja um problema relacionado à configuração, pois não tive problemas com esse programa em uma máquina Vista no campus. Supondo que estou certo, não deve haver nenhum problema com nenhuma das políticas desta comunidade, pois não precisarei receber nenhum código de "resposta" para resolver esse problema.
Em Netbeans, meu programa compila e funciona bem, mas produz alguns erros de tempo de execução. Alguma ideia do que poderia estar acontecendo aqui?
Aqui está o meu código:
import java.util.Scanner; // Needed for console input.
import javax.swing.JOptionPane; // Needed for dialog boxes.
/**
This program performs the actions requested in questions 2.35 and 2.36 in the textbook.
* @author Dan
*/
public class Pages98To99 {
public static void main(String[]args){
// Asks the user for what answer he/she wants to see.
System.out.println("Do you want to see the answer to 2.35 or 2.36?");
Scanner keyboard = new Scanner(System.in); // Creates a scanner object.
double answer = keyboard.nextDouble();
if (answer == 2.35){
//2.35
JOptionPane.showMessageDialog(null, "Greetings Earthling.");
JOptionPane.showInputDialog("Enter a number.");}
else if (answer == 2.36){
//2.36
String str = JOptionPane.showInputDialog("Please enter your age.");
// Gets age.
int age = Integer.parseInt(str);} /* Converts age from a string to an
integer.*/
else
JOptionPane.showMessageDialog(null, "Go to another program.");
System.exit(0); // Ends the program
}
}
Aqui estão os erros de tempo de execução produzidos pela NetBeans:
2010-02-15 21:23:54.659 java[3891] CFLog (0): CFMessagePort: bootstrap_register(): failed 1103 (0x44f), port = 0xf203, name = 'java.ServiceProvider' See /usr/include/servers/bootstrap_defs.h for the error codes. 2010-02-15 21:23:54.660 java[3891] CFLog (99): CFMessagePortCreateLocal(): failed to name Mach port (java.ServiceProvider)
A seguir, é apresentada uma sessão de terminal de solução de problemas usando a versão mais recente do JDK, cortesia de Soylatte (http://landonf.bikemonkey.org/static/soylatte/, que falha em produzir uma caixa de diálogo), bem como a mais antiga fornecida pela Apple como parte do meu sistema operacional (que como no NetBeans funciona bem também).
Last login: Sat Feb 20 00:12:55 on ttyp1
Welcome to Darwin!
Dans-MacBook:~ Dan$ cd /Volumes/Lexar/NetBeansProjects/MacBook-Made/test/;echo $PATH;java -version;javac -version;javac Pages98To99.java;java Pages98To99;PATH=/sw/bin:/sw/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin;java -version;javac -version;javac Pages98To99.java;java Pages98To99
/sw/bin:/sw/sbin:/Applications/soylatte16-i386-1.0.3/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin
java version "1.6.0_03-p3"
Java(TM) SE Runtime Environment (build 1.6.0_03-p3-landonf_19_aug_2008_14_55-b00)
Java HotSpot(TM) Server VM (build 1.6.0_03-p3-landonf_19_aug_2008_14_55-b00, mixed mode)
javac 1.6.0_03-p3
Do you want to see the answer to 2.35 or 2.36?
0
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
at sun.awt.X11.XToolkit.(XToolkit.java:89)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at java.awt.Toolkit$2.run(Toolkit.java:836)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:828)
at sun.swing.SwingUtilities2$AATextInfo.getAATextInfo(SwingUtilities2.java:120)
at javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:1556)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:130)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1591)
at javax.swing.UIManager.setLookAndFeel(UIManager.java:537)
at javax.swing.UIManager.setLookAndFeel(UIManager.java:577)
at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1331)
at javax.swing.UIManager.initialize(UIManager.java:1418)
at javax.swing.UIManager.maybeInitialize(UIManager.java:1406)
at javax.swing.UIManager.getDefaults(UIManager.java:656)
at javax.swing.UIManager.getString(UIManager.java:802)
at javax.swing.UIManager.getString(UIManager.java:819)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:592)
at Pages98To99.main(Pages98To99.java:29)
java version "1.5.0_19"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_19-b02-306)
Java HotSpot(TM) Client VM (build 1.5.0_19-138, mixed mode, sharing)
javac 1.5.0_19
javac: no source files
Usage: javac
where possible options include:
-g Generate all debugging info
-g:none Generate no debugging info
-g:{lines,vars,source} Generate only some debugging info
-nowarn Generate no warnings
-verbose Output messages about what the compiler is doing
-deprecation Output source locations where deprecated APIs are used
-classpath Specify where to find user class files
-cp Specify where to find user class files
-sourcepath Specify where to find input source files
-bootclasspath Override location of bootstrap class files
-extdirs Override location of installed extensions
-endorseddirs Override location of endorsed standards path
-d Specify where to place generated class files
-encoding Specify character encoding used by source files
-source Provide source compatibility with specified release
-target Generate class files for specific VM version
-version Version information
-help Print a synopsis of standard options
-X Print a synopsis of nonstandard options
-J Pass directly to the runtime system
Do you want to see the answer to 2.35 or 2.36?
0
2010-02-20 00:16:09.967 java[4618] CFLog (0): CFMessagePort: bootstrap_register(): failed 1103 (0x44f), port = 0xf103, name = 'java.ServiceProvider'
See /usr/include/servers/bootstrap_defs.h for the error codes.
2010-02-20 00:16:09.968 java[4618] CFLog (99): CFMessagePortCreateLocal(): failed to name Mach port (java.ServiceProvider)
Dans-MacBook:/Volumes/Lexar/NetBeansProjects/MacBook-Made/test Dan$
Abaixo está uma tentativa de obter informações. Do ambiente do Windows Vista de um computador no meu laboratório da classe Java, que compilou e executou o programa perfeitamente. Sim, deveria ter usado -versão. Vou atualizá -lo se necessário para resolver esse problema.
Microsoft Windows [Version 6.0.6001]
Copyright (c) 2006 Microsoft Corporation. All rights reserved.
C:\Users\IRC111>java -showversion;javac -showversion
Unrecognized option: -showversion;javac
Could not create the Java virtual machine.
C:\Users\IRC111>java -showversion
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-client to select the "client" VM
-server to select the "server" VM
-hotspot is a synonym for the "client" VM [deprecated]
The default VM is client.
-cp
-classpath
A ; separated list of directories, JAR archives,
and ZIP archives to search for class files.
-D=
set a system property
-verbose[:class|gc|jni]
enable verbose output
-version print product version and exit
-version:
require the specified version to run
-showversion print product version and continue
-jre-restrict-search | -jre-no-restrict-search
include/exclude user private JREs in the version search
-? -help print this help message
-X print help on non-standard options
-ea[:...|:]
-enableassertions[:...|:]
enable assertions
-da[:...|:]
-disableassertions[:...|:]
disable assertions
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
-agentlib:[=]
load native agent library , e.g. -agentlib:hprof
see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:[=]
load native agent library by full pathname
-javaagent:[=]
load Java programming language agent, see java.lang.instrument
-splash:
show splash screen with specified image
C:\Users\IRC111>javac -showversion
javac: invalid flag: -showversion
Usage: javac
use -help for a list of possible options
C:\Users\IRC111>
Fiz o melhor que poderia pesquisar e pesquisar este site em meu tempo limitado, mas não tive sorte de resolver isso por conta própria. Além de um pouco de experiência em super usuário e AppleScript, sou muito novo no estouro de empilhamento e programação, por isso seja gentil.
Solução
O primeiro erro não tem nada a ver com seu código. É uma configuração de NetBeans ou uma configuração inválida em seu projeto. Se você compilar seu código na linha de comando com Javac e executá -lo com Java você vai ficar bem. Mas isso não responde à sua pergunta. Se eu fosse você, tentaria reinstalar o NetBeans.
O segundo erro mostra que sua JVM está tentando executar seu código no sistema XWindow. XWindow é o sistema GUI para Linux. Felizmente, há uma versão disponível para Mac e está disponível em seu DVD de Snow Leopard.