[英]javac cannot find symbol DefaultTableCellHeaderRenderer
你能請人解釋一下使用 javac 時有什么問題嗎? 因為這個類是用 Eclipse 編譯成功的。 我給出以下 CLI 命令:
pardus@adige:/mylinuz/pocws/src/test/swing/component$ javac -verbose SortButtonRenderer.java
[parsing started SortButtonRenderer.java]
[parsing completed 12ms]
[search path for source files: .]
[search path for class files: /usr/lib/jvm/java-6-oracle/jre/lib/resources.jar,/usr/lib/jvm/java-6-oracle/jre/lib/rt.jar,/usr/lib/jvm/java-6-oracle/jre/lib/sunrsasign.jar,/usr/lib/jvm/java-6-oracle/jre/lib/jsse.jar,/usr/lib/jvm/java-6-oracle/jre/lib/jce.jar,/usr/lib/jvm/java-6-oracle/jre/lib/charsets.jar,/usr/lib/jvm/java-6-oracle/jre/lib/modules/jdk.boot.jar,/usr/lib/jvm/java-6-oracle/jre/classes,/usr/lib/jvm/java-6-oracle/jre/lib/ext/dnsns.jar,/usr/lib/jvm/java-6-oracle/jre/lib/ext/sunpkcs11.jar,/usr/lib/jvm/java-6-oracle/jre/lib/ext/localedata.jar,/usr/lib/jvm/java-6-oracle/jre/lib/ext/sunjce_provider.jar,.]
[loading java/awt/Component.class(java/awt:Component.class)]
[loading javax/swing/JLabel.class(javax/swing:JLabel.class)]
[loading javax/swing/JTable.class(javax/swing:JTable.class)]
SortButtonRenderer.java:8: package sun.swing.table does not exist
import sun.swing.table.DefaultTableCellHeaderRenderer;
^
SortButtonRenderer.java:10: cannot find symbol
symbol: class DefaultTableCellHeaderRenderer
public class SortButtonRenderer extends DefaultTableCellHeaderRenderer {
^
[loading java/lang/Object.class(java/lang:Object.class)]
[checking test.swing.component.SortButtonRenderer]
SortButtonRenderer.java:17: cannot find symbol
symbol : variable super
location: class test.swing.component.SortButtonRenderer
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
^
[loading javax/swing/JComponent.class(javax/swing:JComponent.class)]
[loading java/awt/Container.class(java/awt:Container.class)]
[loading java/awt/image/ImageObserver.class(java/awt/image:ImageObserver.class)]
[loading java/awt/MenuContainer.class(java/awt:MenuContainer.class)]
[loading java/io/Serializable.class(java/io:Serializable.class)]
[loading javax/swing/TransferHandler.class(javax/swing:TransferHandler.class)]
[loading javax/swing/TransferHandler$HasGetTransferHandler.class(javax/swing:TransferHandler$HasGetTransferHandler.class)]
[loading javax/swing/SwingConstants.class(javax/swing:SwingConstants.class)]
[loading javax/accessibility/Accessible.class(javax/accessibility:Accessible.class)]
SortButtonRenderer.java:19: cannot find symbol
symbol : method setHorizontalAlignment(int)
location: class test.swing.component.SortButtonRenderer
setHorizontalAlignment(JLabel.CENTER);
^
[loading java/lang/String.class(java/lang:String.class)]
SortButtonRenderer.java:20: cannot find symbol
symbol : method setText(java.lang.String)
location: class test.swing.component.SortButtonRenderer
setText((value == null) ? "" : value.toString());
^
SortButtonRenderer.java:21: incompatible types
found : test.swing.component.SortButtonRenderer
required: java.awt.Component
return this;
^
[total 297ms]
6 errors
有趣的是,缺少的類sun.swing.table.DefaultTableCellHeaderRenderer在rt.jar
可用,編譯器可以從rt.jar
加載其他類,例如java/awt/Color.class 。
package test.swing.component;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import sun.swing.table.DefaultTableCellHeaderRenderer;
public class SortButtonRenderer extends DefaultTableCellHeaderRenderer {
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
setHorizontalAlignment(JLabel.CENTER);
setText((value == null) ? "" : value.toString());
return this;
}
//other methods removed
}
請注意:當我運行 java8 的 javac 時仍然會出現錯誤。 但是帶有“endorseddirs /usr/lib/jvm/java-6-oracle/jre/lib”的java8的javac是可以的。
您確定命令行和 eclipse javac 運行的是同一版本嗎? (內存不足,但 options->search javac 應該顯示您使用哪個編譯器)和 javac -version 將在命令行上為您提供正確的版本。
編輯:是的,絕對要擺脫陽光。*進口! 它們只會導致更多的痛苦。
如果您需要保留 sun.* 類並使用 maven 打包,請將此配置添加到 maven-compiler-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgs>
<arg>-XDignore.symbol.file</arg>
</compilerArgs>
<fork>true</fork>
</configuration>
</plugin>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.