我正在使用Netbeans。由于某些原因,这些文件无法运行。我试图导入Netbeans中标签中的其他文件,但它们不起作用。我怎样才能使这个应用程序运行SimpleDateClient.java
作为主要方法。找不到符号:符号:class SimpleDate位置:class SimpleDateClient
这是SimpleDateClient.java
/* A client program to display SimpleDate object values
Anderson, Franceschi
*/
package SimpleDateClient;
import java.awt.*;
import javax.swing.JFrame;
public class SimpleDateClient extends JFrame
{
private String action = "";
private int animationPause = 2; // 2 seconds between animations
private SimpleDate dateObj; // declare SimpleDate object reference
public void workWithDates()
{
animate("dateObj reference declared");
/***** Add your code here *****/
/**** 1. Instantiate dateObj using an empty argument list */
dateObj = new SimpleDate();
animate("Instantiated dateObj - empty argument list");
/***** 2. Set the month to the month you were born */
//animate("Set month to birth month");
/***** 3. Set the day to the day of the month you were born */
//animate("Set day to birth day");
/***** 4. Set the year to the year you were born */
//animate("Set year to birth year");
/***** 5. Call the nextDay method */
//animate("Set the date to the next day");
/***** 6. Set the day to 32, an illegal value */
//animate("Set day to 32");
/***** 7. Set the month to 13, an illegal value */
//animate("Set month to 13");
/***** 8. Assign the value null to dateObj */
//animate("Set object reference to null");
/***** 9. Attempt to set the month to 1 */
}
public SimpleDateClient()
{
super("A SimpleDate Object");
setSize(300, 300);
setVisible(true);
}
public void paint(Graphics g)
{
super.paint(g);
// display action
g.drawString(action, 50, 250);
// object reference
int sX = 50, sY = 75;
int boxL = 75, boxH = 20;
g.drawRect(sX, sY, boxL, boxH);
g.drawString("dateObj", sX, sY - 10);
if (dateObj != null)
draw(g);
else
g.drawString("null", sX + 15, sY + 15);
}
public void draw(Graphics g)
{
int sX = 50, sY = 75;
int boxL = 75, boxH = 20;
// arrow
g.drawLine(sX + boxL, sY + boxH/2,
sX + boxL + 25, sY + boxH/2);
g.drawLine(sX + boxL + 25, sY + boxH/2,
sX + boxL + 25, sY + boxH * 2);
g.drawLine(sX + boxL + 25 - 5, sY + boxH * 2 - 5,
sX + boxL + 25, sY + boxH * 2);
g.drawLine(sX + boxL + 25 + 5, sY + boxH * 2 - 5,
sX + boxL + 25, sY + boxH * 2);
// month
g.drawString("month", sX + boxL - 50, sY + 2 * boxH + 15);
g.drawRect(sX + boxL, sY + 2 * boxH, boxL, boxH);
g.drawString(Integer.toString(dateObj.getMonth()),
sX + boxL + 5, sY + 2 * boxH + 15);
// day
g.drawString("day", sX + boxL - 50, sY + 3 * boxH + 15);
g.drawRect(sX + boxL, sY + 3 * boxH, boxL, boxH);
g.drawString(Integer.toString(dateObj.getDay()),
sX + boxL + 5, sY + 3 * boxH + 15);
// year
g.drawString("year", sX + boxL - 50, sY + 4 * boxH + 15);
g.drawRect(sX + boxL, sY + 4 * boxH, boxL, boxH);
g.drawString(Integer.toString(dateObj.getYear()),
sX + boxL + 5, sY + 4 * boxH + 15);
}
public void animate(String a)
{
action = a;
repaint();
Pause.wait((double) animationPause);
}
public static void main(String [] args)
{
SimpleDateClient app = new SimpleDateClient();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.workWithDates();
}
}
这是SimpleDate.java
/* A simple date class
Anderson, Franceschi
*/
package SimpleDateClient;
public class SimpleDate
{
private int month;
private int day;
private int year;
/** default constructor
* sets month to 1, day to 1 and year to 2000
*/
public SimpleDate()
{
setDate(1, 1, 2000);
}
/** overloaded constructor
* @param mm initial value for month
* @param dd initial value for day
* @param yyyy initial value for year
*
* passes parameters to set methods
*/
public SimpleDate(int mm, int dd, int yyyy)
{
setMonth(mm);
setYear(yyyy);
setDay(dd);
}
/* accessor methods */
int getMonth() { return month; }
int getDay() { return day; }
int getYear() { return year; }
/** mutator method */
/** setMonth
* @param mm new value for month
* if mm is between 1 and 12, sets month to mm
* otherwise, sets month to 1
*/
public void setMonth(int mm)
{
month = (mm >= 1 && mm <= 12 ? mm : 1);
}
/** setDay
* @param dd new value for day
* if dd is legal day for current month, sets day to dd
* otherwise, sets day to 1
*/
public void setDay(int dd)
{
day = (dd >= 1 && isValidDay(dd) ? dd : 1);
}
/** setYear
* @param yyyy new value for year
* sets year to yyyy
*/
public void setYear(int yyyy)
{
year = yyyy;
}
/** sets date to the next day
*/
public void nextDay()
{
if (! isValidDay(++day))
{
day = 1;
if (++month > 12)
{
month = 1;
year++;
}
}
}
private boolean isValidDay(int newDay)
{
int [] daysInMonth = { 0, 31, 28, 31,
30, 31, 30,
31, 31, 30,
31, 30, 31 };
if (newDay > daysInMonth[month])
{
if (month == 2 && isLeapYear() && newDay == 29)
return true;
else
return false;
}
else
return true;
}
private boolean isLeapYear()
{
return !(year % 4 != 0
||(year % 100 == 0 && year % 400 != 0));
}
/** setDate
* @param mm new value for month
* @param dd new value for day
* @param yyyy new value for year
* passes parameters to setMonth, setDay, and setYear
*/
public void setDate(int mm, int dd, int yyyy)
{
setYear(yyyy); // set year first (could be leap year)
setMonth(mm); // set month next
setDay(dd); // set day
}
/** toString
* @return String
* returns date in mm/dd/yyyy format
*/
public String toString()
{
return month + "/" + day + "/" + year;
}
/** equals
* @param d Object to compare to this object
* @return true if d is equal to this object
* false, otherwise
*/
public boolean equals(Object d)
{
if (!(d instanceof SimpleDate))
return false;
SimpleDate d1 = (SimpleDate)d;
if (month == d1.month
&& day == d1.day
&& year == d1.year)
return true;
else
return false;
}
}
这是Pause.java
/* Pause class to pause applications
Anderson, Franceschi
*/
package SimpleDateClient;
public class Pause
{
public static void wait(double seconds)
{
try
{
Thread.sleep((int) (seconds * 1000));
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
但是,你的代码对我来说很好。不要在Swing中使用'Thread.sleep',这会给你带来问题,Swing是单线程的,而不是线程安全的,这意味着你永远不应该从Event Dispatching Thread的上下文之外更新UI的状态,也不应该你应该用任何长时间运行的任务来阻塞EDT(比如'Thread.sleep'。看看[并发中的Swing](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)和[How使用Swing定时器](http://docs.oracle.com/javase/tutorial/uiswing/misc/timer。html)获取更多信息 – MadProgrammer
避免重写顶级容器的'paint',有太多的问题可能会搞砸你的画图代码,而是使用'JPanel'并覆盖它的'paintComponent'并将你的自定义绘画放在那里。然后将面板添加到您喜欢的任何容器中。 [在AWT和Swing中绘制](http://www.oracle.com/technetwork/java/painting-140037.html)和[执行自定义绘画](http://docs.oracle.com/javase/tutorial/uiswing/painting /) – MadProgrammer
哦,你应该在EDT的上下文中开始你的代码,这将解决大量可能的问题,参见[初始线程](http://docs.oracle.com/javase /tutorial/uiswing/concurrency/initial.html) – MadProgrammer